Como Usar o Comando dd no Linux

Imagem em Destaque do Guia dd

dd é um dos comandos mais importantes no Linux, usado principalmente para fazer backup de discos rígidos e partições. Quando utilizado corretamente, o dd pode ser uma ferramenta poderosa para escrever dados de uma partição para outra e realizar diferentes tarefas com arquivos. Aqui mostramos como utilizar o comando dd de forma eficaz.

Índice

  • A História do dd
  • Operandos Básicos
  • Criando uma Imagem de Disco
  • Salvando uma Imagem de Disco em uma Partição
  • Criando uma Imagem de Disco Comprimida
  • Especificando um Tamanho de Bloco
  • Limpando um Disco Rígido
  • Criando um Pen Drive Bootável
  • Clonando Partições Específicas usando dd
  • Dumpando o Conteúdo de um CD usando dd
  • Gravando o Dump ISO em CD
  • Perguntas Frequentes

Leia também: 5 Distros Arch Linux que São Mais Fáceis de Instalar e Usar

A História do dd

O comando foi originalmente desenvolvido nos Laboratórios Bell da AT&T na década de 1970 por um cientista da computação chamado Ken Thompson. Foi desenvolvido para sistemas baseados em Unix e recebeu um nome que foi escolhido como uma referência a uma declaração encontrada na Linguagem de Controle de Trabalho da IBM, que era chamada de “DD.” Pode-se notar que a sintaxe do comando se assemelha a uma declaração na Linguagem de Controle de Trabalho.

O comando foi originalmente projetado para ser uma utilidade para converter ASCII em EBCDIC e vice-versa. Foi integrado pela primeira vez a uma versão do Unix em 1974, com o lançamento da 5ª Edição do sistema operacional.

dd tem sido chamado de “destruidor de disco” como uma piada na comunidade Unix devido à sua capacidade de destruir dados em discos rígidos quando usado de forma inadequada.

Leia também: Como Criptografar Seus Arquivos na Nuvem Usando Rclone

Operandos Básicos

Agora que você sabe um pouco sobre o histórico do comando e suas habilidades destrutivas quando usado incorretamente, é hora de aprender como tirar proveito de tudo o que ele oferece aos usuários de diferentes distribuições Linux.

Primeiro, veja o manual usando a flag --help:

dd --help

Dd Guia 01 Impressão de Ajuda do dd

Existem dois operandos para o comando que são mais comumente utilizados. Eles são if e of, que significam “arquivo de entrada” e “arquivo de saída”, respectivamente. O operando if é usado para representar a localização de origem, enquanto o operando of é usado para representar a localização onde você pretende salvar os dados da localização de entrada.

dd if= of=

As localizações de origem e saída mais comuns incluem discos rígidos, partições e imagens de disco.

Antes de usar o comando, pode ser útil usar a utilidade fdisk para visualizar as partições em seu sistema. Isso pode ser facilmente feito usando a flag -l do comando:

sudo fdisk -l

Dd Guia 02 Listar Partições Fdisk

Leia também: 4 Maneiras de Clonar um Disco Rígido Inteiro no Linux

Neste caso, if é usado para representar o disco “dev/sda”, e of representa o disco “dev/sdb”, onde os dados de “dev/sda” serão salvos:

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

Dd Guia 03 Dispositivo Duplicado

Criando uma Imagem de Disco

Um dos melhores casos de uso para o comando é criar imagens de disco no formato de arquivo “.img”. Isso é extremamente útil para fazer backup de dados em seu sistema baseado em Linux e provavelmente é a maneira mais rápida e fácil de fazer backup de um disco rígido inteiro.

A lógica aqui é principalmente a mesma neste caso, com o operando if representando o disco “dev/sda” e o operando of representando um arquivo “.img”, onde os dados do disco rígido serão salvos:

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

Dd Guia 04 Dump de Partição para Img

Leia também: O Guia Definitivo para os Comandos Apt e Apt-Get

Salvando uma Imagem de Disco em uma Partição

Criar uma imagem de disco com o comando é bastante simples, mas o mesmo vale para a versão reversa desse processo.

Neste cenário, nosso arquivo de imagem de disco está atuando como o arquivo de entrada, e nossa nova partição está atuando como o arquivo de saída. A utilidade está salvando os dados de nossa imagem de disco em nossa partição “dev/sdb”:

dd if=/tmp/image.img of=/dev/sdb

Dd Guia 05 Escrever Img no Dispositivo

Leia também: Como Usar o Comando ps no Linux para Matar Processos

Criando uma Imagem de Disco Comprimida

Se você criar uma imagem de disco de um disco rígido de tamanho completo, pode imaginar que o tamanho do arquivo da imagem de disco final provavelmente será bastante grande. Por essa razão, a utilidade dd tem um recurso que cria imagens de disco comprimidas.

Uma imagem de disco comprimida pode ser criada usando o comando pipe |. Neste caso, ele é usado para pegar o conteúdo do arquivo de entrada e executar o comando gzip com uma flag -c, com o conteúdo sendo empacotado em um arquivo “.gz”:

dd if=/dev/sda | gzip -c > /tmp/image.gz

Dd Guia 06 Criar Dump Comprimido

Leia também: Como Usar cURL para Transferência de Dados na Linha de Comando e Mais

Especificando um Tamanho de Bloco

Você também pode brincar com a velocidade da operação do comando dd. Isso pode ser realizado usando o operando bs, que é usado para representar o tamanho do bloco. O tamanho do bloco representa o número de bytes que o dd copia para o arquivo de saída em uma única instância. Ele é representado usando múltiplos de 1024 bytes, e o valor padrão é definido como 512 bytes. Quanto maior o tamanho do bloco, mais rápido os dados serão salvos no arquivo de saída.

Neste caso, estamos definindo o tamanho do bloco para 2048:

dd if=/dev/sda of=/tmp/image.img bs=2048

O tamanho do bloco também pode ser especificado em kilobytes:

dd if=/dev/sda of=/tmp/image.img bs=2K

Dd Guia 07 Modificar Tamanho do Bloco do Img Dump

Leia também: Como Usar o Comando lsof no Linux para Listar Arquivos Abertos

Limpando um Disco Rígido

dd também pode ser usado para limpar seu disco rígido. Isso é realizado lendo zeros ou caracteres aleatórios de “dev/zero” ou “dev/urandom” e salvando-os no disco rígido/partição, o que sobrescreve os dados nele. Isso é extremamente útil quando você deseja ter certeza de que seus dados não podem ser facilmente recuperados após ter vendido ou descartado seu disco rígido.

Sobrescrevendo um disco rígido usando zeros:

dd if=/dev/zero of=/dev/sdb

Dd Guia 08 Zeros no Disco

Você também pode sobrescrever o dispositivo usando caracteres aleatórios:

dd if=/dev/urandom of=/dev/sdb

Dd Guia 09 Disco Aleatório

Leia também: Como Executar Comandos Bash em Segundo Plano no Linux

Criando um Pen Drive Bootável

A criação de pen drives USB bootáveis usando arquivos “.iso” com o comando é simples:

dd if=os.iso of=

Dd Guia 10 Escrever Imagem no Dispositivo

Clonando Partições Específicas usando dd

Outro uso brilhante para o dd é clonar partições ativas em seu sistema Linux. Ao contrário de um arquivo IMG, a clonagem permite que você crie uma cópia exata de uma partição específica e a utilize imediatamente. Isso pode ser útil se você tiver uma configuração de múltiplos discos e quiser criar partições redundantes para seu sistema.

Para clonar a partição de “dev/sda4” para “dev/sdd1”.

dd if=/dev/sda4 of=/dev/sdb1 conv=noerror,sync

O parâmetro conv permite que você inclua opções adicionais para modificar o comportamento do dd. Isso pode ser tão simples quanto converter um nome de arquivo para maiúsculas ou algo complexo, como mudar a propriedade de um bloco. Neste caso, estou usando noerror e sync:

  • A opção “noerror” diz ao dd para continuar copiando através de um arquivo de dispositivo, mesmo que ele relate erros de dispositivo. Isso pode ser útil se o dispositivo onde sua partição reside já estiver com defeito, pois “noerror” garante que o dd copiará todos os dados recuperáveis nessa partição.
  • A opção “sync” diz ao dd para preencher cada bloco de dados de entrada no buffer de cópia. O que isso significa é que o dd garantirá que cada bit de dado que ele pode copiar seja exatamente o mesmo entre a origem e o destino. Isso é para garantir a integridade dos dados da partição que você está clonando.

Dd Guia 11 Clonagem Estrita de Partição

Leia também: Como Usar o Comando lp no Linux para Imprimir Arquivos do Terminal

Dumpando o Conteúdo de um CD usando dd

Também é possível usar o dd como uma ferramenta de dump para conteúdos de disco. Semelhante a um arquivo IMG, você pode fazer isso usando uma unidade de disco como entrada e a extensão .ISO como saída. Considere o seguinte exemplo:

dd if=/dev/cdrom of=/tmp/dump.iso conv=noerror,sync

Este comando dirá ao dd para carregar o dispositivo CD-ROM e copiar seu conteúdo para um arquivo ISO.

Dd Guia 12 Dump do Disco CD

Uma vez concluído, você pode usar o comando file para verificar se o arquivo dumpado é uma imagem ISO 9660:

file /tmp/dump.iso

Gravando o Dump ISO em CD

Em seguida, você pode usar o dd para criar duplicatas do arquivo ISO que você acabou de fazer. Para fazer isso, você precisa inserir um disco em branco na sua unidade e usar “dev/cdrom” como arquivo de saída do dd. Com isso, você pode então executar o seguinte comando para gravar corretamente o arquivo ISO no disco:

dd if=/tmp/image.iso of=/dev/cdrom obs=32k seek=0

Este comando não tenta usar qualquer bypass de erro ou verificações de integridade. Em vez disso, ele define duas opções que são específicas para gravação em CD-ROMs:

  • A opção “obs” define o tamanho dos blocos que o dd vai escrever no disco. Neste caso, o comando usa 32 kilobytes como base para transferências de mídia óptica.
  • Por outro lado, a opção “seek” diz ao dd para definir o início da transferência para um bloco de dados específico. Para transferir corretamente para um CD-ROM, é importante definir isso como 0 para que o dd escreva imediatamente no primeiro setor do disco.

Dd Guia 13 Gravar Disco CD

Leia também: 8 Prompts Bash Úteis e Interessantes

Perguntas Frequentes

É possível ver o progresso de uma operação dd?

Sim! É incrivelmente fácil olhar para o progresso de uma operação dd. Para fazer isso, tudo o que você precisa fazer é incluir o parâmetro status no final do seu comando dd:

dd if=/dev/sda4 of=/dev/sdd1 conv=noerror,sync status=progress

A opção “progress” diz ao dd para imprimir os blocos que ele está copiando atualmente na saída padrão, o que efetivamente permite que você veja o progresso do comando. Além da opção “progress”, o parâmetro status também aceita dois valores adicionais:

  • Noxfer: O valor “noxfer” é semelhante ao “progress”, mas não imprime as informações gerais de transferência no final do comando. Isso pode ser útil se você estiver usando comandos dd como parte de um grande pipe UNIX.
  • None: O valor “none” diz ao dd para não imprimir nenhuma informação, exceto erros, enquanto está em execução. Isso é útil se você estiver executando tarefas programadas de dd, como criar arquivos IMG de backup para partições ativas atualmente.

É aceitável sempre definir um tamanho de bloco alto para acelerar as transferências?

Não. Embora definir um tamanho de bloco alto certamente aumente a taxa de transferência do dd, fazer isso não garantirá que o dispositivo para o qual você está escrevendo inicialize corretamente. Por exemplo, definir um tamanho de bloco alto para mídias ópticas, como um CD-ROM ou um DVD-ROM, pode levar a discos ilegíveis quando reproduzidos em um tocador de disco.

Uma boa regra é usar tamanhos de bloco altos apenas ao fazer dump de mídias como discos e pen drives. Além disso, também é uma boa prática definir o tamanho máximo do bloco para 2048 kilobytes apenas. Isso garante que você ainda possa colocar de volta o conteúdo de um disco em um CD ou DVD.

Tentei criar um pen drive bootável, mas ele não inicializou. O dd não está funcionando?

Não! A razão mais provável pela qual ele não inicializou é que o arquivo que o dd copiou para o pen drive não é um arquivo inicializável. Por exemplo, gravar um instalador de CD em um pen drive não definirá as flags apropriadas para torná-lo inicializável.

Uma maneira de garantir que ele seja inicializável é verificar suas propriedades através do programa file. Por exemplo:

file /Downloads/ubuntu-21.10.iso

A partir daí, você deve olhar para as propriedades que são impressas na saída padrão. Um arquivo inicializável deve ser uma imagem de disco ou um arquivo híbrido ISO.

Crédito da Imagem: Unsplash