Что касается конечного результата, они будут делать то же самое. Разница в том, как ddбудут обрабатываться данные. И на самом деле, оба ваших примера довольно экстремальны в этом отношении: bsпараметр сообщает, ddсколько данных он должен буферизовать в памяти перед выводом.
Итак, по сути, первая команда будет пытаться прочитать 2 ГБ двумя кусками по 1 ГБ, а вторая попытается прочитать все 2 ГБ за один раз и затем вывести их в aaфайл.
Результат будет таким же, но в первом случае ddбудут записаны два блока по 1 ГБ, а во втором блоке по 2 ГБ. Разница в том, что ddскопированный блок хранится в памяти. Вам понадобится 1 ГБ оперативной памяти в первом случае и 2 ГБ во втором.
На мой взгляд, нет необходимости использовать такие большие блоки. Вы можете сделать пару тестов, но в моем случае я достигаю большей скорости с намного меньшими блоками (<1MB)
Используемый размер блока должен соответствовать лучшим настройкам скорости для источника и целевого устройства.
Вы можете лучше увидеть разницу, если попытаетесь скопировать устройство LV. Использование очень маленького размера BS прервет процесс чтения излишним. Использование очень большого размера BS приведет к долгим ожиданиям во время записи.
Поскольку стандартные LV обычно состоят из блоков размером 4 МБ, что также является хорошим размером для доступа к физическому диску, я использую для них bs = 4M.
Попробуйте поэкспериментировать с 16K или 256M - вы заметите разницу - и посмотрите индикатор диска во время копирования ...
Штрафы для блоков малого или большого размера несколько компенсируются кэшированием, выполняемым ядром. Смотрите здесь для мини-бенчмарка.
Жиль "ТАК - перестань быть злым"
@ Жиль, я не помню цифры в моих тестах, но они были намного более драматичными, чем твои. Какую физическую настройку жесткого диска вы использовали в своем тесте? Мой был на аппаратном RAID 5 с чередованием 5 дисков (SAS 15k) с 128 КБ. размер полосы
Нильс
Диски SATA, RAID нет, иначе машина простаивает. Я не помню точные характеристики.
/dev/urandom
, нет/dev/random
. См security.stackexchange.com/questions/3936/... , security.stackexchange.com/questions/3259/... , ...Ответы:
Что касается конечного результата, они будут делать то же самое. Разница в том, как
dd
будут обрабатываться данные. И на самом деле, оба ваших примера довольно экстремальны в этом отношении:bs
параметр сообщает,dd
сколько данных он должен буферизовать в памяти перед выводом.Итак, по сути, первая команда будет пытаться прочитать 2 ГБ двумя кусками по 1 ГБ, а вторая попытается прочитать все 2 ГБ за один раз и затем вывести их в
aa
файл.источник
Результат будет таким же, но в первом случае
dd
будут записаны два блока по 1 ГБ, а во втором блоке по 2 ГБ. Разница в том, чтоdd
скопированный блок хранится в памяти. Вам понадобится 1 ГБ оперативной памяти в первом случае и 2 ГБ во втором.На мой взгляд, нет необходимости использовать такие большие блоки. Вы можете сделать пару тестов, но в моем случае я достигаю большей скорости с намного меньшими блоками (<1MB)
источник
Первый будет занимать 1 ГБ памяти, заполнять его данными из входного файла и выводить его два раза.
Второй займет 2 ГБ памяти, заполнит его данными из входного файла и выведет его.
источник
Используемый размер блока должен соответствовать лучшим настройкам скорости для источника и целевого устройства.
Вы можете лучше увидеть разницу, если попытаетесь скопировать устройство LV. Использование очень маленького размера BS прервет процесс чтения излишним. Использование очень большого размера BS приведет к долгим ожиданиям во время записи.
Поскольку стандартные LV обычно состоят из блоков размером 4 МБ, что также является хорошим размером для доступа к физическому диску, я использую для них bs = 4M.
Попробуйте поэкспериментировать с 16K или 256M - вы заметите разницу - и посмотрите индикатор диска во время копирования ...
источник