我正在尝试将数据从旧的 320G 硬盘(充满坏扇区)恢复到新硬盘。我发现ddrescue是完成这项任务的好工具,因为它具有智能算法。我已经使用以下命令完成了一次:
ddrescue -f -n /dev/sda /dev/sdb log
Run Code Online (Sandbox Code Playgroud)
它在几个小时内完成,errsize 为 16G(未恢复),其中仍可能包含重要数据,所以我运行了下一次:
ddrescue -f -d /dev/sda /dev/sdb log
Run Code Online (Sandbox Code Playgroud)
但它运行速度太慢(平均 300B/s),因为 linux 卡在每个坏扇区上。
它实际上是 linux 内核(可能是 libata),而不是硬盘本身,因为我试图在干净的 DOS 上运行的DMDE工具中恢复,但没有这样的问题:可以在那里调整 ATA 超时,并且整体恢复过程运行得更快。
但不是在 Linux 中。
我还尝试了这些内核参数:libata.ignore_hpa=1 libata.noacpi libata.force=noncq,norst并libata.dma=0在引导程序中传递到 cmdline,但它没有任何效果(我使用 System Rescue CD,其中 LIBATA 在内核中编译)。
还尝试更改设备超时:
echo 1 > /sys/block/sda/device/timeout
Run Code Online (Sandbox Code Playgroud)
(默认为 30)
但它只会在 syslog 中产生更多的错误泛滥而无济于事。
每个扇区传递坏块仍然需要 1-3 分钟,这非常慢。解析 16GB 的“坏”块需要多少时间?一周?月?
我仍然更喜欢使用ddrescue进行恢复(由于其高效的算法和日志文件功能),并且想知道如何调整内核驱动程序以加速 ata/磁盘错误处理。谷歌和 SU 上的相关问题没有帮助。有任何想法吗?
PS对不起我的英语
@ta.speot.is
为什么不从常规备份中恢复?
我朋友的这个硬盘,不是我的。太伤心了,他没有备份。现在,在磁盘崩溃后,他开始考虑进行备份,是的:)
UPD:2.5 年后我仍然不知道答案,但刚刚意识到 …