Как определить лучший размер байта для команды dd

21

Я знаю, что выполнение dd if = / dev / hda of = / dev / hdb делает глубокую копию жесткого диска. Я слышал, что люди смогли ускорить процесс, увеличив число байтов, которые считываются и записываются за раз (512), с опцией "bs".

Мой вопрос:

От чего зависит идеальный размер байта для копирования с жесткого диска?

а также

Почему это определяет идеальный размер байта?

Джеймс Т
источник
Я думал, что он должен был бы делиться совершенно равномерно на размер диска или раздела: поэтому я попытался определить точный размер байта целевого раздела, получить основные факторы и определить достаточно большой блок, кратный некоторые из этих основных факторов ...
ПП.
serverfault.com/questions/147935/… || unix.stackexchange.com/questions/9432/… || superuser.com/questions/234199/…
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件

Ответы:

18

Как говорит Крис С., оптимальный размер блока зависит от аппаратного обеспечения. По моему опыту, это всегда больше, чем 512 байт по умолчанию. Если вы работаете с необработанными устройствами, геометрия вышележащей файловой системы не будет иметь никакого эффекта. Я использовал приведенный ниже скрипт, чтобы помочь «оптимизировать» размер блока dd.

#!/bin/bash
#
#create a file to work with
#
echo "creating a file to work with"
dd if=/dev/zero of=/var/tmp/infile count=1175000

for bs in  1k 2k 4k 8k 16k 32k 64k 128k 256k 512k 1M 2M 4M 8M 

do
        echo "Testing block size  = $bs"
        dd if=/var/tmp/infile of=/var/tmp/outfile bs=$bs
        echo ""
done
rm /var/tmp/infile /var/tmp/outfile
user9517 поддерживает GoFundMonica
источник
4
В OS X "1M ... 8M" должен быть в нижнем регистре до "1m ... 8m".
Мэтт Бекман
1
Вы могли бы добавить «время» перед dd, чтобы иметь дополнительную информацию о том, сколько времени было потрачено на ожидание ввода-вывода и какое количество реальной работы ...
Оливье Дюлак
1
@lain /dev/zeroгенерируется, не нужно читать его с диска; Вы могли бы dd if=/dev/zero ibs=1M count=32 obs=$bs of=/var/tmp/outfile@ olivier-dulac хорошо, ddуже напечатать скорость; я не думаю time(или /usr/bin/time) добавить какую-либо информацию стоит.
Буф
1

К сожалению, идеальный размер будет зависеть от вашей системной шины, контроллера жесткого диска, конкретного диска и драйверов для каждого из них. Единственный способ найти идеальный размер - продолжать пробовать разные размеры. Справедливое предупреждение о том, что некоторые устройства поддерживают только один размер блока, хотя это редко, и обычно драйверы в любом случае компенсируют разницу.

Я считаю, что размер блока 2 ^ 15 или 2 ^ 16 лучше всего подходит для моих дисков SATA WDC (кэш-память 8 МБ), подключенных к RAID-контроллеру Adaptec SAS, 4x PCIe, 64-разрядная версия FreeBSD 8.0-STABLE. Но для моего дешевого старого флэш-накопителя размеры 2 ^ 10 кажутся самыми быстрыми.

«Идеальный размер» - это почти всегда степень двойки.

Крис С
источник
0

Я могу поручиться за то, чтобы измерить результат выполнения теста на используемом устройстве, прежде чем тратить время. Я тупо не стал беспокоиться и, после измерения, затем, отрегулировав размер моего блока, сократил мою длительность DD до 590Gb передачи вдвое. Одно и то же значение BS уменьшило бы время на 20% только при использовании другой комбинации caddy / drive.

Bernster
источник