当你写一个稀疏文件时,ext2/ext3 文件系统会自动分配 block ,但是当我不再需要它们的一些 block 时,我找不到办法去做。感觉就像在没有 free() 的情况下使用 malloc()。 是否可以“释放”稀疏文件的某些 block ?如果是,怎么办? 不要告诉我将它复制到一个新文件。它太无聊了,需要大量磁盘空间。
最佳答案
从 Linux 2.6.38 开始,有一个标志 fallocate
称为 FALLOC_FL_PUNCH_HOLE
应该做你想做的,即在任意位置释放文件空间。
fallocate(fd, FALLOC_FL_PUNCH_HOLE|FALLOC_FL_KEEP_SIZE, offset, len);
将在描述符 fd 指示的文件中打一个洞。空洞将从 offset
开始,长度为 len
,均以字节为单位。实际上只会删除整个 block ,部分 block 将被清零。
关于linux - 如何从 ext2/ext3 文件系统上的稀疏文件中删除一些 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1265192/