近日有爆料稱 Btrfs 的改進被提議包含在 Linux 6.2 內核中 修復 RAID 5/6 實現中的寫孔問題。
問題的本質歸結為,如果在錄製過程中發生崩潰,最初無法理解哪個 RAID 設備上的哪個塊被正確寫入,以及哪個塊沒有完成錄製。
如果您嘗試在這種情況下重建 RAID,則與訂閱塊對應的塊可能會損壞,因為 RAID 塊的狀態不同步。 在沒有採取特殊措施來解決此影響的任何 RAID1/5/6 陣列中都會出現此問題。
在像 btrfs 中的 RAID1 這樣的 RAID 實現中,這個問題得到了解決 通過在兩個副本上使用校驗和,如果存在不匹配,則只需從第二個副本恢復數據。 如果任何設備開始提供錯誤數據而不是完全失敗,這種方法也適用。
黃大仙禁運, 在 RAID5/6 的情況下,文件系統不存儲校驗和 對於奇偶校驗塊——在正常情況下,塊的正確性是通過它們都配備了校驗和來檢查的,並且可以從數據中重新創建奇偶校驗塊。 但是,在部分記錄的情況下,這種方法在某些情況下可能不起作用。 在這種情況下, 恢復陣列時,有可能 不完整記錄中留下的塊 被錯誤地恢復。
在 btrfs 的情況下,如果發生的寫入小於條帶,則此問題更為相關。 在這種情況下,文件系統必須執行讀取-修改-寫入 (RMW) 操作。
如果它遇到正在寫入的塊,則 RMW 操作可能會導致無法檢測到的損壞,無論校驗和如何。 開發者做了改動,RMW操作在執行該操作前先校驗block的校驗和,必要時數據恢復也會在寫入後進行校驗和校驗。
不幸的是,在寫入不完整邊緣 (RMW) 的情況下,這會產生額外的開銷來計算校驗和,但會顯著提高可靠性。 對於RAID6,這樣的邏輯還沒有準備好,
此外,我們可以注意到開發人員關於使用 RAID5/6 的建議,其本質是 Btrfs 中用於存儲元數據和數據的配置文件可能不同。 在這種情況下,您可以對元數據使用 RAID1(鏡像)甚至 RAID1C3(3 個副本)配置文件,對數據使用 RAID5 或 RAID6。
這一方面確保了可靠的元數據保護和不存在“寫入漏洞”,另一方面確保了空間的更有效利用,這是 RAID5/6 的典型特徵。 這可以防止元數據損壞,並且可以糾正數據損壞。
還 可以注意到,對於內核 6.2 中 Btrfs 上的 SSD, la “丟棄”操作的異步執行 (標記不再物理存儲的已釋放塊)將默認打開。
這樣做的好處 模式是高性能 由於隊列中丟棄操作的有效分組和後台處理程序對隊列的後處理,因此正常的 FS 操作不會像同步“丟棄”那樣減慢,因為塊被釋放,SSD 可以做得更好決定。 另一方面,您將不再需要使用 fstrim 等實用程序,因為所有可用塊都將在 FS 中擦除,無需額外掃描,也不會減慢操作速度。
最後,如果你有興趣能夠了解更多,可以查閱詳情 以下鏈接。