Bcachefs 1.33:進階診斷、即時指標和 B 樹優化

關鍵點:
  • 詳細的錯誤訊息:解釋原因、類型(硬/軟)和解決方法。
  • bcachefs fs top 現在可以顯示即時傳輸速度。
  • 非同步融合 B 樹節點以提高負載下的效能
  • 新增選項 mount_trusts_udev 和 writeback_timeout。
  • 為迎接 Rust 的到來,程式碼中 goto 語句的數量大幅減少(從 2500 個減少到 600 個)。
bcachefs

Bcachefs 是用於基於 Linux 的操作系統的寫時復製文件系統。

幾天前,Kent Overstreet 宣布發布 Bcachefs 1.33.0,這是一個新版本的檔案系統,它對資料管理及其原始碼架構進行了深刻的結構性變更。

本次更新預計將成為近兩年來最重要的更新之一,重點在於元資料完整性和 C 程式碼庫的現代化。

「協調」:資料完整性的新時代

最顯著的新功能,也是近兩年來最重要的變化,是引入了協調功能(rebalance_v2)。這個新機制取代了舊的「重新平衡」系統,並解決了其一個主要限制:系統現在不僅可以管理和行動用戶數據,還可以管理和行動檔案系統元數據。

Rebalance_v2 會主動自動執行操作。如果在陣列中新增磁碟或變更冗餘選項,Bcachefs 將立即開始複製並修復任何降級的資料或元數據,並使用單獨的索引來優先處理關鍵操作。這確保即使在密集維護作業期間,系統完整性也能得到維護。

程式碼清理和 Rust 準備

1.33.0 版本在底層對 C 程式碼進行了大規模重構,使其更加安全,並與未來的實作相容。 銹開發人員進行了深度清理,減少了語句的數量。 goto 從 2.500 個程序減少到 600 個程序,大大簡化了程序的邏輯流程。

此外,還引入了新的宏,例如: DARRAY() y try()這些設計旨在模擬 Rust 和 C++ 的動態向量行為和錯誤處理機制。這不僅使現有程式碼現代化,而且還有助於提高程式碼的可移植性,並減少未來記憶體故障的可能性。

改進的診斷和儲存靈活性

考慮到系統管理,此版本大幅提升了錯誤訊息的清晰度。 Bcachefs 現在可以區分並告知故障是由軟體錯誤還是實體硬體問題引起的,甚至提供必要的復原步驟建議。這對於避免將磁碟故障歸咎於檔案系統的誤診至關重要。

這種透明度體現在多個層面:

  • 詳細的 I/O 錯誤訊息: 當區塊層報告故障時,Bcachefs 現在會傳輸特定的程式碼(例如: BLK_STS_IOERR),有助於確定實體磁碟是否是罪魁禍首。
  • 程序集錯誤: 如果缺少設備來組裝卷,系統現在會準確地指出缺少哪個單元,並根據上次看到單元時的名稱和型號顯示該單元的名稱和型號。
  • 錯誤率限制: 「軟」(軟體)錯誤和「硬」(硬體)錯誤的界限已經分離,確保大量小錯誤不會掩蓋嚴重的磁碟故障。

此外,該命令 bcachefs fs top 它有所改進。內部計數器現在顯示資料傳輸速度,而不僅僅是靜態數字,這使得關聯事件(例如)變得更加容易。 data_update_fail)但即時性能會下降。

B樹的最佳化和新的掛載選項

底層改進主要得益於 B 樹管理機制的最佳化,重負載效能得到了提升。空節點的合併現在以非同步方式進行,從而消除了寫入緩衝區瓶頸。此外,還新增了一個可選的恢復過程。 merge_btree_nodes必要時手動優化樹結構。

另一個非常實用的新增功能是能夠使用設定啟動檔案系統。 replicas=2 單張光碟這樣,使用者可以從單一驅動器開始,並且知道系統「必須」具有冗餘;一旦連接第二個驅動器,Bcachefs 就會自動複製數據,而無需複雜的手動幹預。

最後值得一提的是,新版本已經適用於 Debian、Fedora、Arch Linux 和 NixOS 等發行版,需要 Linux 核心 6.16 或更高版本,並且以兩個基本軟體包的形式分發:核心模組 (bcachefs-kernel-dkms) 和使用者工具 (bcachefs-tools)。


在 Google 中將其新增為首選來源