Не записуючи даних - навряд чи (якщо ви хочете саме виділити блоки, тим більше, що сама операція присвоєння блоків потребуватиме запису про це):
tsubasa:~$ df -h /home
Файлова система Size Used Avail Use% змонтований на
/dev/sda5 124G 101G 17G 87% /home
tsubasa:~$ dd if=/dev/zero bs=1 count=1 seek=10000M of=a.txt
1+0 записів прочитано
1+0 записів записано
скопійовано 1 байт (1 B), 4,7004e-05 с, 21,3 kB/s
tsubasa:~$ ll a.txt
-rw-r--r-- 1 isbear isbear 10485760001 лип 6 12:44 a.txt
tsubasa:~$ df -h /home
Файлова система Size Used Avail Use% змонтований на
/dev/sda5 124G 101G 17G 87% /home
tsubasa:~$ du -h a.txt
8,0K a.txt
Тобто якщо ви просто перейдете до потрібної позиції у файлі, щось там запишете, то лінукс навіть не виділить під пропущене місце блоки.
У C знайшов posix_fallocate:
tsubasa:~$ cat a.c
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
int main (int argc, char **argv)
{
int fd = open (argv[1], O_CREAT|O_WRONLY);
posix_fallocate (fd, 0, 10000000000);
close (fd);
return 0;
}
tsubasa:~$ gcc a.c
tsubasa:~$ ./a.out b.tt
tsubasa:~$ ll b.tt
-rwsr-S--T 1 isbear isbear 10000000000 лип 6 12:53 b.tt
tsubasa:~$ df -h /home
Файлова система Size Used Avail Use% змонтований на
/dev/sda5 124G 110G 7,1G 95% /home
але під час його роботи точно відбувається запис, мабуть таки тої метаінформації.