Gddrescue 要求提供 mapfile 但拒绝创建

Gddrescue 要求提供 mapfile 但拒绝创建

我在用着示例 3 来自 gddrescue 的文档对磁盘进行零写入并强制重新分配其上待处理的坏扇区。

同一文献在其他地方指出:

如果 mapfile 不存在,ddrescue 将创建它。

但是当我几乎逐字逐句地运行示例 3 时:

ddrescue -vvvv --fill-mode=- -f --synchronous /dev/zero /dev/sdc mapfile.txt

...我收到错误:

ddrescue:映射文件“mapfile.txt”不存在或不可读。

如果我运行:

ddrescue -vvvv --fill-mode=- -f --synchronous /dev/zero /dev/sdc -m /cygdrive/b/users/user/desktop/mapfile.txt

...我得到了相同错误的截断版本:

ddrescue:Mapfile'/cygdrive/b/users/user/desktop/mapfile.txt'不存在或不是

我在 Windows 7 上通过 Cygwin 使用gddrescue

这是 Cygwin 实现的一个错误dd,还是我遗漏了什么?

答案1

不是 bug。我的 Kubuntu 上也是一样。我认为这是因为--fill-mode你使用的选项。此模式有其文档的单独章节。你缺少的是这部分[重点是我的]:

ddrescue使用--fill-mode选项调用时,它将以“填充模式”运行,即不同的从默认的“救援模式”中恢复。也就是说,如果您使用该--fill-mode选项,ddrescue则不会救援任何东西。它只填充从其状态字符infile的块中读取的数据outfilemapfile与选项参数指定的类型字符之一一致--fill-mode

这意味着--fill-mode需要一个已经存在的mapfile


这里的状态字符和类型字符是什么?

短语“来自的地位特征mapfile”应按照以下方式理解这个片段

状态字符是下列之一:

字符 含义
'?' 未尝试的块
'*' 未修剪的失败块
'/' 未刮擦的失败块
'-' 失败块坏扇区
'+' 完成的块

以下是示例 mapfile:

# Mapfile. Created by GNU ddrescue version 1.23
# Command line: ddrescue -d -c18 /dev/fd0 fdimage mapfile
# Start time:   2015-07-21 09:37:44
# Current time: 2015-07-21 09:38:19
# Copying non-tried blocks... Pass 1 (forwards)
# current_pos  current_status  current_pass
0x00120000     ?               1
#      pos        size  status
0x00000000  0x00117000  +
0x00117000  0x00000200  -
0x00117200  0x00001000  /
0x00118200  0x00007E00  *
0x00120000  0x00048000  ?

现在“指定为--fill-mode选项参数的类型字符”是紧接着出现的字符--fill-mode=

因此,如果mapfile像上面的例子一样,你使用

  • --fill-mode=-,则ddrescue只会填充0x00000200从位置开始的块0x00117000
  • --fill-mode=?-*(警惕 shell 全局匹配,虽然不太可能,但仍然存在),然后ddrescue将填充标有?-或 的碎片*

相关内容