私は使用しています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' が存在しないか、
gddrescue
Cygwin 経由で Windows 7 で使用しています。
これは の Cygwin 実装のバグでしょうかdd
、それとも何か見落としているのでしょうか?
答え1
バグではありません。私のKubuntuでも同じです。--fill-mode
使用したオプションが原因だと思います。このモードにはドキュメントの独自の章あなたが見逃しているのはこの部分です[強調は私による]:
ddrescue
オプション付きで呼び出されると--fill-mode
、「フィルモード」で動作します。違うデフォルトの「レスキューモード」から。つまり、この--fill-mode
オプションを使用すると、何もレスキューされません。ステータス文字のブロックddrescue
から読み取ったデータのみで埋められます。infile
outfile
から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
のみが埋められます。0x00000200
0x00117000
--fill-mode=?-*
(シェルグロブには注意してください。可能性は低いですが、それでも)、、、ddrescue
でマークされたフラグメントが埋められます?
。-
*