時々、ハードドライブを正常に見える別のドライブに複製する必要がありますが(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
あるいは、カーネルからアプリケーションにエラーが順次報告されると、他のツールが失敗する可能性があります。