/dev/Storage/Storage
パイプラインを使用して、dd | pv | dd
(LVMのLV)をイメージファイルにコピーしようとしました。 dd
がエラーを報告しました。dd
がディスクのコピーを終了したのか、エラーが原因で停止したのかを知りたいです。上部にエラーがあるものとないものの2つの異なる出力が得られたので、私にはわかりません。推測すると、2つの間に0.1秒しか追加されず、余分なデータがないため、そうではなかったと思いますが、そうであったかどうかはわかりません。 /dev/Storage/Storage
は1 TBディスクです(テラバイト= 1012 = 10004)または931.51 GiB(gibibyte = 230 = 10243)または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
デフォルトの512バイトのdd
ブロックサイズを使用しています。 128k
や1m
などの大きなブロックサイズを使用すると、パフォーマンスが大幅に向上します。
2つのdd
コマンドを実行しているため、2つの出力があります。最初の出力はデバイスリーダーで、I/Oエラーが表示されます。
使用するデバイス名が/dev/Storage/Storage
の場合、LVMを使用している可能性があります。これはディスク全体であり、サブセットではありませんか? 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
にはこれ以上があります。ddrescue
が存在した後、GNU ddにconv=noerror
が追加されました。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