производительность dd на Mac OS X по сравнению с Linux

производительность dd на Mac OS X по сравнению с Linux

Я пытался скопировать iso установщика windows на жесткий диск, чтобы не записать диск. Сначала я попробовал функцию восстановления Disk Utility, однако ей по какой-то причине не понравился ISO. Затем я попробовал использовать dd:

dd if=/path/to/image.iso of=/dev/disk3

Я понял, что файл копируется со скоростью улитки, около 160 КБ/сек. Я перезагрузился в свою установку Linux и снова выполнил команду, почти дословно:

dd if=/path/to/image.iso of=/dev/sdc

На этот раз команда была выполнена менее чем за минуту со средней скоростью 57 МБ/сек. В обоих случаях источником и местом назначения были одни и те же физические жесткие диски. Что происходит?

Я использую OSX 10.7.3 и Linux 2.6.38-13.

решение1

Для OS X используйте /dev/rdisk3.

По какой-то причине rdiskбыстрее, чем disk. Я думаю, это связано с буферами.

Также в целом использование bsфлага ddпомогает увеличить скорость.

dd if=/path/to/image.iso of=/dev/sdc bs=1M

Размер байта составляет 1 МБ, что обеспечивает более быструю передачу. В OS X вам придется использовать 1m(в нижнем регистре) вместо 1M.

решение2

BSD сырые диски

BSD в целом имеют 2 типа дисковых устройств: буферизованные и небуферизованные (сырые). Из hdutil(1)страницы руководства:

DEVICE SPECIAL FILES
     Since any /dev entry can be treated as a raw disk image, it is worth
     noting which devices can be accessed when and how.  /dev/rdisk nodes
     are character-special devices, but are "raw" in the BSD sense and
     force block-aligned I/O. They are closer to the physical disk than
     the buffer cache. /dev/disk nodes, on the other hand, are buffered
     block-special devices and are used primarily by the kernel's
     filesystem code.

     It is not possible to read from a /dev/disk node while a filesystem
     is mounted from it, ...

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

размер блока dd

Из dd(1)страницы руководства:

     Where sizes are specified, a decimal, octal, or hexadecimal number of bytes
     is expected.  If the number ends with a ``b'', ``k'', ``m'', ``g'', or ``w'',
     the number is multiplied by 512, 1024 (1K), 1048576 (1M), 1073741824 (1G) or
     the number of bytes in an integer, respectively.  Two or more numbers may be
     separated by an ``x'' to indicate a product.

Размер блока по умолчанию — 512 байт...

Связанный контент