Comando dd: Imagens de Disco e Uso Seguro
O Que Voce Vai Aprender
- Como clonar um disco ou particao 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 voce apontar com of= (a saida) sem confirmacao. Nao ha como desfazer e nao ha lixeira. Um unico caractere errado no nome do dispositivo (/dev/sda etc.) pode destruir o disco do seu sistema em execucao. Sempre verifique o alvo com lsblk antes de executar.
Resumo Rapido (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 distribuicao Linux comum
ddvem com GNU coreutils. Nenhuma instalacao extra necessaria- Operacoes em dispositivos requerem
sudo(root)
Qual e a Sintaxe Basica do dd?
Conclusao: A forma base e
dd if=entrada of=saida bs=tamanho_bloco. Argumentos usam a formachave=valor, nao flags com hifen como a maioria dos comandos.
dd simplesmente le de uma entrada (if) e escreve em uma saida (of). Cada argumento e escrito como chave=valor.
$ dd if=input.img of=/dev/sdb bs=4M status=progress
Operandos principais:
if=(input file): origem. Padrao e a entrada padraoof=(output file): destino. Padrao e a saida padraobs=(block size): bytes lidos/escritos de uma vez (ex.4M= 4 MiB)count=: numero de blocos a copiar (para clonar apenas o inicio)status=progress: quantidade de transferencia e velocidade em tempo realconv=fsync: garantir que os dados sejam escritos na midia fisica ao finalizar
bs afeta diretamente a velocidade. O padrao de 512 bytes e lento. Para discos ou midias USB, bs=4M e uma escolha segura.
Como Identificar o Drive Correto? (Mais Importante)
Conclusao: Use
lsblkpara conferir capacidade e ponto de montagem, depois confirme o nome do dispositivo alvo. Sempre note a diferenca entre/dev/sda(disco inteiro) e/dev/sda1(uma particao).
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(removivel) definido como1-> o pendrive USB que voce inseriusdbsem numero no final e o disco inteiro;sdb1e uma particao dentro dele
Execute lsblk uma vez antes e uma vez depois de inserir o USB, depois mire no dispositivo que apareceu recentemente. Confira tambem a coluna SIZE.
Para gravacao de ISO, aponte of= para o disco inteiro (sdb), nao uma particao (sdb1). Escrever em uma particao nao produzira midia bootavel.
Como Gravar uma Imagem ISO em um USB?
Conclusao: Desmonte o USB alvo, depois execute
sudo dd if=xxx.iso of=/dev/sdX bs=4M status=progress. Aponteof=para o disco inteiro sem numero de particao.
A forma padrao de criar um USB bootavel para Ubuntu e similares.
1. Desmontar
Um alvo montado durante a gravacao causa falhas ou corrupcao.
$ 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 apos dd retornar. Esvazie com sync.
$ sync
conv=fsync e um sync final se sobrepoem em proposito, mas usar ambos previne a falha de "comando terminou mas a escrita ainda esta em andamento".
Como Clonar um Disco Inteiro para um Arquivo de Imagem?
Conclusao: Coloque o dispositivo em
if=e um arquivo de imagem emof=para fazer backup de tudo. Passe porgzippara reduzir discos com muito espaco vazio.
Faca backup de um disco ou particao em um unico arquivo.
$ sudo dd if=/dev/sdb of=usb-backup.img bs=4M status=progress
Comprima enquanto salva (util quando grande parte do disco esta 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 espaco livre do destino com df -h primeiro.
Como Restaurar uma Imagem de Volta para um Disco?
Conclusao: Basta trocar
if=eof=. Passe imagens comprimidas porgunzipdurante a restauracao. 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 restauracao e a direcao reversa de um clone. Confirme com lsblk que of= e o mesmo dispositivo que voce usou como if= durante o backup antes de executar.
Como Acelerar ou Monitorar o Progresso?
Conclusao: Um
bsmaior (4Ma64M) e mais rapido. 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 transferencias mais lentas. Grande demais apenas desperdiça memoria, entao 4M a 64M e a faixa pratica.
Verificando o progresso sem status=progress
Envie um sinal para um dd em execucao de outro terminal para imprimir a quantidade atual de transferencia.
$ 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 Sao os Desastres Comuns do dd?
Conclusao: Quase todo acidente se resume a um
of=errado,if/oftrocados, ou escrita em dispositivo montado. Uma verificacao pre-execucao previne os tres.
| Desastre | Causa | Prevencao |
|---|---|---|
| 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 nao da boot | Gravou em uma particao (sdb1) |
Grave o ISO no disco inteiro (sdb) |
| Conteudo corrompido ao finalizar | Removeu USB antes de esvaziar buffers | Sempre use conv=fsync + sync |
Coisas que voce nao deve fazer
- Executar
of=/dev/sdXsem verificarlsblk - Gravar com
ddenquanto o alvo ainda esta montado - Remover o USB logo apos
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 voce confirmou em lsblk.