如何从 ext2/ext3 文件系统上的稀疏文件中删除一些块

hps*_*use 5 linux filesystems

当您编写稀疏文件时,ext2/ext3 文件系统会自动分配块,但是当我不再需要它们的某些块时,我发现没有办法做到这一点。感觉就像在没有 free() 的情况下使用 malloc()。是否可以“释放”稀疏文件的某些块?如果是,如何?不要告诉我将其复制到新文件中。这太无聊了,需要大量的磁盘空间。

MvG*_*MvG 5

从 Linux 2.6.38 开始,有一个fallocate被调用的标志,FALLOC_FL_PUNCH_HOLE它应该做你想做的,即在任意位置释放文件空间。

fallocate(fd, FALLOC_FL_PUNCH_HOLE|FALLOC_FL_KEEP_SIZE, offset, len);
Run Code Online (Sandbox Code Playgroud)

将在描述符 fd 指示的文件中打一个洞。孔将从 开始,offset长度为len,均以字节为单位。实际上只有整个块会被删除,部分块将被清零。