respondendo aos comentários: conv=notrunc
torna dd
não truncado, mas não o leva até o fim. (Ele deixa de fora O_TRUNC
, mas não adiciona O_APPEND
na chamada do sistema open(2)
).
Respondendo a pergunta: Se você insistir em usar dd
em vez de cat
, então pegue o shell para abrir o arquivo de saída para acrescentar, e escreva dd em seu stdout.
dd if=src bs=128k count=$count of=/dev/stdout >> dest 2>> log
Além disso, se você estiver tentando fragmentar sua unidade, poderá fazer um monte de fallocate(1)
alocações para usar espaço e começar a usar o dd quando a unidade estiver quase cheia. O programa fallocate do util-linux é um simples front-end para a chamada do sistema fallocate(2)
.
xfs, por exemplo, detectará o padrão aberto, anexado e deixará seu espaço espectralmente pré-alocado além do EOF alocado por alguns segundos após o fechamento. Portanto, no XFS, um loop de anexação ao mesmo arquivo repetidamente não produzirá tanta fragmentação quanto a gravação de muitos arquivos pequenos.
Você está em um sistema embarcado, então eu suponho que você não esteja usando o xfs. Nesse caso, você ainda poderá ver menos fragmentação do seu close / reabrir / gravar mais do que você esperaria, com um sistema de arquivos decentemente inteligente. Talvez sincronizar entre cada gravação, esperar que o FS aloque e escreva todos os seus dados, antes de informar que há mais novidades.