ioctl()
對於 SSD,我可以使用with命令打開行設備並丟棄一系列頁面BLKDISCARD
。
我的問題是
對於一個開啟的文件,如何丟棄一定範圍的資料?這是否取決於底層檔案系統的實作?
答案1
您正在尋找fallocate
的FALLOC_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,所以希望沒問題。