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

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

Solutions Collecting From Web of "如何从ext2 / ext3文件系统的稀疏文件中删除一些块"

由于Linux 2.6.38,有一个名为FALLOC_FL_PUNCH_HOLE的标志,它应该做你想做的,即在任意位置释放文件空间。

 fallocate(fd, FALLOC_FL_PUNCH_HOLE|FALLOC_FL_KEEP_SIZE, offset, len); 

将会在由描述符fd指示的文件中打孔。 该孔将从offset开始并具有长度len ,两者均以字节为单位。 只有整个块将被删除,部分块将被清零。

你唯一能做的就是调用ftruncate()来删除文件末尾的块。

文件系统只为那些实际上有任何内容的稀疏文件的那些部分分配块。 删除这些块将是非常愚蠢的,因为这是你的数据。 其他块不能被删除,因为它们不存在。

写零到你不想要的部分。