Alguns exemplos de que o comando dd pode ser considerado umas das ferramentas mais versáteis do Linux

comando-dd-header

O comando dd é uma ferramenta de linha de comando presente, nativamente, nos sistemas Linux. Seu objetivo principal é converter e copiar arquivos. Por outro lado, existem diversas opções que dão outras possibilidades interessantes para esse comando; bem como: criar imagens de discos rígidos (HDD), arquivos de swap, recuperação de dados, formatação de mídias de armazenamento e outras.

Comando dd

Ferramenta GNU que faz parte do pacote coreutils, o comando dd (“data duplicator”) é usado para copiar e converter dados. Entretanto, pode ser usado para outras situações; por isso é considerado um poderoso utilitário de baixo nível do Linux. Entre as diversas possibilidades, destaco:

• Fazer backup e restauração de todo o disco rígido ou partição;
• Fazer backup da MBR (Master Boot Record);
• Copiar e converter formato de fita magnética, entre outros formatos como: ASCII e EBCDIC. Também pode converter letras minúsculas para maiúsculas (e vice-versa), por exemplo;
• Criar arquivos para fazer imagens de inicialização. Pendrive bootável, por exemplo;
• Criar arquivos com tamanho pré fixado;
• Recuperar dados de um disco defeituoso para uma imagem ou outra mídia de armazenamento;
• Fazer alguns testes simples sobre a velocidade do disco ou CPU;

Por ser uma ferramenta muito poderosa, somente o usuário root (ou sudo) pode executar este comando. Além disso, é preciso ter muito cuidado ao usá-lo; pois com um uso inapropriado poderá causar perda de dados importantes. Assim, em outras casos, a ferramenta dd, poderá ser considerada como “destruidora de dados” #ficadica

Estrutura


comando-dd

Onde, ‘if’ significa o arquivo de entrada e o ‘of’ o arquivo de saída.

Um exemplo de uso seria o seguinte comando:

dd if=/dev/sda of=/dev/sdb

Onde, é feita uma cópia do conteúdo da partição /dev/sda para a partição /dev/sdb.

Contudo, o foco desse artigo é mostrar as diversas maneiras para se usar o comando dd!

Mas, antes…

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:

fdisk -l

Algo similar a isso, você verá:

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders, total 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes

Device Boot Start End Blocks Id System
/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.

CUIDADO
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

dd if=/dev/sda of=/dev/sdb bs=4096 conv=noerror,sync

Onde,

– ‘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

Onde,

– ‘if=/dev/sda‘ representa o disco de origem a ser copiado;
– ‘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:

dd if=/dev/sda | gzip >/tmp/sdadisk.img.gz

Para restaurar esses dados, contidos na imagem, execute:

dd if=/tmp/sdadisk.img of=/dev/sda

Já para dados comprimidos, execute:

gzip –dc /tmp/sdadisk.img.gz | dd of=/dev/sda

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

Para fazer o backup, execute no terminal o comando (como root):

dd if=/dev/sda of=/tmp/backup-sda.mbr bs=512 count=1

Onde,

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:

IMPORTANTE
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

Onde,

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

Onde,

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):

dd if=/dev/zero of=/dev/sda bs=1M

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):

dd if=/dev/urandom of=/dev/sda bs=1M

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.

Para suprimir os erros ignoráveis no momento da transferência dos dados, execute:

dd if=/dev/sda of=/dev/sdb bs=4k conv=noerror,sync

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:

dd if=arquivo1 of=arquivo2 conv=lcase

8- Teste simples de sobrecarga de memória e CPU

dd if=/dev/zero of=/dev/null bs=500M count=1

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.

AVISO
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.

Onde,

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

mkswap /swap2

Ativar área de swap

swapon /swap2

Por fim, atualizar o fstab para evitar que, quando o computador for reiniciado, as configurações não sejam perdidas:

nano /etc/fstab

Adicionar no final do arquivo:

/swap2 none swap defaults 0 0

Mais informações AQUI

Ricardo Ferreira

Ricardo Ferreira

Fundador do Linux Descomplicado - LD.

Sempre em busca de novos conhecimentos, preza por conteúdo de qualidade e auto-explicativo. Por isso, persiste em criar um site com artigos relevantes para todos os leitores do Linux Descomplicado!
Ricardo Ferreira

Comentários

comentários


VOCÊ TAMBÉM PODERÁ LER...

  • naomesiga,i’m lostoo

    Muito bom! Obrigado

  • Ewerton Silva

    Boas dicas. Obrigado.