如果你用这个运行 dd :
dd if=/dev/zero of=sparsefile bs=1 count=0 seek=1048576
您似乎得到了一个完全未分配的稀疏文件(这是 ext4)
smark@we:/sp$ ls -ls sparsefile
0 -rw-rw-r-- 1 smark smark 1048576 Nov 24 16:19 sparsefile
fibmap 同意:
smark@we:/sp$ sudo hdparm --fibmap sparsefile
sparsefile:
filesystem blocksize 4096, begins at LBA 2048; assuming 512 byte sectors.
byte_offset begin_LBA end_LBA sectors
无需深入研究 dd 的源代码,我就试图弄清楚如何在 C 中做到这一点。
我尝试了 fseeking 和 fwriting 零字节,但它什么也没做。不知道还能尝试什么,我想在我追捕 dd 的内脏之前可能会有人知道。
编辑:包括我的例子......
FILE *f = fopen("/sp/sparse2", "wb");
fseek(f, 1048576, SEEK_CUR);
fwrite("x", 1, 0, f);
fclose(f);