【发布时间】:2009-08-12 09:36:10
【问题描述】:
ext2/ext3 文件系统在你写稀疏文件的时候会自动分配块,但是当我不再想要其中的一些块时,我没有办法做到这一点。感觉就像在没有 free() 的情况下使用 malloc()。 是否可以“释放”一些稀疏文件块?如果是,怎么做? 不要告诉我将其复制到新文件中。太无聊了,需要很大的磁盘空间。
【问题讨论】:
标签: linux filesystems
ext2/ext3 文件系统在你写稀疏文件的时候会自动分配块,但是当我不再想要其中的一些块时,我没有办法做到这一点。感觉就像在没有 free() 的情况下使用 malloc()。 是否可以“释放”一些稀疏文件块?如果是,怎么做? 不要告诉我将其复制到新文件中。太无聊了,需要很大的磁盘空间。
【问题讨论】:
标签: linux filesystems
从 Linux 2.6.38 开始,fallocate 有一个名为 FALLOC_FL_PUNCH_HOLE 的标志,它应该做你想做的事情,即在任意位置释放文件空间。
fallocate(fd, FALLOC_FL_PUNCH_HOLE|FALLOC_FL_KEEP_SIZE, offset, len);
将在描述符 fd 指示的文件中打一个洞。该孔将从offset 开始,长度为len,均以字节为单位。实际上只会删除整个块,部分块将被清零。
【讨论】:
你唯一能做的就是调用 ftruncate() 来删除文件末尾的块。
【讨论】:
文件系统只为稀疏文件中实际上有任何内容的那些部分分配块。删除 那些 块会非常愚蠢,因为那是你的数据。其他方块不存在,无法移除。
【讨论】:
在不需要的部分写零。
【讨论】: