私は ここにあるgddrescueのドキュメントの例 を使用してゼロに書き込み、ディスク上の保留中の不良セクタを強制的に再割り当てします。
同じドキュメントには、他の場所で次のように記載されています。
Mapfileが存在しない場合、ddrescueがそれを作成します。
しかし、例3をほぼ逐語的に実行すると、次のようになります。
ddrescue -vvvv --fill-mode=- -f --synchronous /dev/zero /dev/sdc mapfile.txt
...エラーが発生します:
ddrescue:Mapfile'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'が存在しないか、存在しません
Cygwin経由でWindows7でgddrescue
を使用しています。
これはdd
のCygwin実装のバグですか、それとも何かが足りませんか?
バグではありません。私のKubuntuでも同じです。 --fill-mode
オプションを使用したためだと思います。このモードには ドキュメントの独自の章 があります。あなたが欠けているのはこの部分です[私の強調]:
ddrescue
が--fill-mode
オプションで呼び出されると、デフォルトの「レスキューモード」とは異なるである「フィルモード」で動作します。つまり、--fill-mode
オプションを使用した場合、ddrescue
は何もレスキューしません。infile
から読み取られたデータのみで埋められます。outfile
のブロックのステータス文字frommapfile
は、--fill-mode
オプションの引数として指定されたタイプ文字の1つと一致します。
これは、--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
は、?
、-
、または*
でマークされたフラグメントを埋めます。