![不要恐慌](https://linux22.com/image/14101/%E4%B8%8D%E8%A6%81%E6%81%90%E6%85%8C.png)
我存储所有数据的两个硬盘都出现故障。我的系统不断拒绝加载磁盘和挂载分区。我将一个硬盘驱动器移至另一台计算机,在那里它被识别的麻烦较少,但分区有很多错误,并且我仍然在该驱动器的 dmesg 上收到 E/S 错误。
用于启动的分区有一个坏的超级块,但可以用另一个超级块读取它,它显示更多错误,所以我首先在外部硬盘驱动器上对该分区进行了主备份。由于这个原因,我对 ddrescue 进行了两次传递,根据日志,它退出时仅出现一个 512 字节的错误,我认为这是有希望的。
使用 lsblk 列出备份看起来更有希望:
其中损坏分区的 lsblk 显示:
$lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
...
sda
└─sda1
...
现在大师展示的地方:
sdc
├─sdc1 ext4 new 8cab6f75-1ea7-4451-9f48-2bbcce167184
现在我从这个主分区到同一驱动器的末尾进行了另一个备份,因此 lsblk 的实际输出将是:
lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
fd0
loop0 squashfs /snap/anbox-installer/25
loop2 squashfs /snap/core/9669
loop3 squashfs /snap/core/10911
sda
└─sda1
sdb
├─sdb1 ext4 Debian_copia ce2c8e8f-f3ef-4005-9cb1-0bb9d5870f43 /
└─sdb2 swap d60a8ad0-5528-4bbc-af5e-092b96282df4 [SWAP]
sdc
├─sdc1 ext4 new 8cab6f75-1ea7-4451-9f48-2bbcce167184
└─sdc2 ext4 new 8cab6f75-1ea7-4451-9f48-2bbcce167184
sr0
现在这里是遗漏的地方,我将 fsck 的选项 p 误认为是选项 f,所以我已经完成了
fsck -fy /dev/sdc2
这搞砸了一些事情并删除了一些节点,安装后列出了应该的文件的一半,幸好这是损坏的硬盘驱动器的副本,所以这次我会更加谨慎。
您能告诉我一些好的做法吗?我的所有数据现在都在赌博,所以请准确。
lsblk 会对分区进行任何更改吗?我可以挂载一个分区而不对其进行任何更改吗?顺便说一句,我有这个链接:https://www.sans.org/blog/how-to-mount-dirty-ext4-file-systems/
如何安全地进行 fsck,以便我可以在这里赢得一些时间? fsck -n 是否仍然对分区进行更改?分区副本在磁盘中的哪个位置有什么区别吗?
有什么方法可以在不处理文件系统的情况下恢复文件吗?我读过有关 photorec 的内容,但我有很多它无法识别的大胆文件。难道就没有更通用的吗?
答案1
如果你的磁盘是身体上的如果失败,那么对其进行任何更多的写入操作(例如使用 fsck)只会让事情变得更糟。为了增加从该磁盘恢复数据的机会,您应该立即停止使用该磁盘。现在卸载它。订购一张新磁盘,当新磁盘到达时,启动一个普通的 Linux 发行版到命令提示符,然后将ddrescue
旧磁盘安装到新磁盘上,如下所述这里。请记住:不要从旧磁盘挂载任何文件系统,以免造成进一步的损坏。
答案2
不要恐慌
看来您正在尝试对带有脏 ext4 文件系统的硬盘驱动器进行故障处理。
你有备份吗?如果有备份,请从备份中恢复。如果您没有备份,则此处必须非常小心。首先要做的就是将手从键盘上移开并制定游戏计划。确保启动info
或man
启动您要运行的每个命令,尤其是直接接触硬盘的工具。
限制对损坏媒体的访问
如果硬盘出现故障,您应该停止任何直接从磁盘访问文件的尝试。您应该停止任何逃跑的尝试fsck
。您对硬盘进行的活动越多,对可能出现故障的硬盘造成的磨损就越大。如果您要从这些磁盘之一启动操作系统,也请停止此活动。从实时媒体启动,例如GRML Linux。
相反,您应该尝试对发生故障的硬盘进行映像。这涉及将硬盘逐位复制到另一个存储设备上的文件中。理想情况下,其他存储设备应该相当大,以便您可以存储图像的多个副本。一旦您的恢复工具完成恢复尽可能多的数据,将此图像标记为只读。这将成为主副本。你不要碰这个图像。相反,请复制一份主副本并运行fsck
并mount
在此工作副本。如果你犯了一个错误,也没什么大不了的——你只需创建一个新的工作副本来自主副本。
创建主副本
另请参阅unix SE 答案那个普尔科链接的。
GNU地址救援非常适合恢复数据硬盘。运行如下:
ddrescue --idirect /dev/sdX /mnt/big-storage-filesystem/sdX.img /mnt/big-storage-filesystem/sdX.mapfile
(这为--idirect
ddrescue 提供了对磁盘访问的更多控制。)
一旦 ddrescue 完成,我建议运行chmod a-w sdX.img sdX.mapfile
.这些不应在事后修改。
尝试从工作副本中恢复
首先制作你的工作副本
cp /mnt/big-storage-filesystem/sdX.img /mnt/big-storage-filesystem/work/work-sdX.img
然后使用losetup将图像映射到块设备文件:
losetup -a /mnt/big-storage-filesystem/work/work-sdX.img
您可能需要运行上述命令的输出指示的环回设备在kpartx -a /dev/loopN
哪里。/dev/loopN
现在您可以像访问另一个硬盘一样访问该映像。
检查一下lsblk
,你应该能够做fsck -y /dev/loop0p1
之类的。
如果你幸运的话,你可以mount /dev/loop0p1 /mnt/recovery
从那里开始。
如果您没有那么幸运,您可能需要使用取证工具从损坏的文件系统中获取数据。看这unix SE 帖子为例。
吸取这次经验
进行备份并验证您的备份。想象一下,如果您不是在 unix SE 上问这个问题,并且不遗余力地尝试恢复不可替代的数据,您会做什么。技术总是在变化,而且技术不会过时,因此预测数据丢失是个好主意。
答案3
现在已经解决了,如果您遇到像我这样的问题,请在另一个磁盘上制作分区的映像文件副本,然后使用 cp 复制该映像至少一次,将它们全部标记为只读并将它们安装为循环。我所有的文件都回来了!!!除了一堆我非常关心的原木。
祝大家好运,记得备份你的文件!即使是 DVD 救援船也比没有好!尝试多次复制您的重要文件,如果可能的话将它们上传到互联网!你一定会非常关心那些糟糕的 Firefox 下载。