在現代儲存技術的戰場上,Btrfs 與 ZFS / OpenZFS 無疑是兩大霸主。它們雖然都建立在 Copy-on-Write (CoW) 的核心哲學之上,具備自我修復與快照功能 ,但在面對實體儲存層(如 RAID5/RAID50)與裝置擴充時,兩者展現了截然不同的工程 DNA 。

我們來看看從「寫入機制」、「擴充代價」、「RAID 寫入漏洞」與「資料完整性」這四大領域,解析這兩大檔案系統的差異。
1、寫入機制的哲學差異:彈性 vs、效率
Btrfs 與 ZFS 在處理資料寫入時,採取了完全不同的策略,這直接決定了它們的適用場景。
Btrfs:像俄羅斯方塊般的填充 (Tetris-like Filling)
Btrfs 將實體裝置抽象化為 1GiB 的邏輯單位「Chunk」 。這種設計允許它在寫入時,依據當下可用的磁碟數量動態決定條帶寬度(Dynamic Width) 。
優勢是極致的硬體靈活性。你可以在同一個儲存池中混合不同容量的硬碟,Btrfs 會像玩俄羅斯方塊一樣,極大化空間利用率 。
機制上,它沒有獨立的 RAID50 profile,而是透過混合多個 RAID5 chunks,實質上運作如同並行的 RAID50 。
ZFS:交易導向的效能邏輯 (Transaction-Based)
ZFS 的策略則是「效能優先」。它採用可變條帶寬度(Variable Stripe Width),為每一筆寫入交易動態決定條帶配置 。
ZFS 優勢是徹底消除了傳統 RAID 的讀取-修改-寫入(RMW)循環,大幅提升 I/O 效率 。ZFS 具備完整條帶寫入,ZFS 會依據資料大小即時計算 Parity,執行「Full Stripe Write」,確保 Parity 不會跨越資料邊界 。
CyberQ 認為,如果你的環境充滿了各式各樣閒置的舊硬碟,Btrfs 的機制是適合混用新舊硬碟和不同容量硬碟的。但若你追求極致的 I/O 吞吐與企業級的一致性,ZFS 的交易流設計則更勝一籌 。
2、擴充的代價:重平衡 vs、動態流向
當儲存空間不足,插入新硬碟後發生了什麼事?這是許多維運人員最容易誤解的地方。
Btrfs 全量重寫 (Full Rewrite) 的代價
Btrfs 為了利用新磁碟並獲得更寬的條帶,必須執行 btrfs balance 。它造成的衝擊是一個全量重寫的過程,對於數 TB 的陣列,此過程可能需要數天,並產生巨大的 I/O 負載 。
結果會導致,只有在漫長的重寫結束後,資料分佈與 RAID 層級才算完成轉換 。
ZFS 的優雅與陷阱,邏輯重流 (Reflow)
ZFS 在擴充時不需要移動現有資料,這被稱為「無強制重寫」。在這樣的機制中,ZFS 的儲存池分配器(SPA)會監控空閒容量,優先將新寫入導向較空的(新)裝置 。這是一種「容量導向的權重分配」 。
不過它會有一個擴充迷思,許多人誤以為擴充後資料會自動平衡,這是錯誤的。舊資料依然停留在舊磁碟,造成「讀取熱點」(Read Hotspots),新擴充的磁碟 IOPS 對於讀取舊資料的幫助不大 。
在這樣的情況下,比較好的解決方案是要去達成真正平衡,需手動執行 zfs rewrite 或使用新技術 RAIDZ Expansion,但需注意若存在快照,這可能導致空間佔用倍增 。
在 OpenZFS 的最新版本中,已經存在如 zpool remove 與其他更動設備的功能,且可執行一些再平衡工具。簡單說,ZFS 的擴充模型與 Btrfs 的動態擴充不同,但並不是完全靜止不動的。
以實際上使用來說,一旦決定好容量,就設定下去,不要再額外另外擴充,是比較適當的選擇,企業在選用時就預估好要使用的規格再添購下去會比較不麻煩,但這也是 ZFS 的缺點,整組 RAID 再擴充的彈性沒有 Btrfs 好。
3、安全的核心戰場:RAID 寫入漏洞 (Write Hole)
「寫入漏洞」是指在寫入過程中若發生斷電,可能導致資料與 Parity 不一致的致命風險 。
ZFS:結構性免疫 (Structural Immunity)
ZFS 從架構上就杜絕了這個問題,它採用這幾個技術來解決,首先是原子性更新,ZFS 使用 Transaction Groups (TXG) 和 Ring Buffer。系統掃描 Ring Buffer 尋找擁有「有效 Checksum」的最新 TXG。未完成的 TXG(如斷電時正在寫入的)會被直接忽略,系統瞬間回到上一個一致性狀態 。
其次是 Merkle Tree,整個檔案系統是一棵巨大的雜湊樹,任何底層資料的損壞都會導致上層校驗失敗,杜絕靜默損壞 。Uberblock 則是這棵樹的唯一信任錨點,且永不原地覆寫 。
Btrfs:從實驗性到 RST 的救贖
Btrfs 的 RAID5/6 在歷史上長期被標記為「實驗性」,正是因為 Write Hole 這個致命弱點 。
近年因為 Linux Kernel 6.2 導入了 Raid Stripe Tree (RST) 。這是一個新的樹狀結構,針對每個 extent 管理物理配置,原本是預期將陸續解決 Write Hole 問題 。畢竟,在此之前,Btrfs 依賴完整的 RMW 循環來驗證 Checksum,代價是效能損耗 。
但目前根據官方 Btrfs readthedocs 狀態頁 (截至 Linux 6.17),多數 Btrfs 功能已達到 OK 或 Mostly OK。 RAID5/6 本身仍然不建議用於生產用途,且在狀態表中沒有被標記為 OK。 從 Linux 6.12 之後,實驗性功能需經由 CONFIG_BTRFS_EXPERIMENTAL 開啟,仍有已知問題。且 write hole 的根本條件並未完全消失,目前是減少某些寫入破壞的情況,但長期還需要再觀察。
現階段目前主流的 Linux kernel(例如 6.x 系列)確實有逐步改善Btrfs 原生 RAID5/6 支援的趨勢,在過去幾年中,Btrfs 社群與開發者對於 RAID5/6 的實作持續修補一些已知 bug,這些改進包括修正部分 race condition 問題與改善 scrub 行為等,但核心 RAID5/6 還未完全達到成熟穩定的程度,仍可能在某些邊緣情況(例如設備故障後的資料修復流程)出現無法可靠恢復的問題。
換言之,雖然現代 kernel 對 RAID5/6 的處理較過去更加完善,但距離與 RAID1/10 或成熟的 RAID-Z(ZFS)同等的穩健性仍有差距。因此在技術討論中,仍然建議以更穩定的 RAID 配置(如 RAID1/10 或透過 mdadm 建構 RAID5/6,再在其上執行 Btrfs)作為替代方案,而不是直接使用 Btrfs 本身的 RAID5/6 實作於關鍵生產環境。
CyberQ 實際使用也發現即使 Linux 6.2 以上的核心有改善了 Btrfs 某些寫入與校驗行為,write hole 仍然存在,尤其是在 power loss + 裝置失敗的 corner case。 而 Scrub / balance 的效能依舊不快,如果磁碟陣列的容量很大,需要的時間可能數天甚至以週來計算。
4、快照下的危機:Btrfs 的隱憂
快照是 CoW 檔案系統的殺手級功能,但在進行陣列擴充或重組時,快照可能成為負擔。ZFS 的 datasets 與快照是正規分離的實體,而 Btrfs 的子卷與快照在內部結構上維持同一命名空間的彈性。
Btrfs 的風險在於,當持有大量快照時執行 balance,更新被快照參照的 extents 會導致「延遲參照(Delayed Refs)」爆發 。這可能導致效能歸零,甚至曾發生 metadata 驗證失敗導致檔案系統無法掛載的災難,但隨著新版本的陸續發行, Linux 核心版本的支援,很多問題陸續都能獲得解決和改善。
ZFS 的堅韌特性則呈現在 ZFS 的 Block Pointers 是不可變的(Immutable)。Reflow 僅調整 RAID 層的物理配置,與檔案系統層(快照)分離。即使擁有數千個快照,擴充陣列也不會威脅 Metadata 完整性或引發效能爆炸 。
企業應用與家用該怎樣選 ?
在企業環境中評估 Btrfs 的適用性,關鍵並不在於它是否具備先進功能,而在於它是否適合作為承擔最壞情境的儲存基石。從工程現實來看,Btrfs 在 RAID1、RAID10 或單碟、多副本配置下已相當成熟,也被廣泛用於 Linux 發行版的系統磁碟、映像管理與快照回滾場景。
然而,當儲存需求進一步進入企業最在意的容量效率與容錯層級(例如 RAID5/6)時,Btrfs 的風險模型便顯得不一定能滿滿足某些企業對可預期失效模式與資料修復可靠性的要求。即便在目前主流的 Linux kernel 6.x 系列中,Btrfs RAID5/6 已逐步修正部分已知問題,其實作仍被明確標示為不建議用於關鍵生產環境,這使得部分企業會考量,是否在事故處理、責任界定與長期維運上承擔額外不確定性。
綜合來看,Btrfs 並非「不適合企業使用」,而是更適合部署在系統層、平台層或有上層保護的儲存架構中。相對地,若是承載企業核心資料、需要多年穩定運作且高度依賴 RAID5/6 容量效率的場景,仍應優先選擇在工程成熟度與風險可控性上更具優勢的解決方案。
相較之下,ZFS 在企業環境中的定位則更加明確。它的設計核心從一開始就假設系統必須長期承載關鍵資料,並且在硬體故障、電力異常或多碟同時失效等極端情境下,仍能維持資料一致性與可修復性。
ZFS 將檔案系統與磁碟管理整合為單一儲存堆疊,透過 end-to-end checksum、Copy-on-Write 與 RAID-Z 的緊密耦合,建立出可預期的失效模式與成熟的自我修復流程,這正是企業最在意的工程特性。
因此,ZFS 特別適合應用於企業核心資料儲存、虛擬化平台後端(如 VM、Container Volume)、大型 NAS 與備份儲存庫等場景,尤其是在需要使用 RAID5/6 等 parity 架構以兼顧容量效率與資料安全時,其穩定性與行為可預測性明顯優於多數通用檔案系統。
當然,ZFS 的代價在於較高的硬體資源需求、更高的成本,與較為嚴謹的擴充模型,但在企業尺度下,這種「用資源換取確定性」的設計哲學,往往更容易被長期維運、法遵與風險管理所接受。
兩種檔案系統各有所長
ZFS 在整合 RAID-Z 模型時具備 end-to-end 校驗與自我修復 (self-healing) 的機制,而 Btrfs 的校驗主要依賴 RAID 配置與 scrub 操作,但在 metadata 與 RAID5/6 場景中仍有不同的限制與風險。
ZFS 對 RAM(尤其啟用去重 dedup 時)有較高需求,這對於實際部署時,需要留意,會具備較高的成本,在記憶體昂貴的年代會是成本增加的環節之一,但它的效能和安全性也會比較好。
以下是兩個檔案系統主要差異比較 :
| 檔案系統 | Btrfs | ZFS |
| 硬體靈活性 | 可混用硬碟 | 較嚴格 (VDEV 限制) |
| 擴充衝擊 | 高 (需全量重寫/Balance) | 低 (Reflow/無須重寫,但需注意讀取熱點) |
| Write Hole 安全性 | 依賴 Kernel 版本 (6.2+ RST) | 架構性免疫 (Atomic TXG) |
| 快照擴充穩定性 | 風險 (Delayed Refs 爆發) | 安全 (Immutable BP) |
CyberQ 建議,如果是需要管理大規模環境,且「資料保護」與「長期可靠性」是絕對優先事項,OpenZFS 是不二之選。它的穩定性,以及 Merkle Tree 與原子性更新提供了數學上可證明的完整性 。
如果你是 Linux 資深玩家,需要靈活的磁碟管理(例如家中混雜不同容量的舊硬碟),且能掌握 Kernel 版本與維運細節,Btrfs 則提供了相當的彈性 。
但請記住,無論選擇哪一種,絕對不要使用 SMR 硬碟在 NAS 上,請儘量指名 CMR 硬碟。這是因為 SMR 硬碟的隨機寫入性能較差,不適合高頻率寫入工作,硬碟廠商包括 WD 和 Seagate都在朝 MAMR、HAMR等更先進技術發展並突破容量瓶頸,硬碟新品也會往這部份來選。














