Это должен быть самый быстрый способ сделать это:
SEEK=$SIZE-1
dd if=/dev/zero of=outfile bs=1 seek=$SEEK count=1
В противном случае просто напишите быструю и грязную программу на C или Perl, которая выполняет поиск точной позиции и записывает один байт. Это намного быстрее, чем фактический сброс данных в блоки.
Если вы хотите избежать разреженных файлов, то в Linux (и, возможно, в других системах) вы можете использовать fallocate -l <length>
из util-linux
.
Если это недоступно, и у вас есть POSIX-совместимая система, вы можете написать быструю и грязную программу, используя вызов библиотеки posix_fallocate(). posix_fallocate гарантирует выделение указанного диапазона, поэтому вы не получите заполненный диск при последующем использовании диапазона, если он вернется успешно