如何丟棄/修剪開啟文件中的範圍?

如何丟棄/修剪開啟文件中的範圍?

ioctl()對於 SSD,我可以使用with命令打開行設備並丟棄一系列頁面BLKDISCARD

我的問題是

對於一個開啟的文件,如何丟棄一定範圍的資料?這是否取決於底層檔案系統的實作?

答案1

您正在尋找fallocateFALLOC_FL_PUNCH_HOLE。然後由檔案系統丟棄/修剪/取消映射這些區塊。我相信ext4會這樣做。

例如,您可以執行以下操作來丟棄從 1MiB 開始的 2MiB:

err = fallocate(fd, FALLOC_FL_PUNCH_HOLE|FALLOC_FL_KEEP_SIZE, 1048576, 2097152);
if (0 != err) {
    /* handle error */
}

如果成功,以後讀取這些位元組應該會回傳 0。

[注意:POSIX 沒有辦法做到這一點。上面的fallocate是Linux特定的。但你把你的問題標記為 Linux,所以希望沒問題。

相關內容