Gddrescue はマップファイルを要求しますが、作成を拒否します

Gddrescue はマップファイルを要求しますが、作成を拒否します

私は使用していますgddrescue のドキュメントからの例 3 はこちらディスクをゼロ書き込みし、保留中の不良セクタを強制的に再割り当てします。

同じドキュメントの別の箇所には次のように記載されています。

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: マップファイル '/cygdrive/b/users/user/desktop/mapfile.txt' が存在しないか、

gddrescueCygwin 経由で Wi​​ndows 7 で使用しています。

これは の Cygwin 実装のバグでしょうかdd、それとも何か見落としているのでしょうか?

答え1

バグではありません。私のKubuntuでも同じです。--fill-mode使用したオプションが原因だと思います。このモードにはドキュメントの独自の章あなたが見逃しているのはこの部分です[強調は私による]:

ddrescueオプション付きで呼び出されると--fill-mode、「フィルモード」で動作します。違うデフォルトの「レスキューモード」から。つまり、この--fill-modeオプションを使用すると、何もレスキューされません。ステータス文字のブロックddrescueから読み取ったデータのみで埋められます。infileoutfileからmapfileオプションの引数として指定された型文字の 1 つと一致します--fill-mode

これは、--fill-mode既存の が必要であることを意味します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のみが埋められます。0x000002000x00117000
  • --fill-mode=?-*(シェルグロブには注意してください。可能性は低いですが、それでも)、、、ddrescueでマークされたフラグメントが埋められます?-*

関連情報