不良セクターのあるディスクからのより高速な回復


13

最近dd、異常なHDDからファイルに変更しようとしました。使用しましたdd if=/dev/sdb of=somefile bs=4096 conv=noerror,sync。私の問題は、ddそれが不良ブロックに遭遇したときに多くの時間を浪費することでした。私のユースケースでは、より高速な結果を得るために、データの損失を喜んで支払います。

エラー処理を速くする方法はありますか?たぶんカーネルを微調整しますか?または別のプログラム?

回答:


29

まず、使用するソフトウェアについては、のddrescue代わりにを使用してみてくださいdd

ddrescue限られた数の再試行のみを行うスイッチがあります。また、ログファイルを使用できるため、どのブロックが不良であったかを記録します。後でより多くの再試行を実行したい場合は、同じログファイルを使用して(より多くの再試行のように)異なるオプションでddrescue 再度実行すると、必要なブロックのみが再試行されます。

使用例:

# ddrescue -n /dev/sda /dev/sdb rescue.log
# ddrescue -r1 /dev/sda /dev/sdb rescue.log

以下からのddrescue情報ページ:

   -n, --no-scrape     
          Skip the scraping phase. Avoids spending a lot of time
          trying to rescue the most difficult parts of the file.

   -r, --retry-passes=<n>
          Exit after given number of retry passes. Defaults to 0.
          -1 means infinity. Every bad sector is tried only once 
          in each pass. To retry bad sectors detected on a previous
          run, you must specify a non-zero number of retry passes.

使用するためのいくつかの追加ソースはddrescue次のとおりです。


編集する

HDD自体に時間がかかりすぎる場合は、TLERT ime L imited E rror R ecovery)またはCCTLC ommand C ompletion T ime L imit)と呼ばれる機能を有効にしてみてください。すべてのHDDに搭載されているわけではありませんが、HDDコントローラー自体の時間を制限するために使用できます。ddrecueもちろん、このアプローチはの使用と組み合わせることができます。

Linuxにはsmartctlsmartmontoolsパッケージ内に)というツールがあります。

現在の設定を確認するには(「無効」とは、時間を無制限にすることを意味します)。

# smartctl -l scterc /dev/sda

これを固定値に設定するには(この例では5.0秒。0に設定するとTLERが無効になります):

# smartctl -l scterc,50,50 /dev/sda

TLERのソース:http : //en.wikipedia.org/wiki/TLER


2
これdc3ddさを見るために別のツールは、DDのフォレンジック版です
fpmurphy

ああ、そのツールは知りませんでした。
2015

2
私はそのTLERについて何も知りませんでしたが、それは本当に私の日を救いました。私のディスクでは、これらは無効になっていて、ddrescueを実行するたびに、数秒後にディスクがブロックされました。電源オフ、電源オン、次の試行。今私はあなたが言及したコマンドでそれを2秒に設定しました、そしてそれは再びブロックすることはありません、それはいくつかのセクターをスキップしますが、少なくとも中断なしで続行します。
Sven Rieke、

2

このソフトウェアを使用すると、他の方法では読み取り不可能なディスクから良い結果が得られました。

http://www.cgsecurity.org/wiki/TestDisk

この次は、しっかりした回復ツールでもあります。ファイルテーブルが壊れていたり、削除されていても、ファイルを取得できます。それはいまいましい優れた法医学ツールです。本当に整理されていない方法でダンプしますが、すべてのデータを移動できます。

http://www.cgsecurity.org/wiki/PhotoRec


2

ディスクをレスキューするための迅速かつ迅速なオプションとして、shスクリプトファイルを使用して、shでファイルを実行できます。これにはこの行が含まれています。繰り返すだけでsudo ddrescuesleep 3あと数回です。スリープは、ドライブを数秒休止させるために使用されます。

#! /bin/sh -e 
sudo ddrescue -d -r0 -e +0 -T 1s -n /dev/drivepartition file.img log.logfile 
sleep 3

上記で使用したオプション:

  • -r0 :再試行なし
  • -e +0:最初のエラーで終了
  • -T 1s:1秒失敗して終了
  • -d :ダイレクトI / O
  • -n :削り取りなし

-Rオプションの終了後-A、一度使用すると、すべてのエラーサイズが反転して削除され、逆方向に再び開始されます。エラーを別の方法で読み取ることを意味します。


0

あなたのハードドライブのサイズとそれが持っている多くの不良ブロックに依存します。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、同期が」悪いが、一方で、NULsで読み取っ出ない、パッドにある「IFLAG = fullblock」略して向きを読み込みますが、最後まで自分のデータを同期して保持します。破損はまったくなく、障害のあるブロックをコピーせず、空のNULで埋めます。

DDでのコピーが完了したら、その不良ファイルを置き換えるだけで、Filezillaを過去のバックアップから戻し、すべてが正常に機能しました。これが、障害のあるドライブをバックアップしようとする他のユーザーに役立つことを願っています。

注:私の悪いブロックは、互いにかなり近い場所にあります。不良が検出されたグループで一度に約4ブロック。ブロックがディスク全体にある場合、いくつかのファイルが影響を受ける可能性があります。幸い、私の場合、大きなデータベースの4GBファイルのみが影響を受けました。


1
同じ回答が複数の質問に対応している場合、質問が重複している可能性があります。その場合は、1つに回答し、もう1つには重複の可能性があるとしてフラグを立てることをお勧めします。これにより、繰り返される回答の膨張を回避し、質問をリンクすることで、読者がすべての回答を見つけやすくなります。
fixer1234

本当にそうではありませんが、もしそうだと思ったら、私に知らせてください。答えを消します。私はどこでも正しい解決策を探しましたが、サーバーの問題を修正する方法を見つけました。他のいくつかの同様の質問がありますが、私の問題には答えられませんでした。これまでのところ、私は関連する質問を10個ほど見つけました。私は自分の経験とそれをどのように解決できたかを書くために、カップルに答えるだけです。私の答えを消去してほしい場合はお知らせください。喜んで消去させていただきます。よろしく。
Luis H Cabrejo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.