dd 入出力エラーの説明

dd 入出力エラーの説明

/dev/Storage/Storageパイプを使用して(LVMの下のLV)をイメージファイルにコピーしましたdd | pv | dd。エラーを報告しますが、ディスクのコピーが完了したのか、エラーが原因で停止したのかをdd知りたいです。dd2つの異なる出力を提供するので、わかりません。 1つは上部にエラーがあり、もう1つはエラーがありません。私はその間に0.1秒だけ追加され、追加データがないので推測していいえと言いたいのですが、実際にあるかどうかはわかりません。 /dev/Storage/Storage1TB ディスク (TB = 10 12 = 1000 4 ) または 931.51 GiB (ギガバイト = 2 30 = 1024 3 ) または 1953513472 セクタです。ディスク上のファイルシステムが複雑で、正常に動作しません。

$ sudo dd if=/dev/Storage/Storage | pv | dd of=Storage.img
dd: error reading ‘/dev/Storage/Storage’: Input/output error                   ]
1627672400+0 records ins] [   <=>                                              ]
1627672400+0 records out
833368268800 bytes (833 GB) copied, 75181 s, 11.1 MB/s
776GB 20:53:01 [10.6MB/s] [  <=>                                              ]
1627672400+0 records in
1627672400+0 records out
833368268800 bytes (833 GB) copied, 75181.1 s, 11.1 MB/s

答え1

ハードウェアエラーの場合は、カーネルログメッセージ(dmesg、または)でSATAドライバの詳細メッセージを確認してください。/var/log/kern.logまた、便利です。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これ以外のものがありました。IIRCはconv=noerrorGNU ddが存在した後に追加されましたddrescue。)

中断した部分から続行するには、オプションseekskip使用できますconv=notrunc


ddがどれだけ離れているかを知りたい場合は、標準入力のファイルの場所を確認してください。

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

答え2

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

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

  • お使いのデバイス名を見ると、おそらくLVM:を使用しています/dev/Storage/Storage。これはサブセットではなくディスク全体ですか?lvdisplayデバイス名の後に隠れた意味を見つけるために使用されます。

答え3

私も同じ問題を抱えていますが、この問題を解決するのに役立つ特定のフォームに関するチュートリアルや投稿はありませんdd。少し掘るこの問題このソリューションそれは私にとって本当にうまくいきます。

ユースケースの例は次のとおりです。

$ sudo apt-get install gddrescue

$ sudo ddrescue /dev/Storage/Storage Storage.img | pv

一般的な形式は次のとおりです。

$ sudo ddrescue <in_file> <out_file>

もちろん、進捗監視ツールに| pvパイプする場合です。stdout

関連情報