web-dev-qa-db-ja.com

ブート可能なディスクを作成するのに、なぜcpではなくddを使用するのですか?

つまり、dd bs=4M if=archlinux.iso of=/dev/sdx status=progress oflag=syncまたはcp archlinux.iso /dev/sdx && sync、そしてどちらを使うのか? (ddのかなりの進行状況バーを除いて)

違いの1つは効率、つまりスピードです。たとえば、catを使用して、バイトを1つずつ取得してデバイスにコピーできます。

cat archlinux.iso > /dev/sdx

理論上、猫はそれぞれbyteを個別に移動します。これは遅いプロセスですが、実際にはバッファーが含まれます。

ddgoodブロックサイズ(通常は物理ブロックサイズに関連)を使用すると、より高速になります。

cpの場合、cp(ユーザーの制御下ではありません)が使用するバッファーサイズと、途中のその他のバッファーに依存します。理論的には、効率はcatddの間にあります。

類推:ガラスの内容物を別のガラスに注ぐようなものです。

catは一度に1滴ずつ行います。

ddはスプーンを使用し、スプーンの大きさを定義します(システム制限が適用されます)

cpは独自のスプーンを使用しますが、その大きさはわかりません。

6

主にあなたが言及したstatus=progressのためにそれを使用します。何を言えばいいか、私はせっかちで、する必要があります知っている :-)

これを追加するのを忘れてジョブを開始した場合でも、SIGUSR1シグナルを送信すると、現在のI/O統計がstderrに出力されます(リダイレクトしない限り、これは端末です)。

0
sitaram