从 ext3 文件系统中抢救存在物理错误的文件

从 ext3 文件系统中抢救存在物理错误的文件

我有一张来自崩溃的 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

这看起来与带有交换分区的 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

我目前的理论是硬盘已经没有多余的块了,所以现在引入了一个真正的坏块,它位于安装分区时使用的区域中。 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

早期出现坏块,甚至在过程后期传输速度也非常慢(未显示)

我现在的问题是如何从这里出发。我需要一些可以从损坏的 ext2/ext3 文件系统中读取的东西,这样我们就可以从磁盘上复制那些仍然存在的文件,而且我在过去 15 年里没有做过太多 Linux 系统管理,所以我不知道搜索的正确术语。

我可能可以在一夜之间复制磁盘映像,但随后“此块是坏的”信息就会丢失。

在这种情况下什么样的程序会有用?

答案1

磁盘恢复的第一条规则:停止使用该磁盘。 如果存在硬件问题(例如磁头碰撞),任何使用都有进一步损坏的风险;如果文件系统损坏,任何损坏mountfsck有可能使情况变得更糟。 (即使在ro模式下!请注意mount -t ext3 -o ro 将要尝试回放日志并写入磁盘!)

使用dd_救援或者解救要将尽可能多的磁盘映像复制到另一个系统,请收起磁盘,然后制作映像的副本。执行从其中一个副本进行恢复的所有尝试。

现在,我给出了一些关于扩展数据恢复的技巧这里。简而言之,

  • 您的分区布局似乎仍然有效。如果不是,你可以使用测试盘或者部分尝试恢复分区表。
  • e2fsck也许能够将文件系统恢复到可安装状态。它将放置悬挂的 inode/lost+found并报告错误。
  • ext4magic尝试从记录的元数据中恢复数据。是否可以从日志中恢复文件取决于运气和机会,但其中可能有东西。
  • 侦探套件可以解析和输出大多数文件系统结构。如果您对文件系统的内部布局有相当多的了解,并且有一个方便的十六进制编辑器(可以执行诸如“超级块已损坏并且备份超级块已过时,但我可以挑选足够的数据来自己重建它”之类的事情),IMO 这是绝对是恢复最多数据最有用的工具。
  • 摄影记录将尝试查找看起来像文件的字节序列。它只是猜测文件的开始/结束,不会知道任何有关文件系统结构的信息,例如目录和文件名,也不会找到碎片文件。

答案2

假设您已经了解了专业数据恢复服务的所有常见优点和缺点,您已经权衡了丢失数据的成本与自行修复的风险...用户认为数据不值 000 美元,但它值得你花几个小时的时间......

这就是我要做的。

如果我在 dd 上始终获得 0.5kB/s,则可能不值得您花时间尝试此操作。

可以对磁盘运行 Testdisk。它可能工作。如果成本/风险决定了没有其他选择,那么……这就是你的决定。它可能会起作用。

总的来说,严重的是,这些问题是一个政治雷区。用户要么不好意思要求同事重新发送文件,要么不想面对管理层并承认自己没有定期进行备份,现在需要花费数千美元进行数据恢复。他们希望您可以为他们修复它并让他们所有的问题消失......并且如果驱动器在此过程中自毁。他们会把你扔到公共汽车下以保全自己。

相关内容