Performance
如何將 VM 儲存在具有數據完整性和性能的 HDD 上?
首先,我知道這個話題很容易變得主觀,但我試圖避免這種情況,因為在一堆糟糕的答案中應該至少有一個好的答案,而且很難找到。
乍一看,我的問題似乎很簡單;如何在硬碟上儲存虛擬機磁碟,同時確保數據完整性不受影響,性能也不可怕。
但它實際上比看起來更難。
- ZFS 和 BTRFS 是沒有選擇的:Copy On Write 文件系統在處理大文件方面是出了名的差,特別是如果它們本身可能包含另一個 Copy On Write 文件系統!您可以在BTRFS上關閉 COW,但這也會關閉校驗和(以及壓縮、重複數據刪除等)。
- EXT2/3/4、XFS、ReiserFS、NTFS 等都不像 BTRFS/ZFS 那樣做完整的數據校驗和,也不是和選項。
那麼這是將死嗎?除了具有寫入孔(RAID5)等其他問題的簡單 RAID 設置以及通常對損壞文件的處理非常差的情況外,您無法擁有完整的數據完整性,其中不清楚兩個副本中哪一個是正確的。在將文件返回給作業系統或使用者之前校驗和並驗證文件完整性的更高級別系統可以避免的問題。
我能想到的唯一選擇是在虛擬機內部而不是在主機上使用 BTRFS/ZFS,並在每台機器上適當地安排快照和備份,儘管這比在主機上執行要麻煩得多。
有誰知道實現我的目標的任何其他方式?
讓我們從一個簡單的證據開始:更大的數據彈性和完整性功能通常需要支付性能損失。從這裡,我們可以做更多的考慮:
- ZFS 在用作 VM 支持文件系統時比 BTRFS 具有更好的性能,至少在 RHEL/CentOS 主機上是這樣。雖然在純機械 HDD 上它確實比更傳統的文件系統慢,但即使使用相對較小的 SSD 作為 SLOG 設備也會顯著提高其性能。換句話說,ZFS 上的 VM 是一個完全合理的案例;
- 即使使用像 XFS 和 EXT4 這樣沒有完整數據校驗和的傳統文件系統,健康系統上數據損壞的機率也很小。BER/UBER/URE 評級經常被斷章取義地引用,並且沒有考慮到定期清理;
- 具有斷電保護記憶體的硬體 RAID5/6 卡不受寫入漏洞的影響。此外,RAID6 也可以用作數據校驗和的一種形式(注意:它取決於特定的控制器/實現)。因此,具有適當大小的回寫記憶體的 RAID6 陣列是一個合理的解決方案;
- 最後,按照建議,您可以在 VM內使用 ZFS 。對於這樣的設置,我會將原始 LVM 卷導出到來賓,將數據容器格式化為 ZFS。但是,我會拍攝 LVM 卷本身的快照,而不是從單個來賓 VM 內部拍攝。為了獲得更好的性能,我會在主機上使用 RAID10(作為 LVM 的基礎)