Questão Entendendo o comando dd no Linux


Alguém pode me explicar o que este comando faz:

dd if=/dev/zero of=10MBfile1 count=10000 bs=1024

que produz esta saída:

10000+0 records in
10000+0 records out
10240000 bytes (10 MB) copied, 0.146924 s, 69.7 MB/s

Eu não poderia fazer nenhum sentido disso, então alguém poderia me explicar o que está acontecendo e o que acontece. Obrigado.


2


origem


Dd de Wikipedia Também o primeiro resultado do google para O que é o dd no linux?. - QuyNguyen2013


Respostas:


  • copia de / dev / zero, que é um arquivo especial que é um fluxo constante de zeros.
  • copia isso para um arquivo no disco, chamado '10MBfile1'
  • ele faz isso em blocos (pense em 'pedaços') de 1024 bytes,
  • e faz 10000 blocos, o que é igual a 10MB.

Então, em resumo, faz um arquivo no disco de 10MB que é preenchido com nada além de zeros no disco.

Por exemplo:

dd if = / dev / zero de = contagem blah = 10 bs = 10

Cria um arquivo semelhante chamado 'blah ;, mas apenas 100 bytes de tamanho e ...

$ hexdump blah
0000000 0000 0000 0000 0000 0000 0000 0000
0000060 0000 0000

Mostra que está vazio.


3





o dd man page, pelo menos no meu sistema Debian Linux atual, diz para a sinopse "copiar e converter um arquivo". Isso pode ser um pouco confuso.

ddO propósito original era converter um arquivo do formato IBM EBCDIC em formato ASCII. Ele ainda faz isso se você especificar as opções corretas, mas a menos que você tenha um monte de arquivos dos mainframes da IBM espalhados, você não vai usá-los assim muito.

dd simplesmente copia bytes brutos do arquivo de entrada (if=) para o ficheiro de saída (of=) O número de bytes que irá copiar será bs= vezes count=.

O poder (potencialmente muito destrutivo) de dd é que ele não se importa com os arquivos especificados são arquivos reais, partições de disco bruto (/dev/sda1), o próprio dispositivo de disco bruto (/dev/sda), entrada ou saída padrão, uma unidade de fita, um dispositivo flash MTD, o CMOS do seu sistema (/dev/nvram), sua memória de vídeo gráfica (/dev/fb0), memória do kernel (/dev/kmem), etc. Apenas faz isso.

Portanto, como a tabela de partição do seu disco rígido reside no bloco 0 do seu disco rígido e o bloco tem 512 bytes, isso fará backup da tabela de partições do seu disco rígido (e do primeiro bootloader) em um arquivo:

# dd if=/dev/sda of=sda.sector0.bin bs=512 count=1

Se você quiser restaurá-lo por algum motivo, basta inverter o if= e of= parâmetros.

Se você não especificar count=, continuará até o final do dispositivo. Isto irá escrever zeros em todo o seu disco rígido:

# dd if=/dev/zero of=/dev/sda

Por isso tem cuidado.


2