Filesystems
拍攝使用 nodatacow 掛載的 BTRFS 卷的快照?
我計劃在 BTRFS 格式的旋轉磁碟上創建兩個子卷。我計劃使用 nodatacow 掛載其中一個子卷,以便我可以在那裡有效地儲存虛擬機映像和數據庫文件。
使用 snapper 啟用使用 nodatacow 掛載的子卷的快照是否有任何問題?
拍攝不使用 COW 的捲的快照時應該注意什麼?
到目前為止,我發現的只是 BTRFS FAQ 中的一句話:
可以關閉數據塊的寫時複製嗎?
是的,有幾種方法可以做到這一點。
通過使用 nodatacow 掛載來禁用它。這也意味著 nodatasum。 如果拍攝快照,仍可能發生 COW。
關於nodatacow選項,Ohad Rodeh 的題為BTRFS: The Linux B-tree Filesystem的論文指出:
它取消數據塊的寫時複製,除非有快照。
創建使用nodatacow掛載的子卷的快照沒有問題。但是由於需要 cow 來創建快照,因此當您使用nodatacow在子卷上創建快照時,它基本上會忽略nodatacow;照常行事。
然而,這確實帶來了一個有趣的問題:nodatacow是否會被永久忽略?在禁用 COW 的情況下創建子卷的快照是否會重新啟用 COW,直到再次手動禁用它?
幸運的是,沒有。從 btrfs郵件列表…
在 NOCOW 文件上,快照後第一次寫入文件塊(4096 字節)必須仍然是 COW,因為快照將舊版本鎖定到位,現在文件塊已更改,因此儘管 NOCOW 已按順序寫入,但必須將其寫入其他位置保持快照原樣。但是,該文件確實保留了 NOCOW 屬性,並且對同一文件塊的額外寫入將就地……當然直到下一個快照。