web-dev-qa-db-ja.com

USBスティックのクローンを作成するときにcpとddを使用することの違いは何ですか?

USBスティックのクローンを作成するには、少なくとも2つの方法があることがわかりました:(/dev/sdbをソースとして、/dev/sdcをターゲットとして)

  1. cpを使用したクローニング:

    Sudo cp /dev/sdb /dev/sdc
    
  2. ddを使用したクローニング:

    Sudo dd if=/dev/sdb of=/dev/sdc bs=4096
    

2つのコマンド間に大きな違いはありますか?また、なぜddはcpよりも優先されますか?

6
MrWm

この場合、違いは、bs=4096を使用しているため、ddは一度に4096バイトブロックの読み取りに制限されることです。おそらく、ddcpよりもはるかに遅くなります。より大きなブロックサイズで試してください(10M50M?)。

現在のデバイスに最適な特定のバッファサイズは、cp 's(またはcat' s)とは異なる場合があります。 cpのバッファリングを簡単に制御することはできません。 ddのユーティリティは次の場合に光ります:

  • コピーする大きなデバイスがveryあるため、最適なブロックサイズを決定するための実験は価値があります。
  • ディスクの一部のみをコピーする必要があります。 countを指定して、コピーされるブロックの数を制限できます。
  • 中断されたコピーを再開します。 cpではできませんが、ddおよびseekオプションを使用して、skipで試すことができます。
  • それを何かの標準入力にパイプしたい(確かに、catはここでも動作する):

    dd if=/dev/sda bs=10M | ssh Host dd of=/dev/sdb
    

ddの有用性は、このUnixおよびLinuxの投稿で非常によく議論されています: dd vs cat — ddは今でも関連していますか?

11
muru