私のSDカードにパーティションがありますが、Linuxはそのパーティションのデバイスエントリを作成しません。

私のSDカードにパーティションがありますが、Linuxはそのパーティションのデバイスエントリを作成しません。

まあ、ここで何が起こっているのかわかりません。最初はvfatパーティションが完全に削除されなかったことを示す一部のフラグが設定されていてマウントできなかった問題だと思いました。この問題を解決する方法があったことを覚えていますが、今は見つかりません。とにかく、私はこれがここでは問題ではないと思います。運がないので数日間検索してきました。

これは私のカメラの1つに使用するSDHCカード(32GB)です(同じUSBアダプタを使用する別のカメラ用の32GBカードが1つあり、Linuxではうまく機能します)。問題なくカメラからインポートできます。 Linuxでアダプタ+カードを接続すると、Konquerorにデバイスが表示されません。だから私はこれを試しました:

# mount /dev/sdd /d/try/2
mount: you must specify the filesystem type
# mount -t vfat /dev/sdd /media/sdcard
mount: wrong fs type, bad option, bad superblock on /dev/sdd,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

fdisk説明する

fdisk -l /dev/sdd

Disk /dev/sdd: 31.9 GB, 31914983424 bytes
255 heads, 63 sectors/track, 3880 cylinders, total 62333952 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1            8192    62333951    31162880    c  W95 FAT32 (LBA)

しかし、

# ls /dev/sdd*
/dev/sdd

したがって、/dev/sddXデバイスがfdisk存在しても、リストには表示されません! gparted/dev/sdd1パーティションは問題なく表示されます(ただし、以前は4MBの空き容量がありました)。だから私はここで何か他のことが起こっていると思う。この空き容量が問題の原因である可能性はありますか?なぜこれが起こるのですか? 4MBをすべて使用するようにパーティションのサイズを変更すると(どのようにこれが起こりましたか?)、これらの問題をすべて解決できますか?これにより、カメラからデータを読み取ることができなくなりますか?それとも悪いことは、回復不能なほど破損しているのでしょうか?私は以前、Linux内でこのカードにアクセスできることを確信しています。なぜなら、いくつかのファイルを移動したようだからです(他のカメラのいくつかの写真が含まれています)。だから変に今は接続できませんね。

基本的に、この問題を解決する方法(可能な限り非破壊的)と問題の原因が何であるか(今後これを防ぐために)知りたいです。参考までにdmesg出力を含めました。

# dmesg|tail -30
[3783978.490032] usb 1-5: new high-speed USB device number 44 using ehci_hcd
[3783978.608523] usb 1-5: New USB device found, idVendor=05e3, idProduct=0727
[3783978.608528] usb 1-5: New USB device strings: Mfr=3, Product=4, SerialNumber=2
[3783978.608530] usb 1-5: Product: USB Storage
[3783978.608531] usb 1-5: Manufacturer: Generic
[3783978.608533] usb 1-5: SerialNumber: 000000000207
[3783978.609406] scsi29 : usb-storage 1-5:1.0
[3783979.610445] scsi 29:0:0:0: Direct-Access     Generic  STORAGE DEVICE   0207 PQ: 0 ANSI: 0
[3783979.613096] sd 29:0:0:0: Attached scsi generic sg3 type 0
[3783979.773160] sd 29:0:0:0: [sdd] 62333952 512-byte logical blocks: (31.9 GB/29.7 GiB)
[3783979.774295] sd 29:0:0:0: [sdd] Write Protect is off
[3783979.774300] sd 29:0:0:0: [sdd] Mode Sense: 0b 00 00 08
[3783979.775406] sd 29:0:0:0: [sdd] No Caching mode page present
[3783979.775410] sd 29:0:0:0: [sdd] Assuming drive cache: write through
[3783979.779038] sd 29:0:0:0: [sdd] No Caching mode page present
[3783979.779048] sd 29:0:0:0: [sdd] Assuming drive cache: write through
[3783981.471143] sd 29:0:0:0: [sdd] Unhandled sense code
[3783981.471147] sd 29:0:0:0: [sdd]  Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[3783981.471150] sd 29:0:0:0: [sdd]  Sense Key : Medium Error [current] 
[3783981.471153] sd 29:0:0:0: [sdd]  Add. Sense: Data phase CRC error detected
[3783981.471157] sd 29:0:0:0: [sdd] CDB: Read(10): 28 00 00 00 00 00 00 00 08 00
[3783981.471162] end_request: I/O error, dev sdd, sector 0
[3783981.471166] Buffer I/O error on device sdd, logical block 0
[3783981.482542] Dev sdd: unable to read RDB block 0
[3783981.482548]  sdd: unable to read partition table
[3783981.486264] sd 29:0:0:0: [sdd] No Caching mode page present
[3783981.486267] sd 29:0:0:0: [sdd] Assuming drive cache: write through
[3783981.486269] sd 29:0:0:0: [sdd] Attached SCSI removable disk

答え1

いくつかの進歩があります(適切な最終ソリューションを見つけたら、この回答を編集します)。 @INDIVIDUAL-ITのコマンドを使用してデバイスのフルバックアップを実行した後dd(bs = 1Mを使用すると、転送速度が非常に遅くなります)。バックアップファイルをインストールできませんが、

# dd if=backup.img of=backup-skip.img bs=1M skip=4

インストール可能なファイルを作成します(バックアップをスキップする.img)、私が知っている限り、すべてのファイルがそこにあり、アクセスできます。 (更新:この削除された画像をSDカードに書き換えると、Linuxは自動的にそれを検出してマウントしますが、カメラでは機能しません。)

再ロードgpartedし、パーティションの前にある4MBの空き領域を削除しようとしましたが、不可能であり、パーティションがすべてのスペースを使用することを許可しておらず、少なくとも1MBは削除できませんでした(すべてのオプションを試しました)調整、しかしサイコロはありません)。

好奇心が強いlbasdd1パーティションの選択を解除しました。この変更を確認するためのプロンプトが表示されず、デバイスに変更を適用するためにどこかをクリックしませんでしたが、アダプタのLEDが点滅しているのを見て、突然私のSDカードエントリがKonquerorに表示されました。 USBデバイスをマウント解除してプラグを抜いて再接続しましたが、SDカードが自動的に検出されず、ステップ1に戻りました。これで、デバイスで有効になっていないとgparted表示されます。lba奇妙な。

パーティションが検出されました!

奇妙なギャップ効果のため、霧が記憶から少し消えて、以下を実行しました。

# partprobe

突然/dev/sdd1が作成され、デバイスがKonquerorに表示されます。したがって、まだ最終的な解決策ではありませんが(毎回rootとしてpartprobeを実行する必要があるため)、少なくとも私のファイルにアクセスできます。永久的な解決策を見つけるとき、これが誰かに役立つことを願っています。

答え2

あなたのパーティションテーブルは私にとって少し混乱しているようです。

  1. dd:を使用すると、カード全体をバックアップできますdd if=/dev/sdd of=backup.img bs=1M。 ddがSDカードをコピーできない場合は、ハードウェアが破損している可能性があります。まだ幸運を試してみることができます。救う
  2. 使用テストディスクパーティション表を復元してみてください。 backup.imgファイルを復元し、バックアップファイルもバックアップしてください。状況を悪化させないようにするためです。
  3. 最初に使用した4MBを削除してください。dd if=backup.img of=backup_striped bs=1M skip=4
  4. 回復により、すべてのファイルを含むインストール可能ファイルが提供され、fsckでテスト中にエラーが発生しない場合は、回復したファイルをSDカードに書き換えることができます。dd if=backup_striped of=/dev/sdd bs=1M 正しいドライブに書き込んでいることを確認してください。
  5. パーティションの回復に失敗した場合は、TestDiskを使用してファイルを1つずつ回復できます。パラマウントまたはメス

TestDiskを使用して、次のことができます。

答え3

ログによると、カーネルがカードを検出した直後にパーティションテーブルを読み取ろうとすると、ハードウェアでエラーが発生します。しかし、partprobe後で呼び出すと、カーネルはパーティションテーブルをよく読み取ることができます。ハードウェアエラーやドライバエラーが原因で初期読み取りが失敗する可能性があります。 SD カードまたはカードリーダーのファームウェアが初期化を完了するのに時間がかかり、ドライバーが早期に読み取ろうとしている可能性があります。ハードウェアを変更せずに回避策は、ドライバに遅延を導入することです。

回避策として、次のことができます。udevルールの追加デバイスを一致させ、スクリプトを実行する

#!/bin/sh
sleep 1
partprobe "$DEVNAME"

関連情報