Essa deve ser a maneira mais rápida de fazer isso:
SEEK=$SIZE-1
dd if=/dev/zero of=outfile bs=1 seek=$SEEK count=1
Caso contrário, basta escrever um programa C ou perl rápido e sujo que procura a posição exata e grava um único byte. Isso é muito mais rápido do que realmente despejar dados nos blocos.
Se você quer evitar arquivos esparsos, em seguida, no Linux (e possivelmente outros sistemas), você pode usar fallocate -l <length>
a partir util-linux
.
Se não estiver disponível, e você tiver um sistema compatível com POSIX, poderá escrever um programa rápido e sujo usando a chamada de biblioteca posix_fallocate (). posix_fallocate garante a alocação do intervalo especificado, para que você não fique com um disco cheio no uso subsequente do intervalo se ele retornar com êxito