ddrescueが読み書きエラーを処理するために他のマッピングファイルを使用しないのはなぜですか? (そして書き込みエラーを検出する方法は?)

ddrescueが読み書きエラーを処理するために他のマッピングファイルを使用しないのはなぜですか? (そして書き込みエラーを検出する方法は?)

時々、ハードドライブを正常に見える別のドライブに複製する必要がありますが(SMART値は正常です)、表面に不良セクタがあるかどうかを完全に確認することはできません。

通常、通常のハードドライブを複製すると、以前に削除されていないため、完全に確認されていないターゲットドライブが使用されます。

間違っていたら教えてください。私はddrescueが読み取りエラーだけを報告すると思います。 これはまた、書き込みエラーのために一部のセクタをターゲットドライブにコピーできない場合でも、ddrescueがエラーなしで複製に成功したことを示します。同様に、マッピングファイルは、ターゲットドライブにエラーがあるかどうかを知らせません。

それで、ddrescueがなぜ2つのマッピングファイル(read.log)(write.log)の生成を許可しないのか疑問に思いました。

これは2番目の質問につながります。書き込みエラーを検出する方法はありますか?

注:複製後、両方の1TBドライブのチェックサムを計算するのに時間がかかるとします。より良い解決策はありますか?

答え1

ddrescue書き込みエラーは致命的であるため、書き込みエラーは記録されません。ブロックを書き込む必要があるたびに書き込まれると予想されるバイト数を追跡​​し、そのバイトが正常に書き込まれない場合はエラーメッセージで中断されます。これを実行すると見ることができます

$ ddrescue --force /dev/zero /dev/full
GNU ddrescue 1.23
Press Ctrl-C to interrupt
     ipos:        0 B, non-trimmed:        0 B,  current rate:       0 B/s
     opos:        0 B, non-scraped:        0 B,  average rate:       0 B/s
non-tried:    9223 PB,  bad-sector:        0 B,    error rate:       0 B/s
  rescued:        0 B,   bad areas:        0,        run time:          0s
pct rescued:    0.00%, read errors:        0,  remaining time:         n/a
                              time since last successful read:         n/a
Copying non-tried blocks... Pass 1 (forwards)
ddrescue: Write error: No space left on device

正常に完了すると、ddrescue最善を尽くして読み取ったすべてのデータが正しく記録されます。

答え2

プログラムbadblocksは読み取りエラー、書き込みエラー、破損エラーを報告します。ここ

ターゲットディスクが正常であることを確認するには、そのbadblocksディスクで破壊モードで実行してください。ただし、他の回答で述べたように、不良セクタは書き込み時に再マップされることに注意してください。

「書き込みエラーを報告するかどうか」のddrescue最も簡単な方法は、コードを調べるか、またはエラーが発生する可能性があるいくつかのターゲットを設定することです。しかし、私の仮定は、書き込みが標準のUnixルールに従い、他のツールと同様に例外エラーとして報告されるということです。

「なぜ」に関しては、あなたの推測は私のものと似ていますが、Unixの基本原則の1つは「簡単に保ち、問題を別のツールに分ける」ことです。

ddrescue破損したディスクからデータをインポートすることに焦点を当てます。結果を作成するときに信頼できるツールがあることを確認する他のツールがあります。

答え3

最新のディスクは、失敗したセクタをこの状況のた​​めに特別に設計されたスペアセクタの1つに再マッピングし、書き込みエラーを透過的かつ自動的に処理します。

SMART結果からステータスを確認できます。

smartctl -a /dev/sda

...
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0
197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0030   100   253   000    Old_age   Offline      -       0

この例では、行ID#5の最後の値は、セクタが再割り当てされていないことを示します。 #197の値は、読み取りエラーを報告しましたがまだ作成および再割り当てされていないセクターの数です。 #198の値は、読み書きエラーで再割り当てできないセクタの数です。通常、他の多くのセクタでエラーが発生し、スペアを使用できなくなるためです。

最後の場合にのみ、書き込みはオペレーティングシステムに失敗として報告されます。ddrescueあるいは、カーネルからアプリケーションにエラーが順次報告されると、他のツールが失敗する可能性があります。

関連情報