我启动了 ddrescue 来从我的 NAS 中恢复故障的 2TB WD 驱动器。虽然我指定了一个日志文件,但不幸的是,我从一个可启动的闪存驱动器以试用模式运行 ubuntu,并且没有将日志文件写入单独安装的驱动器,因此当电源断电约 11% 时,我发现我的日志文件丢失了。
在手册的第 14 章中,生成模式看起来可能有效,所以我运行了:
ddrescue --generate-mode infile outfile mapfile
我正在恢复的驱动器是一个全新的驱动器,所以我希望它能够工作,因为驱动器上没有旧数据。
我现在正在运行安装到 SSD 上的 Ubuntu,因此我使用生成的 mapfile 再次运行 ddrescue:
ddrescue -f -n -r1 /dev/sda /dev/sdb /tmp/ddrescue.log
这似乎在很大程度上起到了作用,因为恢复过程在 11.5% 左右重新启动,就在它停止的地方。但我担心的是,在崩溃之前,ddrescue 已经识别出一个读取错误,并显示大约 20MB 的未修剪块,但在使用新的 mapfile 启动该过程时,标记了 0 个读取错误和 0 个未修剪块。现在运行 8 小时后,它显示 2 个错误和 29696B 的未修剪块,但我假设这些是新的读取错误,因为 ddrescue 没有查看已标记为已救援的旧数据部分。
ddrescue 是否会在后续的传递中发现原始的读取错误,或者该错误是否已经永远消失,而找到并重新尝试这些块的唯一方法是使用新的 mapfile 从头开始一切?
我希望尽可能地恢复旧驱动器中的内容,如果不是全部的话,因此如果有必要,我愿意重新开始。
感谢您对此提供的任何帮助。
答案1
关于--generate-mode
:
在某些情况下,Ddrescue 可以从 生成近似的
mapfile
,infile
并生成 中的(部分)副本outfile
,这几乎与精确的 一样好mapfile
。它通过简单地假设未挽救包含全零的扇区来实现这一点。
(来源)
在第一次尝试中,目标磁盘中与源磁盘错误扇区相对应的扇区未被写入。同样,与跳过的扇区相对应的扇区也未被写入。假设目标磁盘从尚未写入的扇区返回全零,则后者将ddrescue --generate-mode
所有这些碎片归类为“未挽救”。
--generate-mode
无法判断扇区是否全为零,因为它对应于源磁盘的未尝试扇区、未修剪、未擦除或坏扇区;或已复制但恰好包含全零的健康扇区。它所知道的只是,如果扇区全为零,那么outfile
可能尚未读取,而或许它可以被读取。--generate-mode
在创建近似值时,只需将此类扇区归类为未尝试,因此实际使用的mapfile
未来将尝试(或重试)读取该扇区。ddrescue
mapfile
最终ddrescue
可能会不必要地重新读取某些扇区;这些扇区已读取但恰好包含全零,因此看起来--generate-mode
像未经尝试的扇区。这通常是一个小小的不便,如果有的话。
您不需要从头开始,除非您启动时目标磁盘上有非零扇区。这些扇区会让人误--generate-mode
以为它们是已挽救的数据,即使它们不是。您相信您的目标磁盘(作为全新的磁盘)只包含零。如果您的信念是正确的,那么您不需要从头开始。
如果您的信念是正确的,那么第一次尝试的错误区域将被归类为--generate-mode
“未获救”,并且您的最终(仍在运行)ddrescue
要么已尝试要么即将尝试再次读取它。