答案1
几乎没有任何方法可以正确解决这个问题。文件系统讨厌丢失哪怕是很小的一部分,更不用说用 dd 覆盖数百兆字节了。
在这种情况下,我喜欢做的是确定有多少数据已被准确覆盖 - 从 dd 输出或通过将 iso 映像文件与磁盘数据进行比较(例如cmp datasource /dev/target
)。然后将已验证丢失的段清零。
示例:(使用风险自负 - 在完整磁盘副本上运行所有实验或写时复制覆盖)
# cmp isofile.img /dev/diska
cmp: EOF on isofile.img after byte 68157440, in line 266228
# dd bs=1 count=68157440 if=/dev/zero of=/dev/diska
# cmp isofile.img /dev/diskb
isofile.img /dev/diskb differ: byte 34603009, line 135095
# head -c $((34603009-1)) /dev/zero > /dev/diskb
将损坏区域清零不会恢复任何数据。但这将有助于阻止恢复软件对块大小和分区偏移量做出错误的假设,并避免浪费时间恢复您不感兴趣的数据。最好根本没有数据,而不是看起来有效的完全虚假数据,因为它来自有效的图像文件。
以后一定要做好备份。
答案2
我身上也发生过一次。我使用“TestDisk”恢复了大部分文件(当我认识到错误时,dd 被停止)有详细的描述这里关于如何恢复丢失的文件