ここにIntenso外付け1TB 2.5" HDDがあります。ある種の欠陥(Windowsでランダムに接続が切断される現象)が発生したため、次のコマンドを実行して確認することにしました。
dd if=/dev/sdb of=/dev/null bs=4M status=progress
実行時の出力は次のとおりです。
715099471872 Bytes (715 GB, 666 GiB) kopiert, 16115 s, 44,4 MB/s
44.4MB/sは、USB3ディスクに比べて遅すぎるという事実に加えて、奇妙なことは、時計が12秒ごとにカチカチするということです。 (「16115 s」はddクロックです。)通常のディスクで同じコマンドを実行すると、毎秒チックします。
なぜそれが長い間ブロックされているのか理解しようとしていますが、strace
メモリマッピングを介してディスクから読み取っているようで、何も見えません。
ディスクの読み取り中に単に12秒間ブロックすることもできません。速度が44.4MB/sなので、ブロックサイズは4MBです。したがって、ddは毎秒時計を更新する機会が11回あります。
それでは、ここで正確に何が起こっているのでしょうか?
(ディスクに何が問題なのか興味はありませんが、dd時計がなぜこんなに遅くなるのか疑問に思います。
答え1
dd
その表示はコピー操作間でのみ更新できます。実際、GNU coreutilsを使用すると、dd.c
メインwhile
ループが次のように単純化されることがわかります。
int dd_copy() {
// some setup
while(true) {
if(progress_reporting_enabled && minimum_time_passed) {
print_xfer_stats();
}
copy_a_block;
}
}
ブロックのコピーに繰り返し12秒かかる場合できないビジュアルアップデートを入手してください。
正直なdd
ところ、これはまったく使用したいプログラムではありません(多くの場合、特に)。
pv /dev/sdb > /dev/null
実際に4MBブロックを読みたい場合は、より理解しやすくなります(理由は何ですか?ハードドライブにはおそらく1024個のBブロックがあり、USB転送ははるかに小さいため、より大きな転送では速度が非常に低下します)。
pv -B 4M /dev/sdb > /dev/null
(ディスクに興味がないと言われ、なぜdd
このようなことが起こるのかについて質問しましたが、将来の読者のためにハードドライブにエラーが発生しています:)
しかし、高い視点から:あなたは破損したハードドライブを扱っています。コンテンツをバックアップする場合を除き、できるだけ少なく使用することをお勧めします。