ddが出力デバイスから読み取られるのはなぜですか?

ddが出力デバイスから読み取られるのはなぜですか?

CentOS 7 x86_64 DVDイメージをUSBドライブ(sdb)にコピーするddときiostat

主にUSBドライブへの書き込みは交互に続行されます。

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              18,00       380,00        28,00        380         28
sdb              79,00        16,00      9000,00         16       9000

そして、ハードドライブとUSBドライブの両方から読みます。

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              53,00      5180,00         0,00       5180          0
sdb            1329,00      5316,00         0,00       5316          0

マシンでは何も起こらず、dd停止するとディスクが利用可能になります。

これは一種の内部チェックサムプロセスですかdd

Linux 3.16.0のUSBドライブドライバに固有の機能はありますか?

ベストアンサー1

外付け(USB 2.0)ハードドライブを安全に消去すると、同様の状況が発生しました。 100%の書き込みを期待していましたが、長い読み取りと数秒の高スループット書き込みが続きました。全体の書き込み速度を表示するためにpvを使用し(下記のコマンドを参照)、平均書き込み速度は10MB / sであり、14MB / sのバーストは約10秒間続いた後、数kB / sに続きました。私のiostat出力はあなたの出力に非常に似ています。

知っていると私の問題だったdd ブロックサイズが小さすぎます。(512バイト)。私が疑うのは、カーネルがブロックあたり1kのバッファでブロックを読み取ってddが一度に512バイトを上書きしてからフラッシュできることです。私はカーネルの専門家ではないので、これは単なる推測です。

私はそう言えるddブロックサイズを72Kに増やすと大きな違いが発生します。。現在、持続書き込み速度が40MB / sを超えることがわかりました。これは、USB 2.0が提供できる理論的最大値(480Kb / s、USBオーバーヘッドを除く)に非常に近く、この10年後のディスクが達成できる最大持続書き込み速度(約55MB / s)にも非常に近いです。私はその速度がほぼ裸の金属速度に非常に満足しています。

以下は、ドライブを消去するために使用するコマンドです。

openssl enc -aes-256-ctr -pass \
pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" \
-nosalt </dev/zero \
| pv -bartpes 160041885696 -B 128K \
| dd bs=72K count=2170707 of=/dev/sdf iflag=fullblock

行1-3は、/dev/urandomで生成されたパスワードを使用してAES-256-CTRを介して/ dev/zeroを暗号化します。したがって、それは暗号化されたランダムなごみストリームです。

4行目は、160GBドライブのバイトを考慮し、128KiB転送バッファサイズのpvを使用して進行状況を示しています。

行5では、電卓を使用して選択したブロックサイズを使用して、ドライブの合計バイト数の一部である512の最大倍数を見つけようとします。 iflag = fullblockを使用すると、書き込み前に1つのブロック全体があるまで、ddはそのバッファを繰り返し読み込みます。

おすすめ記事