ZFS:Apple 曾经的新文件系统 (2016)
ZFS:Apple 曾经的新文件系统
序幕 (2006)
2006 年,我参加了我的第一次 WWDC,参与 Apple 将 DTrace 移植 到下一个版本的 Mac OS X (Leopard) 的发布。Apple 在没有 DTrace 团队的帮助下完成了除了一些最细微的润色之外的所有工作。即使他们确实与我们见面,我们也不知道他们离向全世界宣布最终产品只有几周的时间了。这证明了 Apple 的工程能力以及他们传奇般的保密性。
在同一次 WWDC 上,Apple 发布了 Time Machine,这是一款通过时间记录文件系统版本以进行备份和恢复的产品。他们是怎么做到的?我们感到振奋,因为可能还有另一项被采用的 Solaris 技术。当我们发布 Solaris 10 时,DTrace 与 ZFS 共享了头条,ZFS 是一种新的文件系统,它将成为与其他文件系统进行比较的标准。ZFS 的众多关键特性中,快照使得捕获文件系统的状态、发送更改、恢复数据等变得简单。Time Machine 看上去完全像是 ZFS 的 GUI (实际上是我们想象的 GUI,但我们知道它远远超出了 Sun 的能力)。
当然,Time Machine 与 ZFS 没有任何关系。在主题演讲结束后,我们冲向一位我们认识的 Apple 工程师。他羞愧地承认,这实际上只是一堆 指向目录的硬链接。对于那些不知道 symlink 和 symtab 的区别的人来说,这在道德上等同于使用报纸作为绝缘材料:在完全预料到的灾难摧毁你所珍视的一切之前,它都很好。
所以 Mac OS X 中没有 ZFS,至少目前还没有。
别那么快 (2007)
在 2007 年 WWDC 之前的几周,像我这样的书呆子开始失去理智:Apple 真的要将 ZFS 移植到 Mac OS X 了。这真的要发生了!除了可以轻松备份的快照之外,ZFS 还会极大地提升 Apple 用户的数据存储状态。HFS 是在 System 2.1 中引入的(在操作系统获得广泛和普遍的性感魅力之前,我们称 “System” 为 “Mac OS”)。HFS 通过添加—等等—层级结构来改进 Macintosh 文件系统!文件不再堆积成一堆;您可以将它们组织在文件夹中。并不是说那些 400K 软盘上有很多东西要组织,但进步就是进步。而且,这个文件系统已经蹒跚了 30 多年,不断推进,重写以避免内核中的 Pascal 代码(尽管保留了 Pascal 风格的、长度前缀的字符串),但从未被重新构想或重新发明。即使在其最现代的形式中,HFS 也缺乏围绕数据完整性的最基本的功能。Bug、电源故障以及预期且不可避免的媒体故障都意味着数据会被静默地更改。祈祷您的旧照片仍然完好无损。你上次备份 Mac 是什么时候?我现在正在备份,就像每次我想到 HFS 的疏忽管理时一样。
ZFS 将为 Mac OS X 带来数据完整性、压缩、校验和、冗余、快照等等。但在激励 Mac/ZFS 粉丝的同时,Sun 首席执行官 Jonathan Schwartz 笨拙地扰乱了 ZFS 在 Apple 围墙花园中积累的势头。Apple 一直在致力于将 ZFS 移植到 Mac OS X。他们计划在即将到来的 WWDC 上提及它。Jonathan 出于礼貌或法律必要性而被纳入其中,违反了 Steve Jobs 时代的 Apple 的基本规则。在 Steve Jobs 的公司里,只有一个人可以发布新产品:Steve Jobs。“事实上,本周您将看到 Apple 在其全球开发者大会上宣布 ZFS 已成为 Mac OS 10 中的文件系统,” Jonathan 在一次新闻活动中沉思道,显然是为了提升 Sun 自身的信誉。
不到一周后,Apple 只有在明确 Leopard 的开发者版本中确实存在一个移植版本时才谈论 ZFS,尽管它还处于初期阶段。是的,ZFS 会在那里,算是吧,但它将是只读的,没有人应该抱太大希望。
希望之光 (2008)
到下一次 WWDC 时,似乎 Sun 已经被原谅了。ZFS 出现在主题演讲中,出现在分发给与会者的开发者光盘中,甚至在 Mac OS X Server 网站 上也有提及。Apple 自 2006 年以来一直在致力于他们的移植,现在它的功能已经足够强大,可以完全展示出来。我自己也试了一下;这真的很真实。每个人都想要的(但大多数人说不出为什么)功能即将到来!
无法完成的小火车 (2009)
到 Snow Leopard 发布时,只有仔细检查 Apple 网站才能发现 ZFS 的奇怪引用未被删除。ZFS 在 Mac OS X 产品团队中享有的任何势头都消失了。我从熟悉情况的人那里听到了一些理论和轶事;首先是一些相关的背景信息。
Sun 正在消亡。 在与 IBM 和 HP 的失败恋情之后(后者是由两辆垃圾车相撞形成的,据 Sun 前首席执行官 Scott McNealy 称),Oracle 收购了这位前景黯淡的老妇人。为期近一年的收购完成过程对 Sun 来说尤其困难,给其未来带来了不确定性并损害了其盈亏。尽管 Steve Jobs 和 Oracle 首席执行官 Larry Ellison 之间存在有据可查的个人友谊(稍后会详细介绍),但我确信这种不确定性对继续使用 ZFS 的决定产生了一些影响。
与此同时,自 2007 年年中以来,Sun 和 NetApp 一直就 ZFS 和其他存储技术展开诉讼。虽然 Jonathan Schwartz 曾在博客上写过保护 Apple 及其用户(当然还有 Sun 的客户),但这可能导致了进一步的不确定性。最重要的是,文件系统转换远非简单。当 Apple 将 DTrace 包含在 Mac OS X 中时,一个有利的观点是,如果出现任何法律问题,它可以被删除。一旦用户数据进入 ZFS,就需要数年时间才能完全扭转这一决定。虽然 NetApp 诉讼似乎从未有道理(ZFS 使用独特且从头开始的快照机制),但它无疑代表了 Apple 的风险。
最后,也许最重要的是,个人自负和 NIH(非我发明)综合症肯定发挥了作用。当时 Apple 的人告诉我,某些负责人和经理宁愿构建自己的东西,也不愿采用外部技术—即使是同类最佳的技术。他们推销了自己的项目,一个 Apple 项目,该项目将为 Mac OS X 带来现代文件系统技术。ZFS 的设计中心是服务器,而不是笔记本电脑—当然也不是手机、平板电脑和手表—他的论点可能是从头开始比适应 ZFS 更好。再加上上述的不确定性,而且,据说,不乏政治头脑,他们的论点占据了上风。许可 FUD 也被抛到了脑后;即使在今天,Apple 的人仍然认为 ZFS 许可在某种程度上是邪恶的和有毒的,而 DTrace 许可对他们来说效果很好。请注意,两者都使用相同的许可,具有相同的授权和相同的限制。也许技术论证确实势不可挡(但请注意,ZFS 正在 iPhone 上内部运行),也许风险确实无法克服。我显然有自己的看法,并且认为这对行业来说是一个巨大的错失机会,但我从未承担过权衡所有事实并做出决定的负担。尽管如此,Apple 还是结束了其 ZFS 工作;Apple 从头开始的文件系统工作正在进行中。
仍然无法完成的小火车 (2010)
令人惊讶的是,这并不是 ZFS 在 Apple 的最终结局。Apple 的 ZFS 架构师已经离职,该项目已被搁置,但 Sun 和 Apple 之间就恢复移植进行了高级别对话。Apple 将获得对其使用 ZFS 的赔偿和支持。Sun 将获得对 Apple 文件协议 (AFP—具有讽刺意味的是,它似乎是新 APFS 的附带损害) 的访问权限,而且,更重要的是,Sun 基于 ZFS 的新存储设备(我参与了开发)将成为数百万 Apple 设备的天然服务器和备份代理。这似乎有一定的道理。
Sun 极其缓慢的收购终于完成。Apple-ZFS 交易被提交给 Larry Ellison 批准,被征服土地的头生子被带到新国王面前接受祝福。“我来告诉你与我最好的朋友 Steve Jobs 做生意的事情,” 他显然说,“我不与我最好的朋友 Steve Jobs 做生意。”
(有趣的是,2016 年 WWDC 上悄悄讲述的故事版本颠倒了朋友的身份,Steve 说他不会与 Larry 做生意。我听到的另一个版本质疑了他们所谓的友谊的真实性,而是 Steve 建议 Larry 去他妈的。如果这是真的,通常是打破传统的 Steve,这将代表 Steve 最主流的观点。)
这就是结局。
尾声 (2016)
自从 ZFS 在 Apple 的开发停止后的 7 年里,他们一直在 HFS 和 Core Storage 方面进行各种改进,并且至少破解了两个未发布 HFS 的替代品。本周,Apple 在开发了 2 年之后发布了他们的新文件系统 APFS。它尚未完成;某些功能仍在开发中,并且他们宣布了在未来 18 个月内将其推广到笔记本电脑、手机、手表和电视的雄心勃勃的目标。在 Sun,我们于 2001 年启动了 ZFS。它于 2005 年发布,但这实际上是起跑线,而不是终点线。从那以后,我于 2008 年发布了 ZFS Storage Appliance,并于 2010 年发布了 Delphix,每一项都需要对 ZFS / OpenZFS 进行投资,才能使其为黄金时段做好准备。一个功能广泛、高度实用的文件系统需要很长时间。
APFS 具有优点(更多内容将在我的下一篇文章中介绍),但无论如何以及为什么做出该决定,Apple 没有采用 ZFS 总是会让我失望。OpenZFS 社区的敬业成员已经构建并维护了一个 移植版本。这与 Apple 作为该社区的成员,拥抱和扩展 ZFS 而不是构建自己的新兴替代方案并不完全相同。