修复有坏扇区的硬盘:dd vs gddrescue

修复有坏扇区的硬盘:dd vs gddrescue

在某处互联网我读过救援优于 至少就能够区分对问题扇区执行的磁盘读取量而言。事实确实如此吗?

时间 dd if=/dev/sda skip=900343967 of=a.bin count=4 iflag=direct conv=noerror,sync

dd:读取“/dev/sda”:输入/输出错误
2+0 条记录输入
2+0 条记录输出
1024 字节(1.0 kB)已复制,18.6057 秒,0.1 kB/s
3+1 条记录输入
4+0 条记录输出
2048 字节(2.0 kB)已复制,18.6707 秒,0.1 kB/s

实际 0m18.672s
用户 0m0.000s
系统 0m0.004s

顺便说一句,直接的标记确实有帮助,没有它,我只能读取 4 个扇区中的 1 个(有它的话可以读取 3/4 个)。但是,这明显降低了传输速度 - 对我来说至少慢了 5 倍:5MB/s vs 25MB/s没有这面旗帜。无论如何,现在救援(ddrescue)部分..

时间 ddrescue -b512 -c1 -s4b -dnvD -i900343967b -o0b /dev/sda b.bin

即将从 /dev/sda 复制 2048 字节到 b.bin
起始位置:infile = 460976 MB, outfile = 0 B
复制块大小:1 个硬块
硬块大小:512 字节
Max_retries:0
直接:是 稀疏:否 拆分:否 截断:否

按 Ctrl-C 中断
已救援:1536 B,错误大小:512 B,当前速率:53 B/s
ipos:460976 MB,错误:1,平均速率:53 B/s
opos:1536 B,自上次成功读取以来的时间:0 秒
已完成

实际 0m18.736s
用户 0m0.004s
系统 0m0.000s

如上所示,执行时间完全相同。正如预期的那样 - 相同的统计数据:3/4。然而,虽然我可以用0x00为了(conv=同步),救援似乎缺少此功能?相反,它只是跳过有问题的扇区而不在其位置写入任何内容,并继续处理下一个扇区(如果我已经在输出文件中将数据写入该扇区 - 它不会被覆盖:有时这可能不是理想的)。我不确定-t(截断)选项适用于具有救援(我猜,它会用 0x00 完全覆盖它),但在常规文件上,正如预测的那样,它会截断整个文件,而不是仅在偏移量维度内执行(即 -o1)。所以,这有点类似于 同步,但远非相同,因为如果您准备覆盖整个输出设备/文件,它只会模仿相同的功能。

尽管如此,由于有详细选项和记录坏扇区/块的能力 -救援似乎是更好的选择。值得注意的是,这两个应用程序都是使用(几乎)相同的参数启动的。

输出

差异?.bin

为空(出口 0),表示文件完全相同。

这是第一部分不要理解:

即使是无错误的内容,它也很慢,因为它只进行微小的读写。它花费大量时间来检查驱动器的错误部分,而不是尽可能多地读取无错误的内容,然后再回去处理困难的内容。

那到底是怎么回事?特别是那部分“它花费大量时间来检查驱动器的错误部分,而不是尽可能多地读取无错误的内容,然后再回去处理困难的事情“?它花费的时间与上面显示的相同(尽管我只检查了非常小一部分数据,但这有关系吗?)。

救援提供-r开关,它应该控制“坏扇区”上的重新读取次数,但是,似乎正在运行-r0一直如此(因为花费的时间相同)。那么,这个选项是否仅用于“后处理”?我的意思是,最初两者都救援似乎正在运行-r0似乎不是咀嚼通过错误的部分救援(他们似乎都坏块上大约 15-18 秒,所以这是怎么回事,救援快点???)

此外,-D选项(使用同步写入输出文件)?我没有注意到从进行的一些测试中有什么不同。

有人能对整个事情发表评论吗?谢谢。

答案1

我不确定引用的作者是如何得出他的结论的。我不想争论他是否正确,我只是没有这方面的经验。

另一方面,关于这个声明……

gddrescue 至少在能够区分对问题扇区执行的磁盘读取量方面优于 dd。

使用 gddrescue 的真正“至少”原因是,因为 gddrescue 不会在重复的读/写尝试时截断输出。对于某些会停止 dd 的读取错误,gddrescue 也是完全自动化的。

因此引用的作者可能是正确的,也可能不正确......但整个陈述都忽略了 gddrescue 的重点。

更新:dd 和 gddrescue 之间的详细区别。

dd conv=noerror,在发生错误后将继续运行,但它只会跳过坏块。即使添加同步选项也只会输入零而不是跳过。如果您使用 dd 使用相同的输出进行另一次读取,您将覆盖/丢失之前恢复的所有内容。

gddrescue 还会在发生错误后继续运行。它可以从坏块中恢复部分收益,并将返回并逐个扇区尝试该块。gddrescue 将保留详细的错误日志,其中包含好块、坏块以及任何坏块的逐个扇区。如果您尝试再次执行读取,gddrescue 将切断(截断)并添加任何额外恢复的数据。

请记住,即使使用这两种工具,如果整个块 100% 不可读,您仍然无法从中获得任何数据。如果块中的某些扇区仍然可读,gddrescue 可能会获得更多数据。

答案2

取决于您的硬盘制造时间、制造商以及它运行的固件版本,对于现代硬盘,当检测到坏扇区时,固件会将其从使用中删除,驱动器知道要跳过坏扇区。因此,在这方面,“拯救”硬盘免受坏扇区困扰的概念可能毫无意义。现在坏扇区是否曾经有有效数据的问题似乎就是您要寻找的案例解决方案 - 不是双关语!

grc.com 上有一款名为 spinrite 6 的软件,声称能够修复有坏扇区的硬盘。它是付费软件,我从未尝试过。它值得一读,尤其是如果有人试图“复活”硬盘,并且它确实像描述的那样工作。grc.com 上关于 spinrite 6 的常见问题解答表明有 30 天退款保证(并且没有试用版或免费版)。注意:我与 grc.com 没有任何关联,也不会推荐您使用它。我只是知道它存在并且可能像广告中说的那样工作,只是不要轻信我的话 - 买者自负。

至于评估 gddrescue 是否“优于”dd,至少在能够区分对问题扇区执行的磁盘读取量方面,对坏扇区执行的任何次数的读取(因为它在固件列表中的坏扇区列表中被标记为非功能性扇区)在我看来对于 gddrescue 或 dd 的定性使用都没有用。

您可能会发现阅读以下网页 dd (Unix) 很有用:https://secure.wikimedia.org/wikipedia/en/wiki/Gddrescue#Recovery-iented_variants_of_dd

您可能还会发现查看以下内容很有用:如何使用 UBCD、dd-rescue 和 P2 eXplorer 创建崩溃硬盘的映像:http://www.myfixlog.com/fix.php?fid=21

相关内容