Raspberry Piで使用したSDカードを持っています。このSDカードをLinuxPCにマウントしてファイルを取得したいのですが、できません。
SDカードをカードリーダーに挿入すると、dmesgで次のように表示されます。
[ 114.117896] usb 4-1: new full-speed USB device number 2 using ohci-pci
[ 114.292885] usb 4-1: New USB device found, idVendor=214b, idProduct=1101
[ 114.292897] usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 114.292904] usb 4-1: Product: USB2.0 Device
[ 114.292910] usb 4-1: Manufacturer: Generic
[ 114.292914] usb 4-1: SerialNumber: 0201202010201000
[ 114.383603] usb-storage 4-1:1.0: USB Mass Storage device detected
[ 114.383803] scsi6 : usb-storage 4-1:1.0
[ 114.383956] usbcore: registered new interface driver usb-storage
[ 115.386965] scsi 6:0:0:0: Direct-Access USB2.0 CARD-READER 1.01 PQ: 0 ANSI: 2
[ 115.388961] sd 6:0:0:0: Attached scsi generic sg2 type 0
[ 115.409892] sd 6:0:0:0: [sdc] Attached SCSI removable disk
[ 115.471798] sd 6:0:0:0: [sdc] 30679040 512-byte logical blocks: (15.7 GB/14.6 GiB)
[ 115.505782] sdc: detected capacity change from 0 to 15707668480
[ 115.534776] sdc: sdc1 sdc2 < sdc5 sdc6 > sdc3
このカードのパーティションテーブルは次のとおりです。
# parted /dev/sdc
GNU Parted 3.2
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: USB2.0 CARD-READER (scsi)
Disk /dev/sdc: 15,7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 1275MB 1274MB primary fat32 lba
2 1278MB 15,7GB 14,4GB extended
5 1279MB 1342MB 62,9MB logical fat16 lba
6 1343MB 15,7GB 14,3GB logical
3 15,7GB 15,7GB 33,6MB primary
このデバイスをfdiskでチェックすると、次のように表示されます。
# fdisk /dev/sdc -l
Disk /dev/sdc: 14.6 GiB, 15707668480 bytes, 30679040 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
Disklabel type: dos
Disk identifier: 0x000daf86
Device Boot Start End Sectors Size Id Type
/dev/sdc1 2048 2490234 2488187 1.2G e W95 FAT16 (LBA)
/dev/sdc2 2496512 30609407 28112896 13.4G 85 Linux extended
/dev/sdc3 30613504 30679039 65536 32M 83 Linux
/dev/sdc5 2498560 2621439 122880 60M c W95 FAT32 (LBA)
/dev/sdc6 2623488 30607359 27983872 13.4G 83 Linux
Partition table entries are not in disk order.
/ dev/sdc6が最大のパーティションのようですので、マウントしたいと思います。マウントしようとすると、次のような結果になります。
# mount -v /dev/sdc6 test
mount: wrong fs type, bad option, bad superblock on /dev/sdc6,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so.
/ dev/sdc6をマウントしようとすると、Dmesgが何も言わない。
fileコマンドでこのパーティションを確認すると、次のように表示されます。
# file -s /dev/sdc6
/dev/sdc6: data
Fsckでファイルシステムをチェックすると、次のようになります。
# LC_ALL=C fsck.ext3 -n /dev/sdc6
e2fsck 1.43.4 (31-Jan-2017)
ext2fs_open2: Bad magic number in super-block
fsck.ext3: Superblock invalid, trying backup blocks...
root was not cleanly unmounted, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong for group #0 (4245, counted=11608).
Fix? no
Free blocks count wrong for group #1 (1373, counted=707).
Fix? no
Free blocks count wrong for group #2 (1699, counted=1880).
Fix? no
(...)
Inode bitmap differences: -(57345--131072) -172034 -172037 -(172042--172043) -172045 -172047 -172049 -172053 -172057 -172059 -172062 -172065 (...)
Fix? no
root: ********** WARNING: Filesystem still has errors **********
root: 91692/876544 files (0.8% non-contiguous), 1413337/3497984 blocks
なんらかの理由でLinuxがこのファイルシステムをマウントできないことを理解しています。理由を知りたいのですが、ファイルシステムが壊れているのですか、それとも他の理由がありますか?そして、私はこのファイルシステムをマウントするか、何らかの方法でそのファイルを回復したいと思います。
この問題をトラブルシューティングするには、今何をすべきですか?
編集:私は助けてくれたみんなに感謝したいです!最後に-fsckを使用して-パーティションにLinux extファイルシステムが含まれていることがわかりましたが、ファイルシステムが壊れているため、マウントできませんでした。カードのバックアップを作成し(「cat/dev/sdc | gzip> mybackup」を使用)、デバイスに不良ブロックが含まれているかどうかを確認しました。不良ブロックが含まれていない(SDカードのファイルシステムが壊れたSDカードリーダーで使用したために壊れた可能性がある)ため、ファイルシステムをfsckで修正し、カードをRaspberry Piに挿入して、起動せずに起動しました問題。
投稿されたfsck
の出力によると、一部のデータが復元される可能性があります。
私がお勧めします:
dd
コピーをディスクファイルに作成します(例:fdsump.orig
)。失敗した場合は、ddrescue
を試してください。開始する前に、十分な空き容量があることを確認してください。cp fsdump.orig fsdump
)なので、いつでもこのステップに戻ってやり直すことができます。mount -o loop
fsdump
データファイルからデバイスを作成します(例:/dev/loop1
)fsck.ext3 /dev/loop1
エラーがなくなるまで。より多くのパスが必要になるほど、被害は大きくなります。/dev/loop1
ディレクトリに。すべてのファイルを安全な場所にコピーします。 (使用する cp -a
またはrsync
(ファイル属性を保持する)。それらのいずれかが破損したり、切り捨てられたりする可能性があります。詳細については、前述のユーティリティのマニュアルページを参照してください。
file(1) をfile -s /dev/sdc6
として使用すると、ブロックデバイスからいくつかのバイトが読み取られ、そこに何があるかが推測されます。
何も認識されない場合は、問題が発生しており、データが失われている可能性があります。それを回復するために何かをするために、あなたはアプリオリどのファイルシステムがそこにあったかを知っているべきです。
一部のファイルシステムが認識されている場合は、明示的な-t
type
を指定して mount(8) を使用してみてください。 )
パーティションテーブルのエントリがディスク順になっていない
これはあまりにおいがしません。おそらく、ディスク全体を再パーティション化する必要があります(ただし、前にデータをバックアップしてください)。 2つのパーティションが重複しているようです(sdc2
とsdc6
)
他のLinuxPCで実行しているので、おそらく dd(1) を使用して、SDカードからPCに(ファイルに)データをコピーできます。
dd if=/dev/sdc6 of=$HOME/diskdata bs=4k
ところで、そのコマンドの後にdmesg
でコピーがうまくいったことを確認してください。
SDカード全体をdd
でコピーすることもできます。
次に、Linux PCの$HOME/diskdata
ファイルの混乱を解読するために何時間(または数ヶ月)の作業を費やす可能性があります。元のファイルシステムがext3またはext4であると思われる場合は、 debugfs(8) を使用できます。
SDカードは壊れやすいデバイスであり、すぐに消耗します。私はあなたが物理的に壊れていると思います。いくつかの決定的なデータ損失に備えてください。