Qual é a diferença entre esses dois comandos dd?


23

Qual é a diferença entre dois ddcomandos que têm valores bse countvalores diferentes , desde que se multipliquem no mesmo? Por exemplo:

  1. dd if=/dev/random of=aa bs=1G count=2
  2. dd if=/dev/random of=aa bs=2G count=1

4
Ambos os comandos levarão séculos. Use urandom se precisar de números aleatórios. Use zero se você precisar apenas de uma entrada rápida de algo.
Nils

Respostas:


26

No que diz respeito ao resultado final, eles farão o mesmo. A diferença está em como ddos dados seriam processados. E, na verdade, os dois exemplos são bastante extremos nesse sentido: o bsparâmetro informa ddquantos dados devem ser armazenados em buffer na memória antes de gerá-los.

Portanto, essencialmente, o primeiro comando tentaria ler 2 GB em dois blocos de 1 GB, e o último tentaria ler 2 GB inteiros de uma só vez e depois enviá-lo para o aaarquivo.


17

O resultado será o mesmo, mas no primeiro caso ddgravará dois blocos de 1 GB enquanto no segundo bloco de 2 GB. A diferença é que ddmantém o bloco copiado na memória. Você precisará de 1 GB de RAM no primeiro caso e 2 GB no segundo.

Na minha opinião, não há necessidade de usar blocos tão grandes. Você pode fazer alguns testes, mas no meu caso eu alcanço uma velocidade maior com blocos muito menores (<1 MB)


9

O primeiro ocupa 1G de memória, preenche-o com os dados do arquivo de entrada e o imprime duas vezes.

O segundo ocupa 2G de memória, preenche-o com dados do arquivo de entrada e gera-o.


2

O tamanho do bloco usado deve corresponder às melhores configurações de velocidade para o dispositivo de origem e destino.

Você pode ver melhor a diferença se tentar copiar um dispositivo LV. O uso de tamanho BS muito pequeno interromperá o processo de leitura desnecessário. O uso de um tamanho BS muito grande levará a longas esperas durante a gravação.

Como os LVs padrão consistem normalmente em blocos de 4 MB, que também são de bom tamanho para acesso ao disco físico, eu uso bs = 4M para eles.

Tente experimentar 16K ou 256M - você notará a diferença - e observe o indicador de disco durante a cópia ...


As penalidades para tamanhos de bloco pequenos ou grandes são um pouco compensadas pelo cache realizado pelo kernel. Veja aqui um mini-benchmark.
Gilles 'SO- stop be evil'

@Gilles Não me lembro dos números nos meus testes, mas eles foram muito mais dramáticos que os seus. Qual configuração física do disco rígido você usou no seu teste? O meu estava em um RAID 5 de hardware distribuído em 5 discos (SAS 15k) com 128 KB. tamanho da listra.
Nils

Discos SATA, sem RAID, caso contrário, máquina ociosa. Não me lembro das especificações exatas.
Gilles 'SO- stop be evil'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.