Ajuda! dd
é assustador!
Você não está sozinho. De dicas para o Linux :
The ' dd ' command is one of the original Unix utilities and should be in everyone's tool box... Some people believe dd means "Destroy Disk" or "Delete Data" because if it is misused, a partition or output file can be trashed very quickly. Since dd is the tool used to write disk headers, boot records, and similar system data areas, misuse of dd has probably trashed many hard disks and file systems.
Mas não se preocupe. Uma vez que você saiba de suas complexidades, você estará invocando dd
com a graça calma de um cowboy de rodeio.
Será que vai quebrar? O que é isso count
ing bs
?
Vamos lidar primeiro com a primeira pergunta.
How can we now subtly break things by choosing a bad combination of
bs
andcount
? How would we know?
Se você quer dizer 'conseqüências não intencionais' por 'quebrar', então apenas especificando-as, em teoria. O que quero dizer com isso? Bem, digamos que você queira copiar image.img
em um cartão SD localizado em /dev/sdc
. Então você combina os parâmetros em seu exemplo:
# dd if=/home/someone/image.img of=/dev/sdc bs=64M count=16
Deve ser bom reutilizar essas configurações, certo? Vamos apenas esperar que dd
termine ... agora, o que está dizendo?
16+0 records in
16+0 records out
1073741824 bytes (1.1 GB) copied, 34.1303 s, 31.5 MB/s
Apenas 1,1 GB copiados! Mas image.img
é 2GB ou mais, eu quero a coisa toda copiada! Dizendo dd
para copiar 16 lotes de 64M (onde M = 1024 * 1024, aliás) você especificou um tamanho. Você saberia pela saída de status. Se você quiser copiar o arquivo inteiro, combine o tamanho com bs
e count
; ou apenas omitir esses completamente:
# dd if=/home/someone/image.img of=/dev/sdc
4364864+0 records in
4364864+0 records out
2234810368 bytes (2.2 GB) copied, 45.9502 s, 48.6 MB/s
O que acontece se ficarmos realmente impertinentes e dissermos ao dd
para copiar mais dados do que os disponíveis?
# dd if=/home/someone/image.img of=/dev/sdc bs=1M count=4096
2131+1 records in
2131+1 records out
2234810368 bytes (2.2 GB) copied, 77.9768 s, 28.7 MB/s
Ah, dd
apenas copia quantos bytes ele recebe. Isso é útil.
Monitorando dd
Falando de saída de status, dd
(variante GNU) respeita e responde ao sinal INFO SIGUSR1
:
# echo "In another terminal or TTY"
# pkill -USR1 -n -x dd
# echo "Printed to stdout on the terminal/tty running dd:"
534+0 records in
534+0 records out
559939584 bytes (560 MB) copied, 1.68414 s, 332 MB/s
Prático para manter um olho em uma transferência que é lenta ou que você espera pendurar por algum motivo. Pares bem com watch
, mas certifique-se de dar watch
um tempo de intervalo razoavelmente longo.
O dd
tem outras opções que eu deva conhecer?
dd
tem outras opções, mas na maioria dos casos, se você precisar usá-las, saberá o que elas fazem. Ainda assim, alguns exemplos podem dar uma ideia:
-
conv=CONVS
: converta a entrada de acordo com uma ou mais opções de conversão -
seek=N
eskip=N
: ignore blocos [obs | ibs] no início de [output | input] -
status=X
: (suprime a saída)noxfer
ounone
Estou me sentindo muito melhor com dd
agora!
Ótimo! Em pouco tempo, você enviará uma imagem inicializável pela Internet para ser gravada diretamente em um cartão microSD usando uma combinação de dd
e ssh
.
Mas o que significa o acrônimo dd
?
Uma boa última pergunta. Para essa pergunta e outras semelhantes, encaminharei você para a entrada do arquivo de jargão por dd
.
Sinta-se encorajado a pedir esclarecimentos se algo for mais opaco do que deveria ser!