ブートディスクを作成するときにcpの代わりにddを使用するのはなぜですか?

ブートディスクを作成するときにcpの代わりにddを使用するのはなぜですか?

dd bs=4M if=archlinux.iso of=/dev/sdx status=progress oflag=syncdo ie または do の違いは何でありcp archlinux.iso /dev/sdx && sync、どちらかを使用する理由はありますか? (ddの美しい進行状況バーに加えて)

ベストアンサー1

違いの1つは効率とスピードです。たとえば、バイトを1つずつインポートしてデバイスにコピーできますcat理想的な実装または以前のシステムではたとえば、BSD4:

cat archlinux.iso > /dev/sdx

これらの実装ではcatバイト独立した。バッファは実際に関連していますが、これは遅いプロセスです。最新のcat実装ではチャンクで読みます(下記参照)。

そしてddいいねブロックサイズより速くなります。

これは、バッファサイズ(ユーザが制御できない)と他のバッファがcp使用するバッファサイズによって異なります。cp効率は理想的な実装catdd最適なブロックサイズの間です。

実際には現代的ですが、システムが必要ですcatcp優先ブロックサイズ:st_blkサイズ。必ずしもそうではありません。最適なブロックサイズ

たとえ話は、一杯の内容物を別のグラスに注ぐのと同じです。

  • 理想化はcat一度に一滴ずつ来る。

  • ddスプーンが使用され、スプーンのサイズを正確に定義します(システム制限)。

  • cp現代人はcat自分のスプーンを使います(stat -f -c %s filenameそしてそれがどれだけ大きいかを教えてくれます)。

おすすめ記事