dd のコンソール出力をファイルとコンソールにコピーする

dd のコンソール出力をファイルとコンソールにコピーする

dd を使用してハード ドライブのイメージを作成しようとしていますが、I/O エラーが発生します。その結果、「noerror」パラメータを追加しましたが、回復を試みるためにエラーを追跡したいと思います。

私の現在の試みは次のとおりです。

sudo dd if=/dev/sdb bs=1M conv=sync,noerror of=output.img 2>&1 | tee output.log

これにより、output.img と output.log の両方が作成されますが、両方のサイズは 0 バイトになり、dd を終了してもターミナルに出力はエコーされません。

私は dd に慣れているので、ddrescue などのツールよりも 'noerror' オプションを指定した dd を試してみたいと思います。

また、このドライブには NTFS パーティションが 1 つだけ含まれているため、ビットが欠落している NTFS パーティションを回復する方法を教えていただけるとありがたいです (ドライブは 500 GB で、最初に発生したエラーは 30 GB 付近でした)。

ありがとう!

答え1

ぜひ使ってみてくださいddrescue- 仕事に適したツールを避けないでください。それを実行するのは難しくなく、ストレスを軽減できます。

呼び出しは簡単です:

ファーストラン:

  • -p- スペースを事前に割り当てる
  • -b 4M- 速度を上げるために大きなセクターサイズを使用する
ddrescue -p -b 4M ${SRC_DISK} ${DST_IMAGE} ${DST_LOGFILE}

後続の実行: (とは異なりdd、複数回実行することができ、ログ ファイルを参照して中断したところから続行されます)

  • -b 512- より小さなセクターサイズを使用してギャップを埋める
  • -r 10- 複数の再試行パスを使用する
ddrescue -b 512 -r 10 ${SRC_DISK} ${DST_IMAGE} ${DST_LOGFILE}

読み取りエラーのあるセクションには (デフォルトで) ゼロが含まれ、以下のようなログ ファイルが作成されます。

#      pos        size  status
0x00000000  0x00014E00  +
0x00014E00  0x00000200  -
0x00015000  0x00005800  +
0x0001A800  0x00000200  -
0x0001AA00  0x00028000  +
0x00042A00  0x00000200  -
0x00042C00  0x00125400  +

マークされた線+はエラーのない領域、マークされた線-はエラーのある領域です。


読み取りエラーの性質に応じて、次のオプションのいくつかを検討する必要がある場合があります。

   -d, --direct
          use direct disc access for input file

   -K, --skip-size=<min>[,<max>]
          initial size to skip on read error [64 KiB]

   -M, --retrim
          mark all failed blocks as non-trimmed

   -O, --reopen-on-error
          reopen input file after every read error

   -r, --retry-passes=<n>
          exit after <n> retry passes (-1=infinity) [0]

   -R, --reverse
          reverse the direction of all passes

あなたの質問に直接答えると:

  1. おそらくバッファリングの問題が発生しているのでしょう。たくさんの行が一度に表示され、その後何も表示されないことがあります。unbuffer
  2. sudoパスワードを要求している可能性がありますが、プロンプトをリダイレクトしたため、何も起こりません。

関連情報