Tho*_*sen 4 linux ext2 data-recovery
我有一个来自崩溃的 Linux 笔记本电脑的磁盘,上面有一些文件,如果可能的话,不高兴的所有者希望将其取回(请不要备份解决方案)。我之前没有与它有任何关系。该磁盘可被 OS X 和 Ubuntu 11.10 识别:
root@ubuntu1110:~# fdisk -l /dev/sdc
Disk /dev/sdc: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 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: 0x80d549b4
Device Boot Start End Blocks Id System
/dev/sdc1 * 63 953602334 476801136 83 Linux
/dev/sdc2 953602335 976768064 11582865 5 Extended
/dev/sdc5 953602398 976768064 11582833+ 82 Linux swap / Solaris
Run Code Online (Sandbox Code Playgroud)
这看起来与带有交换分区的 Linux 发行版的库存安装一致。
不幸的是,在 Ubuntu 说它无法挂载 sdc1 分区之后,dmesg 中出现了一些相当讨厌的消息:
[ 181.228092] sd 6:0:0:0: [sdc] 976773168 512-byte logical blocks: (500 GB/465 GiB)
[ 181.232176] sd 6:0:0:0: [sdc] Write Protect is off
[ 181.232181] sd 6:0:0:0: [sdc] Mode Sense: 21 00 00 00
[ 181.236359] sd 6:0:0:0: [sdc] No Caching mode page present
[ 181.236364] sd 6:0:0:0: [sdc] Assuming drive cache: write through
[ 181.246696] sd 6:0:0:0: [sdc] No Caching mode page present
[ 181.246707] sd 6:0:0:0: [sdc] Assuming drive cache: write through
[ 182.835915] sdc: sdc1 sdc2 < sdc5 >
[ 182.854199] sd 6:0:0:0: [sdc] No Caching mode page present
[ 182.854204] sd 6:0:0:0: [sdc] Assuming drive cache: write through
[ 182.854208] sd 6:0:0:0: [sdc] Attached SCSI disk
[ 218.250174] sd 6:0:0:0: [sdc] Unhandled sense code
[ 218.250179] sd 6:0:0:0: [sdc] Result: hostbyte=DID_ERROR driverbyte=DRIVER_SENSE
[ 218.250182] sd 6:0:0:0: [sdc] Sense Key : Hardware Error [current]
[ 218.250187] Info fld=0x0
[ 218.250188] sd 6:0:0:0: [sdc] Add. Sense: No additional sense information
[ 218.250193] sd 6:0:0:0: [sdc] CDB: Read(10): 28 00 00 00 01 08 00 00 08 00
[ 218.250200] end_request: I/O error, dev sdc, sector 264
[ 218.250206] Buffer I/O error on device sdc, logical block 33
[ 255.398994] sd 6:0:0:0: [sdc] Unhandled sense code
[ 255.399029] sd 6:0:0:0: [sdc] Result: hostbyte=DID_ERROR driverbyte=DRIVER_SENSE
[ 255.399032] sd 6:0:0:0: [sdc] Sense Key : Hardware Error [current]
[ 255.399037] Info fld=0x0
[ 255.399038] sd 6:0:0:0: [sdc] Add. Sense: No additional sense information
[ 255.399053] sd 6:0:0:0: [sdc] CDB: Read(10): 28 00 00 00 01 08 00 00 08 00
[ 255.399061] end_request: I/O error, dev sdc, sector 264
[ 255.399066] Buffer I/O error on device sdc, logical block 33
[ 281.340599] sd 6:0:0:0: [sdc] Unhandled sense code
[ 281.340609] sd 6:0:0:0: [sdc] Result: hostbyte=DID_ERROR driverbyte=DRIVER_SENSE
[ 281.340618] sd 6:0:0:0: [sdc] Sense Key : Hardware Error [current]
[ 281.340653] Info fld=0x0
[ 281.340655] sd 6:0:0:0: [sdc] Add. Sense: No additional sense information
[ 281.340659] sd 6:0:0:0: [sdc] CDB: Read(10): 28 00 00 00 00 67 00 00 08 00
[ 281.340667] end_request: I/O error, dev sdc, sector 103
[ 281.340739] EXT3-fs (sdc1): error: can't read group descriptor 4
Run Code Online (Sandbox Code Playgroud)
我目前的理论是硬盘已经用完了备用块,所以现在已经引入了一个真正的坏块,它在安装分区时使用的区域中。dd 证实了这一点:
root@ubuntu1110:~# dd if=/dev/sdc1 of=/dev/null bs=10240 conv=noerror
dd: reading `/dev/sdc1': Input/output error
2+0 records in
2+0 records out
20480 bytes (20 kB) copied, 44.7084 s, 0.5 kB/s
dd: reading `/dev/sdc1': Input/output error
9+1 records in
9+1 records out
96256 bytes (96 kB) copied, 162.933 s, 0.6 kB/s
dd: reading `/dev/sdc1': Input/output error
9+1 records in
9+1 records out
96256 bytes (96 kB) copied, 180.083 s, 0.5 kB/s
Run Code Online (Sandbox Code Playgroud)
早期坏块和非常慢的传输速率甚至在过程后期(未显示)
我现在的问题是如何从这里接近。我需要一些可以从损坏的 ext2/ext3 文件系统中读取的东西,这样我们就可以将那些仍然存在的文件从磁盘上复制下来,而且在过去的 15 年里我没有做过很多 Linux 系统管理,所以我不知道搜索的正确术语.
我可能会在一夜之间复制一个磁盘映像,但是“这个块是坏的”信息丢失了。
在这种情况下,什么样的程序会有用?
磁盘恢复的第一条规则:停止使用磁盘。 如果存在硬件问题(例如头部碰撞),任何使用都有进一步损坏的风险;如果文件系统损坏,任何mount或fsck有可能使情况变得更糟。(即使在ro模式下!请注意,mount -t ext3 -o ro 将尝试播放日志并写入磁盘!)
使用dd_rescue或ddrescue将尽可能多的磁盘映像复制到另一个系统,将磁盘放好,并制作映像的副本。执行从其中一个副本恢复的所有尝试。
现在,我在这里给出了一些 ext 数据恢复的技巧。简而言之,
/lost+found并报告错误。