В Linux:
$ dd if=/dev/null of=mysparse seek=1G count=0
$ du -b mysparse
549755813888 mysparse
$ du -B1 mysparse
0 mysparse
В Windows я играл с Fsutil, но я не могу получить размер на диске меньше, чем размер в свойствах файла.
FSUtil File CreateNew temp 0x100000
FSUtil Sparse SetFlag temp
FSUtil Sparse SetRange temp 0 0x100000
Может быть, это вам поможет: «SparseChecker» - управляет разреженными файлами в Windows NTFS. Он позволяет работать с файлами, а не с отдельными блоками файлов, как это делает «fsutil».
То, что сказал @Mehrdad, правильно.
Однако все, что вы записываете в файл (даже с нулевыми диапазонами), будет считаться данными для операционной системы (и, следовательно, выделено пространство), и только FSCTL_SET_ZERO_DATA () позволит записывать нули, не занимающие места.
fsutil sparse setflag [file]
позволит установить файл как разреженный файл.