github编辑

25.1 ZFS 概述

ZFS 简史与 Solaris 兴亡

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 Kernel 的开发模式,衍生出了 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.arrow-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名字里都将 Solaris 删掉啦

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。

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

SUN 原意是太阳,太阳虽有西落,但同时太阳也在地球的又一侧东升。

参考文献

许可证问题

之所以不直接将 ZFS 纳入到 Linux 内核树内,是因为 Linux kernel 采取 GPLv2,而 ZFS 采取 CDDL。正如 GPLv2 与 GPLv3 不兼容那样,GPLv2 与 CDDL 许可证产生了冲突:双方各要求对单体传染自己的强著作权条款(copyleft 条款),而这是矛盾的,其不可能持有这种双许可证。同时 Linus 本人对 ZFS 始终持有负面看法。

思考题

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

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

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

潜能与现实

ZFS 往往要经过一番调优才能将其超越性的潜能变为现实。这也是其在各种文件系统性能测试中表现不佳甚至名落孙山的核心原因,而调优往往是个性化的(高度依赖具体环境和使用需求)难以给出通用指南,因此在某种程度上,ZFS 并不属于开箱即用型文件系统。这并非是为其在测试中的表现找理由,而是因为 ZFS 相关文档几乎不存在。

在市面上可用的文档几乎只有 Oracle Solaris 管理:ZFS 文件系统arrow-up-right,而且由于后期 Oracle ZFS 闭源开发,此文档的后续版本也不再有实际指导价值,甚至也没有提供中文版本了。就此文档本身来说,没有体现出也不可能体现出 OpenZFS 近十五年来的任何开发进程,因为它是在 OpenZFS 项目开始之前就撰写好的。OpenZFS 项目对文档项目从现实来看是丝毫不关心。因此缺乏可靠可信的 ZFS 指南是一大痛点。

笔者还注意到,市面上还有两本 FreeBSD Mastery: ZFSFreeBSD Mastery: Advanced ZFS,但是不具有任何实用性。在《FreeBSD 操作系统设计与实现(第二版)》中对 ZFS 有一些原理性描述,但是仍对调优不具有直接性的指导意义。因此,无论是英语世界还是中文世界,都缺乏一本可靠可信的 ZFS 文档来指导生产。

同时我们也注意到,ZFS 主要供大型企业或国家机构内部使用,因此推测他们存在相关文档,但这些文档难以分享或无暇整理。笔者期待在不久的将来,能够有一本 ZFS 书籍来将 ZFS 的潜能重新变为现实。

技巧

ZFS 有多种实现,其功能差异对比表参见 Feature Flagsarrow-up-right

附录

ZFS 并不使用 /etc/fstab,但 EFI 和 Swap 仍然需要使用该文件。

最后更新于