从损坏的日志文件继续 ddrescue

从损坏的日志文件继续 ddrescue

几天前,我在我的 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)进行划分并转换为十六进制。

相关内容