当您编写稀疏文件时,ext2/ext3 文件系统会自动分配块,但是当我不再需要它们的某些块时,我发现没有办法做到这一点。感觉就像在没有 free() 的情况下使用 malloc()。是否可以“释放”稀疏文件的某些块?如果是,如何?不要告诉我将其复制到新文件中。这太无聊了,需要大量的磁盘空间。
从 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
,均以字节为单位。实际上只有整个块会被删除,部分块将被清零。
归档时间: |
|
查看次数: |
2258 次 |
最近记录: |