
Eu estava tentando copiar uma iso do instalador do Windows para um disco rígido para evitar gravar um disco. Tentei pela primeira vez a função de restauração do Utilitário de Disco, mas por algum motivo ele não gostou do ISO. Então tentei usar dd:
dd if=/path/to/image.iso of=/dev/disk3
Percebi que ele estava copiando o arquivo em ritmo de lesma, cerca de 160 KB/s. Reiniciei minha instalação do Linux e executei o comando novamente, quase literalmente:
dd if=/path/to/image.iso of=/dev/sdc
Desta vez o comando foi executado em menos de um minuto, com velocidade média de 57 MB/seg. Em ambos os casos, a origem e o destino eram os mesmos discos rígidos físicos. O que está acontecendo?
Estou executando o OSX 10.7.3 e o Linux 2.6.38-13.
Responder1
Para OS X, use /dev/rdisk3
.
Por alguma razão rdisk
é mais rápido que disk
. Acredito que tenha a ver com buffers.
Também em geral usar a bs
bandeira dd
ajuda na velocidade.
dd if=/path/to/image.iso of=/dev/sdc bs=1M
O tamanho de byte é 1M, que transfere mais rápido. No OS X você deve usar 1m
(minúsculas) em vez de 1M
.
Responder2
Discos brutos BSD
BSDs em geral possuem 2 tipos de dispositivos de disco: com buffer e sem buffer (bruto). Na hdutil(1)
página de manual:
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, ...
Por causa do segundo parágrafo, o disco devedesmontadopara poder usá dd
-lo no "modo bruto".
dd tamanho do bloco
Da dd(1)
página de manual:
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.
O tamanho do bloco padrão é 512 bytes...