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.
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)
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.
/dev/urandom
, não/dev/random
. Veja security.stackexchange.com/questions/3936/... , security.stackexchange.com/questions/3259/... , ...Respostas:
No que diz respeito ao resultado final, eles farão o mesmo. A diferença está em como
dd
os dados seriam processados. E, na verdade, os dois exemplos são bastante extremos nesse sentido: obs
parâmetro informadd
quantos 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
aa
arquivo.fonte
O resultado será o mesmo, mas no primeiro caso
dd
gravará dois blocos de 1 GB enquanto no segundo bloco de 2 GB. A diferença é quedd
manté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)
fonte
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.
fonte
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 ...
fonte