Com blocos maiores, existe o risco de obter leituras incompletas. Isso também acontece muito ao ler de um pipe, em vez de um dispositivo de bloco.
Se você espera receber um determinado tamanho ( count
* bs
), também precisa fornecer iflag=fullblock
.
Pode não ser necessário para bs=1M
ou menor, mas ainda é recomendado de qualquer forma.
dd
também tentará mostrar quantas leituras incompletas foram obtidas. Copia n+m
blocos, completos e incompletos. Ao copiar arquivos que não são múltiplos de blocos, é normal que o último bloco esteja incompleto.
Exemplo:
$ dd status=progress if=/dev/urandom of=/dev/null bs=100M count=20
dd: warning: partial read (33554431 bytes); suggest iflag=fullblock
536870896 bytes (537 MB, 512 MiB) copied, 2 s, 254 MB/s
0+20 records in
0+20 records out
671088620 bytes (671 MB, 640 MiB) copied, 2.64391 s, 254 MB/s
Nesse caso, ele recebeu apenas leituras incompletas e não um único bloco completo de 100M. Obviamente / dev / urandom não está disposto a servir tantos dados em uma única leitura. Minha versão do dd ainda diz para você usar iflag=fullbock
diretamente.
Com o fullblock tudo está OK:
$ dd status=progress if=/dev/urandom of=/dev/null bs=100M count=20 iflag=fullblock
2097152000 bytes (2.1 GB, 2.0 GiB) copied, 8 s, 255 MB/s
20+0 records in
20+0 records out
2097152000 bytes (2.1 GB, 2.0 GiB) copied, 8.22914 s, 255 MB/s
Leva mais tempo porque, na verdade, copia mais que o dobro da quantidade de dados.