Linux
如何丟棄/修剪打開文件中的範圍?
ioctl()
對於 SSD,我可以使用withBLKDISCARD
命令打開行設備並丟棄一系列頁面。我的問題是
對於打開的文件,如何丟棄一系列數據?這是否取決於底層文件系統的實現?
您正在尋找
fallocate
的FALLOC_FL_PUNCH_HOLE
. 然後由文件系統來丟棄/修剪/取消映射這些塊。我相信ext4會這樣做。例如,你會做這樣的事情來丟棄 2MiB,從 1MiB 開始:
err = fallocate(fd, FALLOC_FL_PUNCH_HOLE|FALLOC_FL_KEEP_SIZE, 1048576, 2097152); if (0 != err) { /* handle error */ }
成功後,這些字節的未來讀取應該給出 0。
$$ Note: POSIX doesn’t have a way to do this. The above fallocate is Linux-specific. But you tagged your question Linux, so hopefully that’s OK. $$