我有一个 500 GB 的磁盘映像,它是使用以下命令创建的:
# dd if=/dev/sda conv=sync,noerror bs=64K | gzip -c > backup.img.gz
在超过约 420 GB 的某个点,出现了以下错误(大约 15-20 个)。错误之间穿插了几个 GB 的数据(例如,第一个错误出现在 420 GB,下一个出现在 430 GB,下一个出现在 436 GB,依此类推)。
dd: error reading '/dev/sda': Input/output error
恢复此磁盘映像是否安全?
答案1
这取决于你所说的“安全”是什么意思。
将映像恢复到健康的驱动器不会损坏驱动器,因此从这个意义上讲是安全的。但是映像还是有些损坏,并且可能会导致文件系统和文件损坏,因此从另一个意义上讲并不安全。
我说的是“您可能会得到损坏的文件”,而不是“您会得到损坏的文件”,因为所有这些错误都可能出现在标记为空的块中。这是因为dd
它对文件系统和可用空间的概念一无所知,它会读取所有数据。如果在创建映像时有大量可用空间,您可能很幸运,所有文件和关键数据都在映像中。错误不在磁盘的开头,因此分区表将正常(除非它是 MBR,并且有带有逻辑分区的扩展分区,并且某些逻辑分区条目尚未被读取dd
;这是可能的,因为任何逻辑分区都是在它开始之前定义的,而不是在磁盘的开头,如主分区和扩展分区)。
另一方面,你可能没有那么幸运,你可能不仅会遇到一些损坏的文件,还会遇到损坏的文件系统,这可能表现为(例如)缺少应该包含许多文件的整个文件夹。比较这个问题;在访问文件和文件夹时,您也遇到类似的情况。请阅读我在那里的回答,尤其是第二次编辑,我解释了可能发生的情况。
其中一条评论建议
将其还原到其他媒体,然后手动复制您想要的文件。
要复制您不需要恢复的文件到其他媒体。您可以直接安装映像。使用kpartx
或mount -o offset=…
访问映像内的分区。例如,尝试以下顺序(某些步骤需要sudo
):
gzip -dc < backup.img.gz > backup.img
(一会儿fsck
也许其他一些工具会改变图像,所以最好保留原始档案以防万一,我希望你有足够的可用空间);kpartx -av backup.img
(读取输出,图像内部的分区现在可用/dev/mapper/loop?p?
);- 使用您所选择的
fsck
;/dev/mapper/loop?p?
/dev/mapper/loop?p?
您选择的坐骑;- 复制文件;
umount …
;kpartx -dv backup.img
清理。
如果您发现文件或文件夹丢失,您可以使用恢复软件,例如photorec
。这类好的软件应该可以对映像进行操作,而无需将其恢复到物理设备。