Como o comando dd funciona no linux com exemplos

Como o comando dd funciona no linux com exemplos

DD é um utilitário muito poderoso e útil disponível em sistemas operacionais UNIX e UNIX. Conforme declarado em seu manual, seu objetivo é converter e copiar arquivos. Em sistemas operacionais do tipo UNIX e UNIX, como o Linux, quase tudo é tratado como um arquivo, até os dispositivos de bloqueio: isso torna o DD útil, entre as outras coisas, para clonar discos ou limpar dados. O dd O utilitário está disponível fora da caixa, mesmo na instalação mais mínima de todas as distribuições. Neste tutorial, veremos como usá -lo e como podemos modificar seu comportamento usando algumas das opções mais usadas para facilitar seu trabalho de administração do sistema Linux.

Neste tutorial, você aprenderá:

  • Como usar DD
  • Como modificar o comportamento do programa usando algumas das opções mais usadas


Requisitos de software e convenções usadas

Requisitos de software e convenções de linha de comando Linux
Categoria Requisitos, convenções ou versão de software usada
Sistema Independente da distribuição
Programas Nenhum software especial é necessário para seguir este tutorial, exceto DD
Outro Familiaridade com a interface da linha de comando e redirecionamentos
Convenções # - requer que os comandos Linux sejam executados com privilégios root diretamente como usuário root ou por uso de sudo comando
$ - Requer que os comandos do Linux sejam executados como um usuário não privilegiado regular

Uso básico

A sintaxe básica de dd é muito simples. Por padrão, o programa lê de entrada padrão e escreve para saída padrão. Podemos, no entanto, especificar alternativa entrada e saída arquivos usando respectivamente o se e de Opções da linha de comando. Aqui DD difere da grande maioria dos comandos de shell, pois não usa o padrão --opção ou -o Sintaxe para opções.



Vamos ver um exemplo de uso de DD. Um dos casos de uso mais típicos da concessionária é o backup do registro de bota mestre: o primeiro setor em um legado Mbr sistema particionado. A duração deste setor é geralmente 512 bytes: contém o estágio 1 do Grub Bootloader e a tabela de partição de disco. Suponha que queremos fazer backup do Mbr de /dev /sda disco, tudo o que precisamos fazer é invocar DD com a seguinte sintaxe:

$ sudo dd if =/dev/sda bs = 512 contagem = 1 de = mbr.img

Vamos analisar o comando acima. Antes de tudo, prefixamos a invocação DD real com o comando sudo, a fim de executar o comando com privilégios administrativos. Isso é necessário para acessar o /Dev/SDA Bloquear dispositivo. Em seguida, invocamos DD especificando a fonte de entrada com o se opção e o arquivo de saída com de. Nós também usamos o bs e contar opções para especificar respectivamente a quantidade de dados que devem ser lidos de cada vez ou tamanho do bloco e a quantidade total de blocos para ler. Nesse caso, poderíamos ter omitido o bs opção, já que 512 bytes é o tamanho padrão usado por dd. Se executarmos o comando acima, veremos que ele produz a seguinte saída:

1+0 registros em 1+0 registra 512 bytes copiados, 0.000657177 s, 779 kb/s

A saída acima nos mostra a quantidade de registros lidos e escritos, a quantidade de dados copiados, a quantidade de tempo em que a tarefa foi concluída e a velocidade de transferência. Agora devemos ter um clone do Mbr setor, armazenado no mbr.img arquivo. Obviamente, o sufixo de arquivo não tem significado real no Linux, então o uso do “.img ”um é completamente arbitrário: você pode querer usar“.dd ”para deixar o nome do arquivo refletir o comando que foi usado para criar o arquivo.

No exemplo acima, usamos o bs opção para definir a quantidade de bytes que devem ser lidos e escrever em um momento. Para definir valores separadamente para as duas operações, podemos usar o SII e ob Opções, que definiu, respectivamente, a quantidade de bytes lidos e escritos em um momento.

Pular blocos ao ler e escrever

Há casos em que queremos pular uma certa quantidade de tamanhos de bloco ao ler ou escrever para um arquivo. Nesses casos, temos que usar o pular e procurar Opções, respectivamente: eles são usados ​​para pular os blocos de dados especificados, no início da entrada e no início da saída.

Um exemplo dessa situação é quando queremos fazer backup/restaurar os dados ocultos entre os Mbr e a primeira partição no disco, que geralmente começa no setor 2048, por razões de alinhamento. O 2047 Os setores desta área geralmente contêm, em um legado Mbr Configuração da partição, o estágio 1.5 do carregador de inicialização do Grub. Como podemos instruir o DD a clonar apenas esta área, sem incluir o Mbr? Tudo o que precisamos fazer é usar o pular opção:

$ sudo dd if =/dev/sda de = oculto-data-depois-mbr contagem = 2047 pular = 1

Nesse caso, instruímos o DD a copiar 2047 blocos de 512 bytes do disco /dev /sda a partir do segundo. Na situação oposta, quando queremos restaurar os dados clonados e escrevê -los na mesma zona de disco, queremos usar a opção Seek, que ignora o número especificado de blocos no início da saída:

$ sudo dd if = hidden-data-depois-mbr de =/dev/sda buscando = 1

Nesse caso, instruímos o DD a copiar dados do Hidden-Data-After-MBR e para escrever no /Dev/SDA Block Device a partir do segundo bloco.



Comprimindo os dados lidos por DD

Como já dissemos antes, uma das operações mais comuns realizadas com DD é a clonagem de disco. O comando dd produz um clone perfeito de um disco, pois copia os dispositivos de bloco byte byte, então clonar um disco de 160 GB, produz um backup do mesmo tamanho exatamente. Ao clonar um disco em um arquivo, no entanto, podemos colocar os dados lidos por DD, embora utilitários de compressão como gzip, Para otimizar o resultado e reduzir o tamanho final do arquivo. Digamos, por exemplo, que queremos criar um clone de todo o dispositivo de bloco /dev /SDA, poderíamos escrever:

$ sudo dd if =/dev/sda bs = 1m | gzip -c -9> sda.dd.gz

No exemplo acima, instruímos o DD a ler no dispositivo /dev /sda e também alteramos o tamanho do bloco para 1M, o que pode nos dar melhor desempenho em tal situação. Em seguida, colocamos os dados, processando -os com o gzip programa que invocamos com o -c (abreviatura de --para-stdout) e -9 opção que instrui o programa a usar a compactação máxima disponível. Finalmente, redirecionamos a saída para o “SDA.dd.arquivo gz ”. A propósito, se você quiser aprender mais sobre redirecionamentos Você pode ler nosso artigo sobre o assunto.

Limpando um dispositivo de bloco

Outro caso de uso DD, é a limpeza de um dispositivo. Existem muitas situações em que precisamos executar essa operação: podemos querer vender um disco e verifique se o conteúdo anterior é completamente apagado por razões óbvias de privacidade, ou podemos querer limpar dados antes de configurar a criptografia. No primeiro caso, seria suficiente substituir o disco com Zeros:

$ sudo dd if =/dev/zero bs = 1m de =/dev/sda

O comando acima instrui o DD a ler do dispositivo /dev /zero que fornece caracteres nulos e escrevê -los nos dispositivos até que esteja completamente preenchido.

Antes de configurar uma camada de criptografia em nosso sistema, podemos preencher o disco com dados aleatórios, para renderizar os seus setores que conterão dados indistinguíveis dos vazios e evitarão vazamentos de metadados. Nesse caso, queremos ler dados do /dev/aleatório ou /Dev/Urandom dispositivos:

$ sudo dd if =/dev/urandom bs = 1m de =/dev/sda

Ambos os comandos exigirão uma quantidade significativa de tempo para terminar, dependendo do tamanho e do tipo do dispositivo em questão e a fonte de dados aleatórios usados, /dev/aleatório sendo mais lento (bloqueia até que não coloque ruído ambiental suficiente), mas retornando dados aleatórios de maior qualidade do que /Dev/Urandom.



Dados de conversão

O Conv As opções de DD são usadas para aplicar conversões de dados. As opções devem receber uma lista separada por vírgula de símbolos como argumentos. Aqui alguns dos mais usados:

  • Noerror - isso faz uso DD continua mesmo após o erro de leitura ser encontrado;
  • NOTRUNC - Esta opção instrui o DD a não truncar o arquivo de saída;
  • SYNC - Esta opção tem sentido especialmente quando usado junto com Noerror. Ele instrui o DD a preencher todos os blocos de entrada com nuls.

Um caso típico em que queremos executar DD juntamente com o Conv = Sync, Noerror opção, é quando clonar um disco que contém setores danificados. Nesse caso o Noerror a opção fará com que o DD continue funcionando mesmo que um setor não possa ser lido com sucesso, e o sincronizar a opção será feita para que a quantidade de dados não fosse lida por sua substituição por Nuls, para que a duração dos dados seja preservada mesmo que os dados reais sejam perdidos (pois não é possível lê -los).

Conclusões

Neste tutorial, aprendemos a usar o comando dd muito poderoso. Vimos alguns dos casos típicos em que o programa é usado, como a clonagem de disco, e aprendemos a conhecer sua sintaxe e as opções mais importantes que podemos usar para modificar seu comportamento. Como o DD é um utilitário muito poderoso, ele deve ser usado com extrema atenção: apenas alternando o alvo de entrada e saída, pode -se, em algumas situações, destruir completamente dados em um disco.

Tutoriais do Linux relacionados:

  • Coisas para instalar no Ubuntu 20.04
  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Mastering Bash Script Loops
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Como clonar um sistema Linux
  • Mint 20: Melhor que o Ubuntu e o Microsoft Windows?
  • Download do Linux
  • Partição de clone no Linux
  • Loops aninhados em scripts de basquete
  • Como fazer bota dupla kali linux e windows 10