質問: 不良セクターのあるディスクからのより高速な回復 最近、異常なhddからファイルにddを試しました。 dd if=/dev/sdb of=somefile bs=4096 conv=noerror,sync。私の問題は、ddが不良ブロックに遭遇したときに多くの時間を浪費することでした。私のユースケースでは、より高速な結果を得るために、データの損失を喜んで支払います。エラー処理を速くする方法はありますか?多分カーネルtweak(ブロックを読み取るためのより少ない労力をhddに伝える)?または別のプログラム?
回答: あなたのハードドライブのサイズとそれが持っている多くの不良ブロックに依存します。 dd a 1 tera health hdを使用してバックアップするには、通常20分かかります。不良ブロックで今朝回復したばかりで、2倍の時間がかかった。約30個の不良ブロックがある複製(ディスクのバックアップ)で問題が発生していました。私が最初に行ったことは、通常のfilezillaを使用してファイルをバックアップし、すべての適切なデータをバックアップすることです。 1つの大きなファイルが正しくコピーされていないことに気付きました(途中で停止して転送を再開します)。幸い、同じファイルの以前のバックアップがあります。ディスクを複製するには、次の手順を使用してディスク上の不良ブロックを見つける必要がありました。まず、fdisk -lを使用して、hd情報を特定する問題のあるディスクを見つけます。2つ目は、ディスクが/ dev/sdbだとすると、コマンドbadblocks -v/devを実行する必要があります/ sdbドライブ上のすべての不良ブロックを一覧表示します。幸いにもいくつかあります。不良ブロックが見つからない場合は、ドライブブロックに問題はなく、他の問題を解決する必要があります。私のブロックサイズは512なので、ddを実行するためにそのデフォルトの数を使用します3番目の各ブロックは512サイズなので、bs = 512を設定しますいつものようにddを定期的に実行するたびに、エラー後、データが破損して出力されます。それで、ページで説明されているようにパラメーターを使用します https://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html 「障害のあるディスク用」の部分を検索します。dd if=/dev/sdb of=/dev/sda bs=512 conv=noerror,sync iflag=fullblock 少し時間がかかりました。不良ブロックが発生するたびに、障害のあるドライブを叩いたような音がしました。それはブロックごとにコピーします、そして私のすべての悪いブロックを通して同じノイズを作りました。ノイズを発生させた回数は、別の不良ブロックが見つかり、表示エラーメッセージが表示されたためです。 'conv = noerror、sync'が行うことは、不正な読み取りにnulを埋め込むことですが、 'iflag = fullblock 'は短時間の読み取りに対応しますが、最後までデータを同期し続けます。破損はまったくなく、障害のあるブロックをコピーせず、空のnulで埋めます。ddでのコピーが完了したら、その不良ファイルを置き換えるだけで、filezillaを過去のバックアップから戻し、すべてが正常に機能しました。これが、障害のあるドライブをバックアップしようとする他のユーザーに役立つことを願っています。注:私の悪いブロックはお互いにかなり近いところにあります。不良が検出されたグループで一度に約4ブロック。ブロックがディスク全体にある場合、いくつかのファイルが影響を受ける可能性があります。幸い、私の場合、大きなデータベースの4gbファイルのみが影響を受けました。