Filesystems

修改時使用 fallocate –dig-holes 是否安全

  • June 27, 2017

在修改/寫入文件時使用它是否安全?fallocate --dig-holes例如,在 KVM 來賓打開的 QCOW2 映像上?

我一般會說不。如果文件是掛載到 VM 的映像,您可以嘗試 TRIM(例如 fstrim -a)。嚴格來說,這不是等效的(TRIM 還可以釋放一些未歸零的已刪除文件的空間),但這可能是您想要的。

在某些特定情況下它可能是安全的,但我不會依賴它。例如,當某些數據在沒有任何預分配的情況下按順序流式傳輸到文件時,聽起來可能是安全的。但由於文件並未暗示這一點,並且它僅依賴於實現,因此我強烈不推薦它。

會出什麼問題?想像一下,應用程序/VM 將覆蓋某個歸零塊,而您同時執行 fallocate -d。比賽可能如下所示:

  1. Fallocate 看到一個零塊,所以它決定在那裡挖一個洞。
  2. 另一個應用程序/VM 將一些數據寫入歸零塊。
  3. Fallocate 在街區挖了一個洞。

聽起來可能在 1 和 3 之間有一個很小的時間範圍。也許這是真的,但 fallocate 可能希望一次釋放多個後續塊。(不確定,我沒有檢查過實現,但即使相反,你以後也不能依賴它。)這會增加 1 和 3 之間的延遲,使競態條件更有可能發生。

引用自:https://serverfault.com/questions/827805