![修改時使用 fallocate --dig-holes 是否安全](https://rvso.com/image/697400/%E4%BF%AE%E6%94%B9%E6%99%82%E4%BD%BF%E7%94%A8%20fallocate%20--dig-holes%20%E6%98%AF%E5%90%A6%E5%AE%89%E5%85%A8.png)
是嗎安全的fallocate --dig-holes
在修改/寫入檔案時使用它?例如,在 KVM 來賓開啟的 QCOW2 映像上?
答案1
我一般會說不。如果該檔案是安裝到虛擬機器的映像,您可以嘗試 TRIM(例如,fstrim -a)。嚴格來說,這不是等價的(TRIM 還可以釋放某些未清零的已刪除檔案的空間),但這可能就是您想要的。
在某些特定情況下它可能是安全的,但我不會依賴它。例如,當一些資料依序串流傳輸到檔案時沒有任何預先分配,聽起來可能很安全。但由於文件中沒有暗示這一點,並且它僅依賴實現,因此我強烈不推薦它。
會出現什麼問題?想像一下應用程式/虛擬機器將覆蓋一些歸零的區塊,並且您同時執行fallocate -d。比賽可以是這樣的:
- Fallocate 看到一塊零,因此決定在那裡挖一個洞。
- 另一個應用程式/VM 將一些資料寫入歸零塊。
- Fallocate 在方塊上挖了一個洞。
聽起來可能在 1 和 3 之間有一個很小的時間範圍。 (不確定,我還沒有檢查過實現,但即使相反,你將來也不能依賴它。)這會增加 1 和 3 之間的延遲,使競爭條件更有可能發生。