ext2 / ext3文件系统在你编写稀疏文件时自动分配块,但是当我不再需要它们的某些块时,我发现没有办法做到这一点。感觉就像使用没有free()的malloc()。 是否可以“释放”稀疏文件的某些块?如果是的话,怎么样? 不要告诉我将其复制到新文件。它太无聊了,需要大量的磁盘空间。
答案 0 :(得分:2)
你唯一能做的就是调用ftruncate()来删除文件末尾的块。
答案 1 :(得分:2)
从Linux 2.6.38开始,fallocate
有一个名为FALLOC_FL_PUNCH_HOLE
的标志,它可以做你想要的,即在任意位置释放文件空间。
fallocate(fd, FALLOC_FL_PUNCH_HOLE|FALLOC_FL_KEEP_SIZE, offset, len);
将在描述符fd指示的文件中打一个洞。该洞将从offset
开始,长度为len
,均以字节为单位。实际上只会删除整个块,而是将部分块清零。
答案 2 :(得分:0)
文件系统仅为稀疏文件中实际上具有任何内容的那些部分分配块。删除那些块会非常愚蠢,因为这是你的数据。其他块无法删除,因为它们不存在。
答案 3 :(得分:-2)
将零写入您不想要的部分。