我已经在 3Tb 驱动器上运行 DDRescue 近 2 个月了,当系统崩溃并且我使用的日志文件损坏时,我已经恢复了大约 2.8Tb。我能够恢复该日志文件的一部分,但恢复的日志中的扇区存在间隙,导致 DDRescue 在再次启动时返回错误。以下是查看日志文件的 wetransfer 链接:https://we.tl/58aSOeCOJo
我尝试编辑日志文件以删除损坏的数据,但是由于这会在扇区的时间顺序中产生“间隙”,DDRescue 似乎不喜欢这样。
感谢您的帮助,我真的想避免再重新运行 DDRescue 两个月来保存这个驱动器......
答案1
为了使这个答案至少对有类似问题的其他用户有用,让我们在这里引用您的日志的关键部分:
# Rescue Logfile. Created by GNU ddrescue version 1.18.1 # Command line: ddrescue -f -d -R -r3 /dev/sde /dev/sdf /mnt/somedir/logfiles/log3.log # Start time: 2017-08-14 10:22:44 # Current time: 2017-08-14 12:13:09 # Copying non-tried blocks... Pass 1 (backwards) # current_pos current_status 0x27BF0520000 ? # pos size status 0x00000000 0x02870000 + 0x02870000 0x001A0000 * 0x02A10000 0x00010200 + 0x02A20200 0x0005FE00 * # ... many lines here 0x2BA92360000 0x00040000 ? 0x2BA923A0000 0x00010000 * # binary garbage here 0xE4E1710000 0x00010000 * # ... many lines here 0x13D75970000 0x00000200 + 0x13D75970200 0x00
您确定二进制垃圾之前的行是最后一个有效行。它显示,0x2BA923A0000 0x00010000 *
并且您的情况是行号 880829。这是有道理的,因为垃圾之后的行具有较低的位置(第一个数字),它们似乎重复了较早的行。
我做到了
<log3.txt head -n 880829 > log3new.txt
并运行ddrescue
(由于是infile
来自大型稀疏文件的循环设备,所以这应该无关紧要)。它抱怨第 583658 行。
这是该线及其邻域:
# ... 0x186C6940000 0x00000200 + 0x186C6940200 A9520200 0x0001FE00 * # <- this line here 0x24AA9540000 0x00000200 + # ...
0x186C6940200
要解决此问题,您应该覆盖从到 的整个范围0x24AA9540000
,以便日志文件是连续的。长度为0x24AA9540000
- 0x186C6940200
= 0xC3E2BFFE00
。整行 583658 应该是:
0x186C6940200 0xC3E2BFFE00 ?
其中?
表示未经尝试的块。
我修复了
sed -i '583658s/.*/0x186C6940200 0xC3E2BFFE00 ?/' log3new.txt
生成的日志文件有效期为ddrescue
。
编辑
但是我遇到的问题是,DDrescue 认为它只恢复了 2041GB,而当崩溃发生时,它超过了 2800GB,你可以想象,最后的 800GB 花了数周时间才恢复。
事实上,我们不知道这是否是相同的 800 GB。有一个工具ddrescueview
(带有 GUI,ddrescueview
在 Ubuntu 中作为软件包提供)可以向您显示我们引入的这些未经尝试的块的确切位置。请注意,当前位置在其他地方:
所以我想知道垃圾后面的信息是否与此有关?我们有什么办法可以将其包含在日志文件中吗?
我已经分离出这个“垃圾之后”的部分,即最后的 129289 行:
tail -n 129289 log3.txt > extra.txt
此命令将显示在extra.txt
但不在的行log3new.txt
:
diff --suppress-common-lines extra.txt log3new.txt | grep -e '^<'
输出为
< 0x13D75970200 0x00
这意味着只有垃圾之后的最后一行(不完整)在原始垃圾之前不存在log3.txt
。抱歉,在我看来这log3new.txt
已经是你能得到的最好的了。