O poder do comando dd - ferramentas mais versáteis do Linux
Contudo, o foco desse artigo é mostrar as diversas maneiras para se usar o comando dd!
A ferramenta fdisk é de suma importância para saber como está montada as partições do disco que possivelmente você irá manipular com o comando dd. Para exibir informações de disco e suas partições, como root (ou sudo), execute:
Algo similar a isso, você verá:
/dev/sda1 * 63 417689 208813+ 83 Linux
/dev/sda2 2522205 13799834 5638815 83 Linux
/dev/sda3 13799835 16771859 1486012+ 8e Linux LVM
/dev/sda4 417690 2522204 1052257+ 5 Extended
/dev/sda5 417753 2522204 1052226 82 Linux swap / Solaris
Nesse exemplo, o disco está disponível no dispositivo /dev/sda. E diversas partições, nesse disco, estão montadas; bem como: sda1, sda2 e consecutivamente. Caso tenha mais discos, ou pendrive, na máquina, será exibido outros dispositivos; tais como: /dev/sdb /dev/sdf.
Os comandos mostrados a seguir são muito poderosos e manipulam dados importantes. Portanto, caso não tenha certeza do que está fazendo, recomendo usar um ambiente virtual (Virtualbox, por exemplo) para testar cada comando. Caso contrário, você poderá perder todos os seus dados. E, sempre realize cópias de segurança !! 😉
1- Backup de todo o disco rígido para uma outra unidade
– 'if=/dev/sda' representa o disco de origem a ser copiado;
– 'of=/dev/sdb' representa o disco de destino que vai receber a cópia;
– 'bs=4096' representa o tamanho do bloco (número de bytes a serem lidos/gravados de cada vez).
– conv=noerror,sync representa o parâmetro de conversão. A opção 'noerror' permite que a ferramenta continue copiando os dados mesmo que encontre erros. E a opção 'sync' permite usar operações de Entrada/Saída sincronizadas.
O comando acima irá copiar todos os dados do disco /dev/sda para /dev/sdb. Como o comando dd é de baixo nível, disponível como utilitário do kernel Linux, ele "não sabe" nada sobre o sistema de arquivos ou partições; ele "apenas copiará tudo" de /dev/sda para /dev/sdb. Assim, esse processo é conhecido como clonagem de disco, pois preserva os mesmos dados e partições do disco de origem.
2- Criação de uma imagem do disco
dd if=/dev/sda of=/tmp/sda disk.img
– 'of=/tmp/sda disk.img' representa o aquivo de imagem, salvo na pasta /tmp, que receberá a cópia do disco de origem.
Outra opção interessante, é fazer backup de um disco diretamente para um arquivo de imagem. É vantajoso caso não tenha outro disco disponível, de igual tamanho, para receber a cópia dos dados (como no exemplo anterior). Além disso, é mais rápido do que copiar os dados diretamente para o outro disco. Inclusive, tendo a imagem do disco, a restauração dos dados fica muito mais fácil.
Outra forma, é comprimir os dados na imagem:
Para restaurar esses dados, contidos na imagem, execute:
Já para dados comprimidos, execute:
3- Fazer backup da MBR (Master Boot Record)
A MBR é o setor de inicialização que guarda o carregador de inicialização do computador, por exemplo o GRUB. Se a MBR corromper, não será possível inicializar o Linux. A partição MBR contém 512 bytes de informação da estrutura organizacional do disco:
– 446 bytes -> Bootstrap;
– 64 bytes -> Partiont Table e;
– 2 bytes -> Signature
– if=/dev/sda representa o disco de origem;
– of=/tmp/backup-sda.mbr representa a pasta de destino e arquivo de destino;
– bs=512 e count=1 representam o tamanho do disco de origem a ser copiado (512 Bytes – tamanho da MBR) e quantidade de blocos a ser copiado.
Finalizando, copie o arquivo /tmp/backup-sda.mbr para um pendrive; por exemplo 😉
Por fim, para restaurar a MBR, execute:
dd if=/tmp/backup-sda.mbr of=/dev/sda
4- Criar pendrive bootável
Uma maneira alternativa para criação de pendrive bootavel, é usar o dd. Basicamente, ele converte e copia um arquivo. Nesse caso, ele fará isso com uma imagem (.iso ou .img) para dentro do pendrive. Basta executar o comando:
Dê preferência por um pendrive vazio ou sem dados importantes, pois esse processo irá apagar todo o conteúdo do dispositivo!
dd if=/home/ricardo/imagem_iso_ou_img of=/dev/sdb bs=4M;sync
– if=/home/ricardo/imagem_iso_ou_img representa o caminho completo do arquivo de imagem ISO ou IMG;
– of=/dev/sdb representa o dispositivo de destino, no caso o pendrive;
– bs=4M representa o tamanho de cada bloco a ser copiado (4 Mbytes).
O comando dd converterá a imagem ISO, da sua distribuição Linux, para o formato de disco; salvando seus dados no dispositivo de destino, no caso o pendrive.
5- Criar arquivos com tamanho pré fixado
Por exemplo, para criar um arquivo de tamanho, fixo desejado, de 10MB (por exemplo), execute:
dd if=/dev/zero of=arquivo bs=10485760 count=1
– if=/dev/zero representa o dispositivo de valores nulos;
– of=arquivo representa o arquivo de destino a ser gerado;
– bs=10485760 representa o tamanho do bloco a ser criado. No caso '10485760' bytes representam 10 MB (10*1024*1024).
– count=1 representa o número de iterações a serem realizadas. No caso uma iteração com tamanho de bloco '10485760' = 10 MB.
Assim, este comando cria um arquivo "vazio" de 10MB. Isso é útil para criar arquivos de qualquer tamanho, usados para testes de desempenho de leitura/escrita em disco; por exemplo.
6- Apagar dados definitivamente de um disco rígido
Você pode precisar limpar o disco rígido para eliminar erros de partição, instalações mal sucedidas ou por privacidade. Existem duas opções possíveis com o comando dd.
Primeira, preencher os setores do disco com valores zeros (pode demorar um pouco, já que é feito byte a byte de valor 0):
Ou, para garantir que nenhum dado poderá ser recuperado, você deve preencher os setores do disco com dados aleatórios ao invés de zeros (isso vai levar ainda mais do que o primeiro exemplo):
7- Recuperar dados de um disco defeituoso para uma imagem ou outra mídia de armazenamento
No caso de uma falha grave no hardware do HDD, recomendo você fazer uma cópia de todos os dados possíveis (que ainda estão íntegros) para uma outra unidade de armazenamento (HDD externo ou pendrive). A ferramenta dd pode fazer isso sem complicações – ela efetua cópias de baixo nível, copiando byte a byte a informação, da origem ao destino.
Em vez de copiar para outro disco, diretamente, você pode gerar um arquivo de imagem. Basta executar:
dd if=/dev/sda of=/tmp/sda disk.img bs=4k conv=noerror,sync
Por fim, caso esteja com problemas no seu disco, recomendo que veja aqui como tentar solucionar problemas encontrados em um disco rígido usando o Linux.
8- Converter letras minúsculas para maiúsculas ou vice-versa
Com o comando dd você pode converter todo o conteúdo de texto de determinado arquivo de minúsculas para maiúsculas ou vice-versa.
Minúsculas para maiúsculas:
dd if=arquivo1 of=arquivo2 conv=ucase
Maiúsculas para minúsculas para m:
8- Teste simples de sobrecarga de memória e CPU
524288000 bytes (524 MB, 500 MiB) copied, 0,133798 s, 3,9 GB/s
O comando acima irá gerar, virtualmente, blocos com valores zeros (if=/dev/zero) com tamanho de 500 MB (bs=500M) durante uma iteração (repetição) (count=1); sem persistir os dados (of=/dev/null).
Isso é útil para medir apenas a memória e a velocidade do barramento. Além disso, de certo modo, implicitamente, realizará "benchmarks" para saber o quão rápido seu sistema operacional pode alocar grandes pedaços de memória. No entanto, atente-se para o tamanho usado; pois seu computador poderá travar se não tiver 500 MB de RAM disponível.
9- Adicionar uma área de swap sem precisar criar uma nova partição
No Linux é comum usar uma partição de um disco rígido para 'swap'. No entanto, desde do kernel 2.6, os arquivos de swap são tão rápidos quanto as partições de swap. Assim, você precisa pode usar o comando dd para criar o arquivo de swap. E, posteriormente, usar a ferramenta mkswap para configurar uma nova área de swap no Linux.
Sistema de arquivos Btrfs não suporta arquivos de swap.
dd if=/dev/zero of=/swap2 bs=1024 count=524288
O comando anterior irá criar um arquivo de swap com tamanho de 512MB.
– if=/dev/zero representa os dados de origem (vazios) para criar o arquivo de swap.
– of=/swap2 representa o arquivo de swap.
– bs=1024 representa o tamanho dos blocos a serem criados.
– count=524288 representa o número de iterações que o bloco de tamanho 1024 será realizado (1024 * 524288 = 512MB).
Os passos seguintes servem para continuar o processo de criação da área de swap:
Aplicar permissões de root
chown root:root /swap2
chmod 0600 /swap2
Tornar arquivo de swap
Ativar área de swap
Por fim, atualizar o fstab para evitar que, quando o computador for reiniciado, as configurações não sejam perdidas: