断电后 Ext3 驱动器无法安装;如何恢复文件?

断电后 Ext3 驱动器无法安装;如何恢复文件?

最近一次电源故障导致我的 Linux 机器(Ubuntu 8.10)从正常运行状态快速断电两次,之后我的一个驱动器无法安装。

更新:驱动器有时会安装,但显示为完全空(甚至没有 Lost+Found)并显示 14.9 GB 可用空间(它是一个 500GB 的驱动器)当我尝试执行任何操作时,它会给我一个权限错误并且驱动器卸载。(或者,也许一开始就没有真正安装?)

这是我尝试挂载时出现的错误消息:

~$ sudo mount -a
挂载:错误的 fs 类型、错误的选项、/dev/sdd1 上的错误超级块,
       缺少代码页或辅助程序,或者其他错误
       在某些情况下,在系统日志中可以找到有用的信息 - 尝试
       dmesg | tail 左右

那么也许指定 fs 类型?

~$ sudo mount -t ext3 /dev/sdd1 /media/disk-7
挂载:错误的 fs 类型、错误的选项、/dev/sdd1 上的错误超级块,
       缺少代码页或辅助程序,或者其他错误
       在某些情况下,在系统日志中可以找到有用的信息 - 尝试
       dmesg | tail 左右

不,一样。所以出了什么问题?

~$ sudo fsck /dev/sdd1
fsck 1.41.3(2008 年 10 月 12 日)
e2fsck 1.41.3(2008 年 10 月 12 日)
/dev/sdd1:恢复日志
fsck.ext3:尝试重新打开 /dev/sdd1 时没有此文件或目录
警告... 设备 /dev/sdd1 的 fsck.ext3 以信号 11 退出。

在 Google 上搜索信号 11 的结果并不乐观,但我找到了其他几种尝试修复磁盘的方法:

~$ sudo e2fsck /dev/sdd1
e2fsck 1.41.3(2008 年 10 月 12 日)
/dev/sdd1:恢复日志
e2fsck:尝试打开 /dev/sdd1 时没有此文件或目录

无法读取超级块或超级块未描述正确的 ext2
文件系统。如果设备有效并且确实包含 ext2
文件系统(而不是交换或 ufs 或其他文件系统),然后是超级块
已损坏,您可以尝试使用备用超级块运行 e2fsck:
    e2fsck -b 8193 [设备]

仍然希望这次故障与断电有关,我假设超级块已损坏或出现其他问题,然后尝试另一个:(我首先使用 makefs -n 确定我的块大小为 32k)

~$ sudo e2fsck -b 32768 /dev/sdd1
e2fsck 1.41.3(2008 年 10 月 12 日)
ext3 恢复标志已清除,但日志中有数据。
备份超级块中未设置恢复标志,因此无论如何都要运行日志。
/dev/sdd1:恢复日志
e2fsck:恢复时日志必须至少有 1024 个块
/dev/sdd1 的 ext3 日志

根据下面的 Avery Payne 的说法,我尝试了以下操作:

sudo mount -t ext2 -o ro /dev/sdd1 /media/disk-7

但收到此错误信息:

挂载:错误的 fs 类型、错误的选项、/dev/sdd1 上的错误超级块,
       缺少代码页或辅助程序,或者其他错误
       在某些情况下,在系统日志中可以找到有用的信息 - 尝试
       dmesg | tail 左右
~$ dmesg |尾巴
[261157.639721] EXT2-fs:sdd1:由于不支持可选功能(4),无法挂载。

这就是我被困住的地方。我尝试了列出的每个备份超级块,但结果都一样。如果有帮助的话,“恢复日志”步骤需要很长时间才能继续,然后告诉我它不起作用。

老实说,我不太关心恢复驱动器崩溃前几分钟的状态,只想恢复驱动器上超过 400 GB 的其他数据。如果有人知道我可以尝试的其他东西,ext3 数据恢复实用程序或技术等,我将不胜感激!

答案1

您遇到的问题听起来比我预期的要严重得多,因为设备断电(即使在相当繁重的写入活动期间)会导致断电。我不得不怀疑您在接口/驱动程序级别是否真的遇到了更多问题,或者分区表损坏或诸如此类的问题。

从事情的情况来看,你在尝试修复该问题时所做的所有努力可能使问题进一步恶化。

我不知道我们是否能帮助解决这个案子,但不要放弃。

对于未来我建议你学习以下技术:

当您在 Linux 或 UNIX 下遇到驱动器问题时,通常可以使用dd将整个设备的位图副本复制到其他位置。找到至少与有问题的驱动器一样大的驱动器,然后尝试以下命令: dd if=$PROBLEMATIC of=$TARGET bs=4M... 请非常小心 if(输入文件)和 of(输出文件)指令。让它运行。最好运行tail -f /var/log/messages &(或可能的变体,以适合您的 /etc/syslog.conf)... 在后台或另一个窗口中执行此操作。有增强版本dd可以更稳健地处理重试和继续越过坏块(sdd我想到的一个名字)。但dd首先尝试只使用普通的 GNU 命令。

您可以复制整个设备(例如 /dev/sdd)或仅复制分区(/dev/sdd1)。如果您收到“短读”或类似错误,则表明设备存在物理错误,导致无法读取某些磁柱,或者对于分区,分区表在某种程度上受到损坏。您甚至可以制作两个不同的dd映像...每个映像一个。

诀窍在于:尽一切fsck努力mount,并在复制的图像上使用各种其他恢复工具,例如 TCT(验尸官工具包)!

这样可以最大限度地减少运行驱动器所花费的时间(操作驱动器时可能会降低硬件级别的性能),并最大限度地减少失败和可能误导的恢复尝试的影响。(在某些情况下,您可以制作一个映像,然后基于该映像制作另一个映像,并且始终对第三个映像进行操作...取决于数据的价值)。

我个人建议你运行类似hexdumpstrings阅读图像的程序...只需让它滚动一段时间,然后查找看起来像是你数据片段的纯文本。我曾经grep从完全损坏的文件系统中恢复有用的(文本)数据。如果我不建议将其作为数据恢复英雄...而是作为健全性检查。如果你滚动浏览 10 兆字节或几千兆字节的数据,却看不到任何可识别的文本...那么你可能已经无可救药了,或者你做错了什么(你是真的小心那些 if= 和 of= 选项吗?)。

我不知道这些技巧是否能帮助您完成当前的工作。但是现在学习这些技巧,它们肯定会让您下一次尝试数据恢复时不那么害怕。(是的,在健康的系统上练习一两次 --- 使用十六进制编辑器,尝试在这里和那里添加您自己的创造性损坏 --- 当然是到副本中!然后尝试修复它)。

哦,这是一个审查您的备份和数据恢复计划和程序(或为您的客户/同事/客户/朋友/任何人提供更好的建议)的好时机。

答案2

我没什么可以提供的,只是希望你能从我的错误中吸取教训。停!复制磁盘。dd 可以帮助你做到这一点,并且有很多驱动器映像应用程序可以为你提供良好的用户界面。我犯了一个错误,没有先复制磁盘就深入研究了 fsck,寻找备份超级块等。我失去了一切。看起来你已经选择不备份了,但在你用善意的恢复尝试进一步破坏它之前,获取驱动器的副本还为时不晚。

我确实偶然发现了本文在类似情况下恢复。看起来您可以告诉 mount 使用不同的超级块。结合 -t ext3,它可能会提供一些小小的希望。

答案3

回溯 是一个 Linux 发行版,附带大量用于此类用途的工具。不过,它的目标客户也是高级用户的高层。他们的网站可能有一些关于如何使用其工具的优秀教程,因此可能对您有用。

答案4

您确定 /dev/sdd1 确实是您要查找的驱动器,而不是其他驱动器吗?设备命名取决于驱动器插入的顺序,并且可能有所不同,例如,当您稍后插入 USB 驱动器时与在启动时插入时不同。使用/dev/disk/by-id/以确保您触摸到正确的磁盘。

下一步是确定是整个磁盘还是只是分区损坏了,然后启动:

cfdisk /dev/sdd

或者使用您选择的其他分区工具来查看分区是否仍在正确的位置,是否符合您的预期。如果分区表已损坏,您可以尝试gpart恢复它们,或者如果您记得它们的布局,则可以从头开始重新创建它们。

输出的内容可疑吗dmesg?在硬盘坏掉时,大多数时候你会收到大量的错误消息。

正如其他人提到的,在尝试修改分区表或内容之前,请先复制数据。

相关内容