当你写一个稀疏文件中的ext2 / ext3文件系统自动分配块,但是当我不再需要它们的一些块,我发现没有办法做到这一点。 这感觉就像使用malloc()没有免费的()。 是否有可能“自由”一些稀疏文件的块? 如果是,怎么了? 不要告诉我将它复制到一个新的文件。 这是太无聊了,需要大量的磁盘空间。
Answer 1:
由于Linux 2.6.38,有一个以标志fallocate
称为FALLOC_FL_PUNCH_HOLE
应在任意位置做你想做的,即取消分配文件空间。
fallocate(fd, FALLOC_FL_PUNCH_HOLE|FALLOC_FL_KEEP_SIZE, offset, len);
将冲一个孔到由描述符FD指示的文件。 该孔将起始于offset
,并且具有长度len
,都以字节为单位。 只有整个块将实际被删除,分块将被代替清零。
Answer 2:
你能做的唯一的事情就是调用ftruncate(),在文件的最后删除块。
Answer 3:
文件系统只分配了,其实做稀疏文件的这些部分有什么内容块。 因为这是你的数据删除的那些块将是非常愚蠢的。 其他区块不能被删除,因为它们不存在。
Answer 4:
写零到你不想要的部分。
文章来源: How to remove some blocks from a sparse file on a ext2/ext3 filesystem