如何在 Linux 下不取消分配块的情况下调整文件大小?

如何在 Linux 下不取消分配块的情况下调整文件大小?

我知道fallocate --keep-size可以使用 来扩展文件而不触及它的逻辑大小。有没有办法做相反的事情,即缩小文件的逻辑大小而不触及它的块?

答案1

如果您不想删除块但想更改逻辑文件大小,那么大概您想删除文件末尾的一个洞。

truncate / ftruncate 可以做到这一点,但它不了解漏洞,因此您必须单独检测文件末尾的漏洞,然后使用 ftruncate 来缩小文件。

请注意,ftruncate 只是解决方案的一半,虽然大多数现代 unix 都支持检测文件中的漏洞,但没有一种可移植的方法来做到这一点,因为它们的做法都略有不同。

另外,请确保您了解 fallocate 的作用。它会填补空缺并向其分配数据块。因此,一旦您在文件上运行了 fallocate,其所有逻辑大小都由物理数据块表示,并且您无法在不释放其中一些数据块的情况下更改其大小。

相关内容