Não use dd com pipes. dd é de baixo nível. É uma interface para as chamadas do sistema read e write .
Quando você faz um dd bs=1024 count=1 , ele faz um read(0, buf, 1024) .
Se read retornar menos dados que 1024 bytes (por exemplo, porque o canal contém apenas 200 bytes no momento), dd não tentará novamente o read para obter os 824 bytes ausentes, ele informará um erro bloco incompleto lido no final (a parte depois de + ). A mesma coisa pode acontecer ao escrever também.
É por isso que é perigoso usar dd em tubos, a menos que você possa garantir que os processos de gravação ou leitura no tubo o façam em proporções proporcionais ao tamanho do bloco e divisores para o tamanho do tubo. que você terá blocos completos.
(echo AAAA; sleep 1; echo BBBBBB) | dd bs=3 > /dev/null
3+2 records in
3+2 records out
Isso não é um problema muito grande aqui, pois estamos apenas escrevendo o que lemos, mas pode ser mais problemático quando, por exemplo, você especificar um count .
O GNU dd tem -iflag fullblock para contornar isso:
$ (echo AAAA; sleep 1; echo BBBBBB) | dd bs=3 iflag=fullblock > /dev/null
4+0 records in
4+0 records out
12 bytes (12 B) copied, 1.00068 s, 0.0 kB/s