几天前,我在我的 180GB 分区中运行了 ddrescue,但 3 天后(上次检查时已救援 99.91% 并处于第 3 阶段)系统冻结了,因此我按住关闭按钮关闭了计算机。
当我打开时,我备份了图像文件和日志文件,但是日志文件没有完全复制,它说复制时出现错误,但是从日志文件中复制了 106 kb 中的 104 kb(奇怪的事情)。
当我再次运行 ddrescue 命令时,出现一条消息“mapfile discoC.Logfile 中的错误,第 4092 行”。
命令:
sudo ddrescue -d -r0 /dev/sdb3 discoC.img discoC.Logfile
这是我的PasteBin 上的日志文件不完整,第 4092 行是最后一行。这是日志文件的一部分:
# Mapfile. Created by GNU ddrescue version 1.23
# Command line: ddrescue -d -r0 /dev/sdb3 discoC.img discoC.Logfile
# Start time: 2021-12-15 01:56:33
# Current time: 2021-12-18 20:11:51
# Scraping failed blocks... (forwards)
# current_pos current_status current_pass
0xC5A65E00 / 1
# pos size status
0x00000000 0x00003400 -
0x00003400 0x00000200 +
0x00003600 0x00000800 -
0x00003E00 0x00000800 +
0x00004600 0x00000200 -
0x00004800 0x00000200 +
0x00004A00 0x00000400 -
....... (Lot of - and +)........
0xC564C600 0x00000400 +
0xC564CA00 0x00000600 -
0xC564D000 0x00000200 +
0xC564D200 0x00000200 -
0xC564D400 0x00000800 +
0xC564DC00 0x00000400 -
0xC564E000 0x00000600 +
0xC564E600 0x00000200 -
0xC564E800 0x00001A00 +
0xC5650200 0x00000200 -
0xC5650400 0x00000E00 +
0xC5651200 0x00000200 -
0xC
您能帮助我以便这个过程能继续下去吗?
答案1
根据https://www.electric-spoon.com/doc/gddrescue/html/Mapfile-structure.html使用文本编辑器可以很容易地解释和编辑 mapfile(日志文件)。
我倾向于复制它并删除第 4091 行和第 4092 行,我希望这将允许 ddrescue 从它记录的最后一点开始。
它确实似乎失败了很多次。我确实想知道从末尾向后运行它(即添加 -R 开关)是否能让您更快地捕获大量数据。(尝试这样做没有坏处)。
答案2
抱歉这么晚才看到这个问题。
恢复缺失的第 4092 行的有效内容很容易:
0xC5651400 <remaining-size> ?
在哪里:
0xC5651400
是新块的开始,通过将第 4091 行上的前一个块的起始位置0xC5651200
与该块的大小相加得到0x00000200
。?
这意味着从哪里开始的块0xC5651400
还没有尝试过,因此必须尝试克隆它们。<remaining size>
: 见下文。
如何计算的值<remaining size>
:
- 如果您的日志文件中有第 4093 行:第 4093 行的起始偏移量与第 4092 行计算出的起始偏移量之间的差值(即
0xC5651400
),以十六进制表示 - 或者,如果没有第 4093 行:则您的
dev/sdb3
分区大小与第 4092 行的起始偏移量之间的差异(即0xC5651400
)。
分区的大小dev/sdb3
可以通过终端命令来了解,例如fdisk -l
或通过启动克隆过程到不同的映像文件,并且没有日志文件,则启动不同的日志文件。ddrescue 应该显示一条消息,例如“即将复制 N 个字节”。您可能需要按扇区大小(例如 512)进行划分并转换为十六进制。