我正在使用 ddrescue 来对驱动器进行映像处理,但速度减慢到启动时的 0.1% 左右,按照这个速度,我不确定它是否能完成,无论如何,我不确定我是否可以将这台机器占用这么长时间来执行此操作。希望有人能帮忙,或者推荐其他方法来对驱动器进行映像处理?
设置: - 运行 10.8 的 macbook pro - 从 macports 安装的 ddrescue - 源驱动器在冰箱中,使用 SATA 转 USB 适配器将电缆连接到笔记本电脑 - 目标驱动器在完全相同的SATA 转 USB 外壳中的 640Gig Maxtor 型号 - 使用的命令是: - 日志文件正在写入 /root/rescue.log(在 MacBook 上的任何文件系统上) - 命令的终端输出和我尝试恢复的尝试如下,您可以看到它曾是平均为 7000kbs,现在平均约为 5000 bps!
任何建议都非常感谢!Iain
Iains-MacBook-Pro:~ root# ddrescue -f -g -v -n /dev/disk1 /dev/disk2 /root/rescue.log
ddrescue: warning: Options -aCdDeEIMnOprRStTx are ignored in generate mode.
GNU ddrescue 1.16
About to generate an approximate logfile for /dev/disk1 and /dev/disk2
Starting positions: infile = 0 B, outfile = 0 B
Copy block size: 128 sectors
Sector size: 512 Bytes
Press Ctrl-C to interrupt
rescued: 2543 MB, generated: 2731 MB, current rate: 8847 kB/s
opos: 2731 MB, average rate: 9134 kB/s
Generating logfile...
ddrescue: Error opening logfile '/root/rescue.log' for writing: No such file or directory
Fix the problem and press ENTER to retry, or Q+ENTER to abort.
rescued: 474160 MB, generated: 499761 MB, current rate: 5461 B/s
rescued: 474160 MB, generated: 499761 MB, current rate: 3449 B/s
opos: 499761 MB, average rate: 7440 kB/s
Generating logfile...
Interrupted by user
Iains-MacBook-Pro:~ root#
Iains-MacBook-Pro:~ root# ddrescue -f -g -v -n /dev/disk1 /dev/disk2 /root/rescue.log
ddrescue: warning: Options -aCdDeEIMnOprRStTx are ignored in generate mode.
GNU ddrescue 1.16
About to generate an approximate logfile for /dev/disk1 and /dev/disk2
Starting positions: infile = 0 B, outfile = 0 B
Copy block size: 128 sectors
Sector size: 512 Bytes
Press Ctrl-C to interrupt
Initial status (read from logfile)
rescued: 474160 MB, generated: 499761 MB
Current status
rescued: 474164 MB, generated: 499765 MB, current rate: 5041 B/s
opos: 499765 MB, average rate: 8793 B/s
Generating logfile...
答案1
这是 ddrescue 的预期行为。它会减慢读取磁盘受损区域中较小块的速度。鉴于您的驱动器处于冻结状态,我假设它有问题,而您正在尝试挽救信息。在这种情况下,我会使用 Ddrescue 工具。
来自手动的
ddrescue 的算法如下(用户可以随时中断该过程,但请注意,坏的驱动器可能会长时间阻塞 ddrescue,直到内核放弃):
1) 可选地读取描述多部分或先前中断的救援状态的日志文件。如果未指定日志文件或日志文件为空或不存在,则将所有救援域标记为未尝试。
2) 读取输入文件中未尝试的部分,将失败的块标记为未修剪并跳过它们,直到尝试了所有救援域。只有未尝试的区域才会以大块的形式读取。修剪、拆分和重试是逐个扇区进行的。每个扇区最多尝试两次;第一次在此步骤中作为大块读取的一部分,第二次在下面的步骤之一中作为单个扇区读取。
3) 每次向后读取未修剪块的一个扇区,直到找到坏扇区。对于每个未修剪块,将找到的坏扇区标记为坏扇区,并将该块的其余部分标记为未分割。
4) 每次读取一个扇区,将未分割的块向前读取,将发现的坏扇区标记为坏扇区。在足够大的块中发现多个连续坏扇区后,将该块一分为二,然后继续读取另一半。这样可以递归分割最大的故障块,而不会产生太大的日志文件。
5)可选择尝试再次读取坏扇区,直到达到指定的重试次数。
6)可选择写入日志文件以供稍后使用。
答案2
根据 @ForeverWintr 回复中的手册信息,停止连接并尝试反向读取磁盘可能是一个好主意,如果您的磁盘快要坏了,这可能会让您快速获取更多信息。您也可以告诉 ddrescue 最初跳过较大的块,但最终,是的,DDRescue 可能需要很长时间(永远?)才能尝试恢复尽可能多的数据。您可能会到达这样一个地步,即您只需获取可以获得的数据并写入它无法读取的位。但通常,您将其保留的时间越长,它恢复的就越多。我有一个 320 千兆的驱动器,花了几天时间才提取几乎所有数据 - 由于磁盘快要坏了,这个过程非常缓慢 - 我怀疑它最后从磁盘上提取了大约 100k 以外的所有数据。