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

时间:2009-08-12 09:36:10

标签: linux filesystems

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

4 个答案:

答案 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)

将零写入您不想要的部分。