OpenZFS 2.4 擴展了與 Linux 4.18–6.18 和 FreeBSD 13.3+ 的兼容性,提供了長期穩定性。

  • 它引入了關鍵的效能改進:AVX2 加密、最佳化的無快取 I/O 和新的統一分配演算法。
  • zfs rewrite -P、預設配額和基於範圍的清理等新工具使高階管理變得更加容易。
  • 它透過修復群組區塊、改進 ashift 以及管理特殊和慢速 vdev 來增強可靠性。

OpenZFS 2.4

當 OpenZFS 發布新版本時,許多管理員會想知道現在是否值得更新,還是應該等到風頭過去後再更新。 OpenZFS 2.4 這個問題比較有意思,因為 它帶來了深刻的改變。 在性能、新的管理工具以及關於在生產系統中使用候選版本的一些社區辯論方面。

OpenZFS 2.4 的一般特性

OpenZFS 2.4 被描述為一個版本 性格穩定且頗有抱負 該專案旨在同時適用於 Linux 和 FreeBSD 環境,在最終確定其目標時,已強調其目標是在保持與最新核心的兼容性並確保資料安全的同時,繼續促進檔案系統和磁碟區管理器的成熟。

此版本整合了許多自…以來一直在開發的功能 戲劇 2.3 及其中間修訂:效能改進 加密層新的管理工具,例如 zfs 重寫更靈活的配額功能,以及旨在減少碎片、優化重複資料刪除和改進複雜方面(例如組塊管理或處理問題磁碟的行為)的內部變更。

社區也特別關注了這一點。 與現代內核集成在 Linux 系統中,支援版本從 4.18 到最近的 LTS 分支(包括 2.4 穩定版發佈時的核心 6.18),而在 FreeBSD 系統中,支援版本從 13.3 開始,包括 14.0 和正在準備中的更新分支,例如 15.0。

平台支援和核心相容性:OpenZFS 2.4

OpenZFS 2.4 的支柱之一是它的 廣泛的平台相容性對於許多管理員來說,這一點至關重要,因為它允許他們在不丟失預期 ZFS 功能的情況下升級作業系統版本。

在 Linux 方面,OpenZFS 2.4 表示相容於 4.18 至 4.18 系列核心。 6.18穩定這涵蓋了從保守的企業級發行版到與最新核心保持同步的現代化環境的所有類型。介於兩者之間的是各種常見版本:伺服器使用的長期支援 (LTS) 版本、自訂內核,以及 CentOS Stream 等專案採用的版本。

在 FreeBSD 中,新版本支援從 FreeBSD 13.3 從現在開始,包括 14.0 及即將推出的更高版本(例如即將發布的 15.0)在內,OpenZFS 將得到廣泛支援。這一廣泛的支援範圍確保了現有生產系統和下一代部署都能繼續使用 OpenZFS,而無需特殊的修補程式或自訂解決方案。

這種相容性背後是持續不斷的努力,而這種努力在系列作品中已經顯而易見。 OpenZFS 2.3.x先前的更新,例如 2.3.4 版本,擴展了對核心 6.16 的支持,並整合了早期候選版本中出現的補丁。 OpenZFS 2.4 在此基礎上更進一步,與最新的核心版本保持一致,並改善了那些頻繁更新基礎堆疊的使用者的體驗。

配額與新的空間管理能力

對管理員而言,最實用的新功能包括系統的改進: 預定配額OpenZFS 2.4 引入了為使用者、群組和專案定義預設配額的功能,以便可以更統一地控制空間消耗,而無需手動配置每個案例。

例如,此功能允許設定一個 所有使用者的基本費用 這些限制創建於特定資料集,或用於設定專案限制,這些限制會在分配新資源時自動套用。它在多用戶環境、託管、實驗室以及任何需要防止因疏忽而導致資源池被填滿的場景中都非常有用。

預設配額的支援並非取代現有的特定配額,而是對其進行補充。管理員可以定義一個 全球政治 然後,根據特定使用者或使用者群組的需求,為其設定例外情況,以分配更多(或更少)的空間。所有這些都使用標準的 ZFS 工具進行管理,並保持使用者熟悉的屬性模型不變。

直接 I/O、無快取 I/O 和未對齊寫入行為

就效能而言,OpenZFS 2.4 在管理方面帶來了非常有趣的變化。 直接輸入/輸出先前,在某些情況下使用直接 I/O 可能會與寫入對齊衝突,導致程式碼路徑並非最優。新版本引入了一種機制,以便在無法理想實現直接 I/O 時,使用替代模式。 輕量級無快取 I/O 專為此類情況而設計。

這在實踐中意味著什麼?這意味著那些與預期格式不符的文章不再被視為異常情況,而是需要處理。 優化路線 在 ZFS 內部,開銷降低,瓶頸得以避免,行為更加可預測,尤其是在直接 I/O 應用與非直接 I/O 應用共存的環境中。

這種改變在工作量繁重、目標是實現以下目標的場景下尤其有用: 榨乾性能 OpenZFS 提供儲存功能,同時又不犧牲 ZFS 的完整性保證。憑藉專門設計的備用方案,OpenZFS 更適合許多應用場景的實際情況,這些應用並非總是遵循理想的操作流程。

OpenZFS 2.4 中的統一分配限制和碎片減少

OpenZFS 2.4 帶來的另一個重大變化是引入了一個新的演算法。 統一分配限流這個名稱背後蘊含著一種機制,旨在減少虛擬裝置 (vdev) 的碎片化,並在系統壓力較大時改善寫入操作的分佈方式。

迄今為止,高負載情況下的區塊分配最終可能會產生一些分佈模式,隨著時間的推移,這些模式會傾向於… vdev 的碎片化統一演算法旨在協調分配速率,從而使池保持更有序的結構,並在空間開始不足或區塊大小混合非常多樣化時減少效能損失。

這類變更雖然不如新增指令那麼引人注目,但在長期部署中卻至關重要。在長期部署中,儲存池會不斷成長、進行重新平衡、新增新的虛擬開發環境 (vdev),並且需要執行多年的維護作業。 OpenZFS 2.4 透過改進分配控制,有助於維護儲存池的穩定性和穩定性。 隨著時間的推移,行為會變得更加穩定即使系統被高強度使用。

AVX2 和 AES-GCM 的加密改進

在安全性和效能方面,OpenZFS 2.4 包含一系列使用方面的最佳化: AVX2 用於 AES-GCM簡單來說:加密實作方式已經過改進,可以更好地利用具有這些高階向量指令的現代處理器的功能。

結果是加密速度更快,同時又不犧牲加密保證,這在處理大量加密資料的系統或對受保護資料集執行許多同時操作的環境中尤其明顯。 降低 CPU 開銷 與加密相關的,可以處理更多請求或將更多資源分配給其他系統任務。

實際上,管理者可以繼續依賴以下功能: ZFS 原生加密 在保護敏感資料的同時,避免像前幾代產品那樣對效能造成顯著影響。加密並非“免費”,但對於以往會造成明顯效能瓶頸的工作負載而言,加密變得更加易於管理。

特殊虛擬設備中的 ZIL 和特殊小塊中的改進

OpenZFS 2.4 也帶來了一些關於以下方面的新功能: 特殊虛擬設備這些設備旨在將某些類型的資料(例如元資料、小塊或重複資料刪除表)儲存在速度更快的媒體上,通常是 SSD 或 NVMe。

一方面,現在可以允許 ZIL(ZFS意圖日誌) 盡可能將資料部署在專用虛擬設備上。這樣可以更輕鬆地將同步寫入操作集中在低延遲設備上,從而提高依賴同步密集型操作的應用程式(例如具有強持久性的資料庫或訊息系統)的回應速度。

另一方面,該屬性的行為得到了擴展。 special_small_blocks 這樣 ZVOL 的作品 它們還可以儲存在特殊的虛擬裝置 (vdev) 中,而不僅僅是某些常規檔案區塊。此外,值必須是 2 的冪的限制也被放寬,因此管理員可以根據實際工作負載選擇更精細的大小,而不再局限於固定的選項。

綜合來看,這些改進使得設計儲存架構成為可能,其中 最關鍵的數據 元資料、小塊資料、零完整性日誌 (ZIL)、重複資料刪除表等儲存在速度較快的媒體上,而大部分資料則保留在成本較低的磁碟上。所有這些都使得「小」的定義更加靈活。

zfs rewrite 和 zfs rewrite -P:有效率地重新定位數據

2.3 系列已經帶來了近年來最引人注目的功能之一:子命令 zfs 重寫OpenZFS 2.4 透過整合此變體,使該工具更進一步。 zfs rewrite -P這為在池內重新定位資料增添了新的可能性。

命令 zfs rewrite 允許“重寫「文件或資料集的內容在不改變其邏輯含義的情況下被複製,但物理上被重新定位到具有不同內部屬性的其他區域。這樣就可以修改諸如壓縮演算法、校驗和類型、是否應用去重、副本數量,甚至是首選設備等設置,而無需將資料複製到用戶空間並重寫。」

這種方法有幾個明顯的優勢:與傳統的「複製並重新命名」方法相比,它減少了 I/O 流量,最大限度地減少了對快取的影響,並避免了資料透過外部工具移動的長時間等待。此外,由於內容沒有邏輯上的變化, mtime 不會改變。 也沒有任何用戶可見的屬性,這意味著許多應用程式甚至不知道該操作。

選項 zfs rewrite -P 增加了可能性 保留邏輯出生時間 盡可能保留資料塊,這有助於最大限度地減小增量複製流的大小。透過保持這些資訊的穩定性,後續的發送/接收操作可以更好地識別哪些資料發生了實際變化,哪些資料沒有變化,從而減少需要在系統之間傳輸的資料量。

另一個重要的優點是重寫過程受到保護。 射程鎖 正常情況下,它可以與實際工作負載並行運行,而不會過度阻塞系統。在資料集中, sync=always 這樣做的好處更大,因為無需對資料進行任何邏輯修改,ZIL 中就不會強制執行額外的寫入操作,從而避免了同步操作的額外成本。

OpenZFS 2.4 新增管理選項:-a|–all、範圍清理和 BRT 預取。

OpenZFS 2.4 也改進並擴展了管理工具庫,提供了一些非常實用的日常使用選項。其中之一是新增的選項。 -a|–全部 在對池執行維護任務的命令中,例如清理、修剪或初始化。

此選項允許啟動一項影響操作 所有導入的池 無需手動逐一遍歷,即可一次完成所有操作。這大大簡化了管理多個池的伺服器的操作,減少了人為錯誤,並有助於更輕鬆地自動化。

此外,還有可能推出 zpool scrub 僅限於 具體時間範圍 透過這些選項 -S -E當您只想查看疑似有問題的時間段,或想將清理工作的成本分攤到多次部分執行中,以免對整體效能造成太大影響時,此功能就顯得尤為重要。

另一個相關的新功能是新增了 zpool prefetch -t brt 預先載入到記憶體中 區塊引用表(區塊克隆表)這樣可以更好地利用先前版本中引入的區塊克隆功能,減少存取此功能涉及的內部結構時的延遲。

權限、重新命名的工具以及去重和區塊克隆的改進

OpenZFS 2.4 在許多雖小但意義重大的改進中,新增了一項權限,進一步提升了使用者體驗。 傳送:加密該功能旨在對誰可以發送加密資料進行更精細的控制,非常適合職責分離的團隊,例如負責管理快照的人員、負責處理複製的人員以及有權存取加密金鑰的人員。

傳統公用事業也進行了更名,例如: arc_summary y arcstat然後它們就被稱為 zarcsummary y zarcstat這項變更有助於避免名稱衝突,並更清楚地表明這些工具與 ZFS 相關,這對於具有多個元件且這些元件公開類似命令的系統非常有用。

內部,2.4 系列累積 新增優化和修復 這適用於資料去重和區塊克隆。資料結構經過最佳化,邊界情況修正,存取模式也得到改進,更有效控制對記憶體和 CPU 的影響。這些變更使用者無法直接感知,但它們能夠帶來更穩定的運行,並在複雜的工作負載下減少意外情況的發生。

群組塊、AShift、慢速子虛擬設備以及特殊拓撲

OpenZFS 2.4 還包含一系列改進和修復。 幫派街區這是系統內部的一項功能,旨在處理無法以常規方式放置的方塊。雖然大多數用戶不會直接與這些方塊交互,但程式碼中任何部分的故障都可能造成嚴重後果,因此,此次更新中包含的大量修復和優化對於提升系統的整體穩定性來說無疑是個好消息。

同時,處理 轉變此參數定義了與裝置磁區物理大小相符的最小分配單元。更最佳化的移位管理可以降低向大扇區磁碟寫入過多資料的可能性,並有助於在儲存池的整個生命週期內保持可接受的效能水準。

另一個有趣的新功能是能夠讓子虛擬設備以某種方式運行 異常緩慢 它們可以暫時「擱置」。這樣一來,它們就不會拖慢整個系統的效能,而是可以暫時擺脫負載,這在磁碟開始出現故障、磁碟機出現間歇性問題或環境硬體不一致時非常有用。

最後,他們有 放寬拓樸約束 在特殊和去重虛擬資料設備 (VDEV) 中,這使得在設計具有高級配置的池時擁有更大的靈活性。這使得能夠更好地整合用於元資料、去重表、零完整性清單 (ZIL) 和其他敏感元素的快速設備,而不會在佈局定義中遇到過於嚴格的限制。

OpenZFS 2.3.4:維護、初始 ZFS 重寫和整合

為了充分理解 2.4 版本所代表的飛躍,我們不妨快速看一下… OpenZFS 2.3.4這是一個維護版本,它出現的時間比主分支早一些,並為後來整合到新主分支中的一些內容奠定了基礎。

2.3.4 版本在 2.3.3 版本發布兩個月後推出,其重點在於… 穩健性和相容性它將 Linux 核心支援擴展到 6.16 版本,最低版本仍保持在 4.18,並確認了從 13.3 版本開始與 FreeBSD 相容,包括即將發布的 15.0 版本。換句話說,它已經在為與現代基礎系統共存奠定基礎,同時又不犧牲穩定性。

本次審查首次展示了該命令的初始版本。 zfs rewrite專為…而設計 在不改變資料邏輯內容的情況下遷移數據 而且無需採用複製/重新命名或發送/接收並重命名資料集等繁瑣的策略。目標是提供一種工具,能夠在新增虛擬裝置 (vdev) 後重新平衡儲存池,減少隨機寫入檔案的碎片,或將新的儲存屬性套用至現有資料。

與傳統替代方案相比, zfs rewrite 速度更快,因為它避免了資料傳輸到用戶空間。在資料集中, sync=always此外,由於資料邏輯上沒有被修改,因此不會在 ZIL 中觸發額外的寫入操作,從而提高了效能。所有這些都無需對現有程式碼進行任何修改。 修改時間或其他元數據 對應用程式可見,從而最大限度地減少對其上運行的軟體的影響。

2.3.4 版本也提供了各種 FreeBSD 特定設定它包含一些打包方面的改進和一系列小修復,優化了程式碼的某些細節。這個版本並非旨在引入顛覆性變更,而是為了在跳到包含更多新功能的 2.4 分支之前,進一步提升穩定性。

OpenZFS 2.4 RC1、RC2、RC4:測驗、回饋與社群討論

在 2.4 系列版本正式發布之前,該專案已經發布了多個版本。 釋放候選人 (RC1、RC2、RC4)旨在讓高級用戶和開發人員進行測試並報告問題。這些候選版本幾乎包含了我們討論過的所有功能:預設配額、無快取 I/O 作為備用方案、統一的分配節流、加密改進、特殊虛擬設備中的 ZIL、special_small_blocks 擴充功能、新權限、工具重新命名等等。

RC1 和 RC2 說明強調了社區的重要性。 我會測試這些版本。 並透過 GitHub 發送回饋,包括用於輕鬆列出相對於參考分支的變更的命令(以及以下組合): git cherry 將 zfs-2.3-release 與各種 RC 版本進行比較)。訊息很明確:目標是在將程式碼標記為「穩定」之前,在真實環境中對其進行測試。

然而,特定RC(例如, 2.4.0-RC4在標示為「RELEASE」的FreeBSD版本(例如15.0)中包含.NET Framework (RF) 引起了一些使用者的質疑。有些用戶想知道為什麼要這樣做。 OpenZFS 發布候選版 該系統選擇使用作業系統中被認為穩定的版本,而不是沿用先前已建立的分支。這個選擇引起了部分用戶的不滿,他們更希望儲存資料的檔案系統嚴格基於最終版本。

疑慮主要集中在該決定的持久性上:如果有人安裝了帶有 OpenZFS 2.4.0-RC4 的 FreeBSD 15.0,並且沒有使用 -CURRENT 分支,那麼人們擔心自己會被“困”在候選版本中好幾個月,直到小版本更新或新版本發布。此外,人們也擔心未來的版本,例如 15.1 會整合另一個 RC 版本(例如,假設的 2.4.1-RC3),而不是最終版本。

這場爭論背後,存在著對「…」的不同理解。候選發布版「在檔案系統這樣敏感的環境中,對某些人來說,發布候選版 (RC) 幾乎就是一個穩定的版本,只需要進行一些小的調整。但對另一些人來說,它的程式碼不應該被用作標記為正式版 (RELEASE) 的系統的基礎,而應該保留給那些密切關注開發分支的人使用。」

總之,RC完成了他們的使命。 試驗場這些改進使得漏洞更容易被發現,細節也得以調整,最終以更自信的姿態發布了「2.4 穩定版」。那些將安全性放在首位的使用者仍然可以選擇繼續使用先前的版本,例如 2.3.x,直到他們認為 2.4 版本在生產環境中足夠成熟為止。

OpenZFS 2.4 的所有新增功能都基於該專案在 2.3 系列及其維護更新中所累積的穩健性,並結合了核心相容性改進和新工具等。 zfs 重寫此次發布包含重複資料刪除和區塊複製的調整、加密最佳化、對群組區塊和 ashift 的內部更改,以及一系列新的管理選項。儘管在某些作業系統上使用候選版本引發了一些爭議,但穩定的 2.4 版本對於那些希望在 Linux 和 FreeBSD 上更充分地利用 ZFS 功能,同時又不犧牲既定完整性和彈性保證的用戶來說,無疑是一次重大飛躍。

開放式ZFS
相關文章:
OpenZFS 2.2 已經發布,以下是它的新功能