如何在 Linux 下調整檔案大小而不取消分配區塊?

如何在 Linux 下調整檔案大小而不取消分配區塊?

我知道fallocate --keep-size可以用來擴展文件而不觸及其邏輯大小。有沒有辦法做到相反,即縮小檔案的邏輯大小而不觸及其區塊?

答案1

如果您不想刪除區塊但想更改邏輯檔案大小,那麼您可能想要刪除檔案末尾的一個洞。

truncate / ftruncate 可以做到這一點,但它不知道漏洞,因此您必須單獨檢測文件末尾的漏洞,然後使用 ftruncate 收縮文件。

請注意,ftruncate 只是解決方案的一半,雖然大多數現代 UNIX 支援檢測檔案中的漏洞,但沒有一種可移植的方法來做到這一點,因為它們的做法都略有不同。

另外,請確保您了解fallocate 正在做什麼。它填充漏洞並為其分配資料塊。因此,一旦對檔案運行了fallocate,其所有邏輯大小都由物理資料塊表示,並且在不釋放其中一些資料塊的情況下無法更改其大小。

相關內容