A diferença está na quantidade de dados lidos / gravados de uma só vez .
Programas raramente trabalham com fluxos constantes verdadeiros - eles geralmente lêem e escrevem dados em partes: lêem 1 kB de entrada, escrevem 1 kB para a saída, lêem 1 kB da entrada, escrevem ... Então o bs=
( bs=16G
, ele tentará ler um bloco de 16 gigabytes na RAM e, em seguida, gravá-lo imediatamente; você provavelmente ficará sem memória RAM.
Também depende da mídia de armazenamento. Discos não são streams e não são endereçados por bytes, sejam eles magnéticos ou baseados em flash - eles permitem somente a leitura de pedaços do tamanho de blocos (onde o tamanho do bloco depende do hardware; muitos discos têm 512 bytes ou 4 kB). Se o sistema operacional tentar ler 100 bytes, o disco terá que ler todo o bloco de qualquer maneira e, em seguida, descartar os dados. (É ainda pior quando se escreve: não tenho certeza com discos magnéticos, mas pelo menos com flash, se você escrever 100 bytes o disco tem que ler o bloco inteiro, atualizá-lo na memória, então < Em seguida, o tamanho do bloco usado por dd
também é importante - será muito mais rápido se o tamanho de bloco usado por dd
for um múltiplo exato do tamanho do bloco do disco. (Supondo que não haja problemas com o alinhamento da partição, é claro).