Каково различие в использовании CP и dd при клонировании карт с интерфейсом USB?

Я нашел, что существует по крайней мере два метода для клонирования карты с интерфейсом USB: (с /dev/sdb как источник, в то время как /dev/sdc цель)

  1. Клонирование с cp:

    sudo cp /dev/sdb /dev/sdc
    
  2. Клонирование с dd:

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

Есть ли между двумя командами какие-либо существенные различия и почему dd предпочтен по CP?

7
задан 28 March 2016 в 13:02

1 ответ

В этом случае различие - это dd ограничивается к чтению 4 096-байтовых блоков за один раз, так как Вы использовали bs=4096. Вероятный эффект - это dd будет очень, намного медленнее, чем cp. Попробуйте большим размером блока (10M, 50M?).

Конкретный размер буфера это подходит лучше всего для текущих устройств, мог бы отличаться от cp(или cat). Вы не можете легко управлять cpбуферизация. ddутилита сияет когда:

  • у Вас есть очень большие устройства для копирования, так, чтобы экспериментирование для определения лучшего размера блока стоило.
  • необходимо скопировать только часть диска. Можно указать count ограничить, сколько блоков копируется.
  • Вы хотите возобновить прерванную копию. Вы не можете сделать так с cp, но можно попробовать dd, при помощи seek и skip опции.
  • Вы хотите передать его по каналу к стандартному входу чего-то (по общему признанию, cat будет работать здесь также):

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

dd полноценность очень хорошо обсуждена в этом сообщении Unix и Linux: dd по сравнению с кошкой — dd все еще релевантен в эти дни?

12
ответ дан 23 November 2019 в 06:21

Другие вопросы по тегам:

Похожие вопросы: