Comando dd: Imagens de Disco e Uso Seguro
O Que Você Vai Aprender
- Como clonar um disco ou partição em um arquivo de imagem com
dd - Como gravar um ISO baixado em um pendrive USB para criar midia de boot
- Como evitar apagar o dispositivo errado com um
of=equivocado
Aviso Mais Importante
dd sobrescreve o que você apontar com of= (a saída) sem confirmação. Não há como desfazer e não há lixeira. Um único caractere errado no nome do dispositivo (/dev/sda etc.) pode destruir o disco do seu sistema em execução. Sempre verifique o alvo com lsblk antes de executar.
Resumo Rápido (o fluxo seguro)
- Identifique o dispositivo alvo com
lsblk(confira pelo tamanho e estado de montagem) sudo dd if=<entrada> of=<saida> bs=4M status=progress conv=fsync- Execute
syncdepois para esvaziar os buffers de escrita
Premissas (ambiente)
- SO: Ubuntu / qualquer distribuição Linux comum
ddvem com GNU coreutils. Nenhuma instalação extra necessária- Operações em dispositivos requerem
sudo(root)
Qual é a Sintaxe Básica do dd?
Conclusão: A forma base é
dd if=entrada of=saida bs=tamanho_bloco. Argumentos usam a formachave=valor, não flags com hífen como a maioria dos comandos.
dd simplesmente lê de uma entrada (if) e escreve em uma saída (of). Cada argumento é escrito como chave=valor.
$ dd if=input.img of=/dev/sdb bs=4M status=progress
Operandos principais:
if=(input file): origem. Padrão é a entrada padrãoof=(output file): destino. Padrão é a saída padrãobs=(block size): bytes lidos/escritos de uma vez (ex.4M= 4 MiB)count=: número de blocos a copiar (para clonar apenas o início)status=progress: quantidade de transferência e velocidade em tempo realconv=fsync: garantir que os dados sejam escritos na midia física ao finalizar
bs afeta diretamente a velocidade. O padrão de 512 bytes é lento. Para discos ou midias USB, bs=4M é uma escolha segura.
Como Identificar o Drive Correto? (Mais Importante)
Conclusão: Use
lsblkpara conferir capacidade e ponto de montagem, depois confirme o nome do dispositivo alvo. Sempre note a diferença entre/dev/sda(disco inteiro) e/dev/sda1(uma partição).
A maioria dos desastres com dd vem de escolher o nome de dispositivo errado. Sempre verifique primeiro.
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 238.5G 0 disk +-sda1 8:1 0 512M 0 part /boot/efi +-sda2 8:2 0 238G 0 part / sdb 8:16 1 28.7G 0 disk +-sdb1 8:17 1 28.7G 0 part /media/user/USB
Como ler:
sda: 238.5G, montado em/-> disco do sistema. Nunca escreva nelesdb: 28.7G comRM(removível) definido como1-> o pendrive USB que você inseriusdbsem número no final é o disco inteiro;sdb1é uma partição dentro dele
Execute lsblk uma vez antes e uma vez depois de inserir o USB, depois mire no dispositivo que apareceu recentemente. Confira também a coluna SIZE.
Para gravação de ISO, aponte of= para o disco inteiro (sdb), não uma partição (sdb1). Escrever em uma partição não produzirá midia bootável.
Como Gravar uma Imagem ISO em um USB?
Conclusão: Desmonte o USB alvo, depois execute
sudo dd if=xxx.iso of=/dev/sdX bs=4M status=progress. Aponteof=para o disco inteiro sem número de partição.
A forma padrão de criar um USB bootável para Ubuntu e similares.
1. Desmontar
Um alvo montado durante a gravação causa falhas ou corrupção.
$ sudo umount /dev/sdb1
2. Gravar com dd
$ sudo dd if=ubuntu-24.04.iso of=/dev/sdb bs=4M status=progress conv=fsync
1538000000 bytes (1.5 GB, 1.4 GiB) copied, 142 s, 10.8 MB/s 367+1 records in 367+1 records out
3. Sincronizar antes de remover
O kernel pode ainda reter dados em buffer após dd retornar. Esvazie com sync.
$ sync
conv=fsync e um sync final se sobrepõem em propósito, mas usar ambos previne a falha de "comando terminou mas a escrita ainda está em andamento".
Como Clonar um Disco Inteiro para um Arquivo de Imagem?
Conclusão: Coloque o dispositivo em
if=e um arquivo de imagem emof=para fazer backup de tudo. Passe porgzippara reduzir discos com muito espaço vazio.
Faça backup de um disco ou partição em um único arquivo.
$ sudo dd if=/dev/sdb of=usb-backup.img bs=4M status=progress
Comprima enquanto salva (útil quando grande parte do disco está vazia):
$ sudo dd if=/dev/sdb bs=4M status=progress | gzip > usb-backup.img.gz
Um arquivo de imagem consome a mesma capacidade que o dispositivo de origem (um USB de 28 GB gera um arquivo de 28 GB). Verifique o espaço livre do destino com df -h primeiro.
Como Restaurar uma Imagem de Volta para um Disco?
Conclusão: Basta trocar
if=eof=. Passe imagens comprimidas porgunzipdurante a restauração. Verifique o destino mais uma vez.
# Imagem sem compressao $ sudo dd if=usb-backup.img of=/dev/sdb bs=4M status=progress conv=fsync # Imagem comprimida $ gunzip -c usb-backup.img.gz | sudo dd of=/dev/sdb bs=4M status=progress conv=fsync
Uma restauração é a direção reversa de um clone. Confirme com lsblk que of= é o mesmo dispositivo que você usou como if= durante o backup antes de executar.
Como Acelerar ou Monitorar o Progresso?
Conclusão: Um
bsmaior (4Ma64M) é mais rápido. Monitore o progresso comstatus=progress; em sistemas mais antigos sem esse recurso, enviekill -USR1de outro terminal.
Ajustando o tamanho do bloco
$ sudo dd if=/dev/sdb of=backup.img bs=64M status=progress
Um bs pequeno significa mais chamadas de sistema e transferências mais lentas. Grande demais apenas desperdiça memória, então 4M a 64M é a faixa prática.
Verificando o progresso sem status=progress
Envie um sinal para um dd em execução de outro terminal para imprimir a quantidade atual de transferência.
$ sudo kill -USR1 $(pgrep -x dd)
GNU coreutils 8.24 e posteriores suportam status=progress. Prefira-o, e trate kill -USR1 como fallback para ambientes mais antigos.
Quais São os Desastres Comuns do dd?
Conclusão: Quase todo acidente se resume a um
of=errado,if/oftrocados, ou escrita em dispositivo montado. Uma verificação pré-execução previne os três.
| Desastre | Causa | Prevenção |
|---|---|---|
| Destruiu o disco do sistema | Nome de dispositivo of= errado |
Confira tamanho e montagem com lsblk primeiro |
| Backup saiu vazio | Trocou if= e of= |
Diga em voz alta "leitura = if, escrita = of" |
| Gravou mas não dá boot | Gravou em uma partição (sdb1) |
Grave o ISO no disco inteiro (sdb) |
| Conteúdo corrompido ao finalizar | Removeu USB antes de esvaziar buffers | Sempre use conv=fsync + sync |
Coisas que você não deve fazer
- Executar
of=/dev/sdXsem verificarlsblk - Gravar com
ddenquanto o alvo ainda está montado - Remover o USB logo após
ddsemsync
Template seguro para copiar e colar
# 1. Verificar dispositivos (sempre primeiro) lsblk # 2. Gravar ISO em USB (assume que esta desmontado) sudo dd if=image.iso of=/dev/sdX bs=4M status=progress conv=fsync # 3. Sincronizar apos finalizar sync
Substitua /dev/sdX pelo nome real do dispositivo que você confirmou em lsblk.