25.1 ZFS 概述

本节系统阐述 ZFS(Zettabyte File System)文件系统的发展历程、技术特性与实践应用。作为现代存储技术的重要里程碑,ZFS 融合了文件系统与卷管理器功能,区别于传统的文件系统与卷管理器分离架构(如 UFS+gvinum 或 ext4+LVM),通过统一的管理界面同时处理存储设备管理和文件系统操作,提供了数据完整性保障、可扩展性与高级管理特性的综合解决方案。

ZFS 发展历程:从 Solaris 到 OpenZFS

ZFS 最早源于 SUN 公司,旨在取代 Solaris(早期曾用名 SunOS)上的 UFS 文件系统而开发。SunOS 和 BSD Unix 的关键开发者之一是 Bill Joy,他同时也是 SUN 的创始人之一。SunOS 早期基于 BSD Unix 开发,随后转向 SVR4(Unix System V Release 4,即与 AT&T 合作开发)。

ZFS 于 2005 年 11 月 1 日(revision 789)以 CDDL(Common Development and Distribution License,通用开发及发行许可)开源到了 OpenSolaris 项目中。

2007 年,ZFS 在 FreeBSD 7.0(pool v6)中以实验状态发布;在 FreeBSD 8.0(2009 年,pool v13)中宣布为生产就绪状态。

2009 年 4 月 Oracle 收购 SUN 之后,Solaris 项目(易名为 Oracle Solaris)及 ZFS(易名为 Oracle Solaris ZFS)进入闭源开发模式,OpenSolaris 社区管理委员会于 2010 年 8 月自行解散(revision 13149,在解散时 ZFS pool 为 v28arrow-up-right)。OpenSolaris 的主要社区开发力量迁移到了新分支 illumos 项目arrow-up-right。从此以后(v28),Oracle Solaris ZFS 与社区版本开始分道扬镳。

目前 illumos 采用类似 Linux 内核的开发模式,衍生出了 OpenIndiana、OmniOS 等十余款发行版。但从实际的代码提交量来看,年平均约 150 次,illumos 的开发已陷入停滞状态。

2011 年 2 月,FreeBSD 采用了 ZFS pool v15,这是 2009 年 10 月随 Solaris 10 update 8(Solaris 10 10/09)分发的版本。

2011 年 11 月,Oracle Solaris 11 发布,ZFS pool 升级至 v31。

2012 年 1 月 12 日,FreeBSD 9.0-RELEASE 支持了 ZFS pool v28。参见:Finally... Import the latest open-source ZFS version - (SPA) 28[EB/OL]. [2026-03-26]. https://github.com/freebsd/freebsd-src/commit/10b9d77bf1ccf2f3affafa6261692cb92cf7e992arrow-up-right

在 OpenSolaris 关停 3 年后(2013 年),ZFS 的主要开发者迁移到了 ZFSonLinux,后重命名为如今的 OpenZFS。OpenZFS 旨在统一 ZFS 的开源开发(此前还有若干类似移植到 Linux 目的的项目)。由于 Oracle Solaris ZFS 的闭源开发,OpenZFS 很难再兼容 Oracle Solaris ZFS。

“时来天地皆同力,运去英雄不自由。”([唐] 罗隐《筹笔驿》)OpenZFS 新功能的主要开发商 Delphix 公司(Delphix 于 2024 年 2 月被 Perforce Software 收购)将其设备的操作系统从 illumos 迁移到了 Linux,所以基本上放弃了对前者的投入。其理由是几乎所有云平台厂商和虚拟机平台仅支持 Linux,因此 illumos 几乎再难得到投入。甚至 Oracle Solaris 本身也进入了维护模式(版本 11.4 的生命周期可延续至 2037 年)。Oracle ZFS 迁移到了企业级存储解决方案 Oracle 存储arrow-up-right

illumos 版本 ZFS(其主要开发仍由 OpenZFS 推动)得到的功能更新日趋减少,FreeBSD 对该版本 ZFS 的维护难度也不断上升,当 ZFS 出现新功能时,往往要先等待其合并到 illumos,再回溯到 FreeBSD 中。但 illumos 的开发业已基本停滞。2018 年 8 月,FreeBSD 项目开始研究如何将 FreeBSD ZFS 由 illumos 迁移到直接上游 OpenZFS。

OpenZFS 是在 13.0(2021 年 4 月)引入 FreeBSD 的,“ZFS 的实现目前由 OpenZFS 提供。9e5787d2284earrow-up-right (由 iXsystems 赞助)”取代了 OpenSolaris/illumos 版本的 ZFS。这一迁移标志着 FreeBSD 与主流 ZFS 开源生态的重新接轨。

目前 OpenZFS 代码提交量的首位成员属于美国劳伦斯利弗莫尔国家实验室(LLNL),OpenZFS 由其主导开发。LLNL 的核心职责是确保美国国家核威慑的安全、可靠和有效。

SUN 原意是太阳,太阳虽有西落,但同时也在地球的另一侧东升。这一隐喻恰当地概括了 ZFS 从 SUN 生态向更广泛的开源生态迁移的历史进程。

参考文献

许可证兼容性分析

从知识产权与开源许可的角度分析,ZFS 未能直接纳入 Linux 内核树的核心原因在于许可证兼容性问题。Linux 内核采用 GPLv2(GNU General Public License version 2)许可,这是一种强 copyleft 许可证,要求衍生作品也必须以相同许可发布;而 ZFS 采用 CDDL(Common Development and Distribution License)许可,同样包含 copyleft 条款,但传染范围仅限于 CDDL 许可的代码文件。两者在 copyleft 传染范围与权利义务要求上存在实质性冲突,导致无法通过双许可证方式解决兼容性问题,因此 ZFS 未被接受进入 Linux 主内核树。

思考题

阅读 GPLv2 和 CDDL 许可证的原文或译文。

  1. 解释为什么二者存在冲突?

  2. 如果仅从许可来看,自由软件基金会称任何树外模块都是不合规的 当然最后要看法院的意见,Ubuntu ZFS 模块即是一例。那么,这是否能反证整个 Linux 内核都是以 GPLv2 授权的?

技术潜能与现实困境

从技术实践的角度观察,ZFS 的性能优势与高级特性往往需要针对性的参数调优才能充分发挥,这构成了其在标准化性能测试中表现差异较大的重要原因。ZFS 的调优策略具有高度环境依赖性,需结合具体存储硬件、工作负载特征与使用场景进行个性化配置,主要调优方向包括 ARC 缓存大小、记录大小、压缩算法选择等,因此难以形成普适性的最佳实践指南。从这一角度而言,ZFS 不属于典型的开箱即用型文件系统。

文档生态现状分析

目前可用的 ZFS 文档包括:

  • Oracle Solaris 管理:ZFS 文件系统arrow-up-right:该文档撰写于 OpenZFS 项目启动之前,不包含 OpenZFS 近十五年来的开发进展。

  • FreeBSD Mastery: ZFSFreeBSD Mastery: Advanced ZFS

  • 《FreeBSD 操作系统设计与实现(第二版)》:包含 ZFS 原理性描述

OpenZFS 项目的官方文档可作为参考来源。

技巧

ZFS 有多种实现,其功能差异对比表参见:Feature Flags[EB/OL]. [2026-03-26]. https://openzfs.github.io/openzfs-docs/Basic%20Concepts/Feature%20Flags.htmlarrow-up-right

附录

本附录介绍 ZFS 与传统文件系统挂载方式的差异。ZFS 并不使用 /etc/fstab 管理文件系统挂载,而是通过 zfs mount 命令和 ZFS 数据集的 mountpoint 属性进行管理。但 EFI 系统分区和 Swap 分区仍然需要使用 /etc/fstab

课后习题

  1. 查找 OpenZFS 2.4.0 的源代码仓库,编译并在 FreeBSD 14.3 中安装,对比原生 ZFS 在编译时间和内存占用上的差异。

  2. 选取 ZFS 从 illumos 迁移到 OpenZFS 的关键提交 9e5787d2284e,重构其最小兼容层。

  3. 修改当前系统的 ZFS 功能集配置,禁用 3 个你认为不必要的特性,验证系统启动与运行状态。

  4. 为 ZFS 添加 i18n 支持。

最后更新于