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

2019-09-23 04:30发布

当你写一个稀疏文件中的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