Linux

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

  • June 21, 2014

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

我的問題是

對於打開的文件,如何丟棄一系列數據?這是否取決於底層文件系統的實現?

您正在尋找fallocateFALLOC_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. $$

引用自:https://unix.stackexchange.com/questions/138363