GNU/Linux >> Linux の 問題 >  >> Linux

dd 入出力エラーの解釈

  • デフォルトの 512 バイト dd を使用しています ブロックサイズ。 128k など、より大きなブロック サイズを使用すると、パフォーマンスが大幅に向上します。 または 1m .

  • 2 つの dd を実行しているため、2 つの出力があります。 コマンド、最初のものはデバイス リーダーで、I/O エラーを示しています。

  • あなたが使用しているデバイス名を考えると、LVM を使用している可能性があります:/dev/Storage/Storage .これはディスク全体であり、サブセットではありませんか? lvdisplay を使用 このデバイス名の背後にあるものを把握します。


カーネル ログ メッセージ (dmesg 、または /var/log/kern.log ) ハードウェア エラーの場合は、SATA ドライバーからの詳細なメッセージを参照してください。こちらも便利です:smartctl -x /dev/sda .パーティションの末尾などを超えて読み取ろうとしただけの場合は、カーネル ログにも表示される可能性があります。

I/O エラーの後も dd を続行させ、エラーに続く読み取り可能部分を読み取るには、

を使用します。
dd if=... of=... conv=noerror bs=128k   # it doesn't get any faster beyond about 128k, because of L2 cache size

(OPのコメントで述べたように、 ddrescue これ以上あります。 conv=noerror ddrescue の後に GNU dd に追加されました 存在した、IIRC.)

中断したところから再開したい場合は、seek を使用できます と skip オプション、conv=notrunc 付き .

本当に dd がどれだけ進んでいるか知りたい場合は、stdin のファイル位置を見てください:

cat /proc/$(pidof dd)/fdinfo/0  # dd opens its infile as fd #0

(または ls -lh 出力ファイルのサイズ)。ハードドライブ全体に相当するデータを、何かを介してパイプで余分に 2 回コピーするのは、私にはばかげているように思えます。コピーにかかる時間に対して、コンピュータの速度が必要以上に少し遅くなるだけだからです。

または、少なくとも次のことを行います:

dd if=... conv=noerror bs=128k | pv > Storage.img

Linux
  1. Linuxでの入出力とエラーリダイレクトの操作

  2. Linux/Unixでの入力/出力リダイレクト

  3. キーボード入力とテキスト出力はどのように機能しますか?

  1. Cdへの入力に使用されるコマンドの出力はどれですか?

  2. 出力を新しい行に分割しますか?

  3. 特定の実行可能ファイルからの入力と出力をインターセプトしますか?

  1. Ls-lがLs-sとは異なるサイズを出力するのはなぜですか?

  2. ubuntu 入出力エラー

  3. cat/proc/cpuinfo の出力の解釈