我有一张用于 Raspberry Pi 的 SD 卡。我想将这张 SD 卡安装到 Linux PC 上以从中获取文件,但我不能。
当我将 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 -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,然后它启动时没有问题。
答案1
根据发布的fsck
输出,部分数据有望恢复。
我会推荐:
- 将文件系统复制
dd
到磁盘文件(例如fdsump.orig
)。如果失败,请尝试ddrescue
。开始之前请确保有足够的可用空间。 - 不要直接处理此文件,而是创建一个新副本(例如
cp fsdump.orig fsdump
),以便您随时可以返回到此步骤并重新开始。 - 从数据文件
mount -o loop
创建设备fsdump
(例如/dev/loop1
) - 尝试
fsck.ext3 /dev/loop1
直到不会出现错误。需要的次数越多,损坏就越大。 - 将其挂载
/dev/loop1
到目录。将所有文件复制到安全位置。 (使用cp -a
或rsync
来保留文件属性)。其中任何一个都可能被损坏、截断等。 - 您现在可以卸载循环文件系统。
有关详细信息,请参阅上述实用程序的手册页。
答案2
你可能会使用文件(1)因为file -s /dev/sdc6
这会从块设备读取一些字节并猜测那里有什么。
如果无法识别任何内容,您就会遇到麻烦,并且可能会丢失数据;要采取任何措施来恢复它,你应该知道先验那里有什么文件系统。
如果可以识别某些文件系统,您可以尝试使用安装(8)具有明确的-t
type
分区表条目不按磁盘顺序排列
这味道不太好闻。也许您需要对整个磁盘进行重新分区(但之前备份其数据);看来您有两个重叠的分区 (sdc2
和sdc6
)
由于您正在其他一些 Linux PC 上运行,因此您可以将数据从 SD 卡复制到 PC(到某个文件中),也许可以使用日(1)
dd if=/dev/sdc6 of=$HOME/diskdata bs=4k
顺便说一句,请在该命令之后检查dmesg
复制是否顺利。
您甚至可以复制dd
整个 SD 卡。
然后,您可能会花费数小时(或数月)的时间来尝试破译$HOME/diskdata
Linux PC 上该文件中的混乱内容。你可以使用调试(8)为此,如果您认为原始文件系统是 ext3 或 ext4
SD 卡是脆弱的设备,很快就会磨损。我猜你的身体已经坏了。准备好面对一些明确的数据丢失。