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
Rochoso
fonte
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
4
Use /dev/urandom, não /dev/random. Veja security.stackexchange.com/questions/3936/... , security.stackexchange.com/questions/3259/... , ...
Gilles 'stop SO sendo mal'

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.

rozcietrzewiacz
fonte
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)

Matteo
fonte
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.

golimar
fonte
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 ...

Nils
fonte
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'