两年前,我需要采购一个容量为10T的存储,然而预算仅5万,采购硬件存储是不可能的了,请教google大神后发现了ZFS,这是ZFS第一次进入我的眼帘。再进一步了解后发现,ZFS(the last word in file system)的名字真是取对了。

ZFS 文件系统是一个革命性的全新的文件系统,它从根本上改变了文件系统的管理方式,这个文件系统的特色和其带来的好处至今没有其他文件系统可以与之媲美,ZFS 被设计成强大的、可升级并易于管理的。 ZFS 用“存储池”的概念来管理物理存储空间。过去,文件系统都是构建在物理设备之上的。为了管理这些物理设备,并为数据提供冗余,“卷管理”的概念提供了一个单设备的映像。但是这种设计增加了复杂性,同时根本没法使文件系统向更高层次发展,因为文件系统不能跨越数据的物理位置。 ZFS 完全抛弃了“卷管理”,不再创建虚拟的卷,而是把所有设备集中到一个存储池中来进行管理!“存储池”描述了存储的物理特征(设备的布局,数据的冗余等等),并扮演一个能够创建文件系统的专门存储空间。从此,文件系统不再局限于单独的物理设备,而且文件系统还允许物理设备把他们自带的那些文件系统共享到这个“池”中。你也不再需要预先规划好文件系统的大小,因为文件系统可以在“池”的空间内自动的增大。当增加新的存贮介质时,所有“池”中的所有文件系统能立即使用新增的空间,而不需要而外的操作。在很多情况下,存储池扮演了一个虚拟内存。

在这里我就偷了下懒,直接引用了百度百科。

ZFS就是一块瑰宝,一直被世人忽视。它发迹于solaris,sun公司曾于2005年开源了solaris,取名为opensolaris,那时其它开源社区已经有很多人垂涎于其ZFS,FreeBSD开发者也将其移植过来,Linux开发者则系统通过FUSE的方式引入,不过这两者在当时都不成气候,特别是linux的ZFS,由于跑在userland,其性能根本不足一提。

Oracle买了SUN之后,开源社区遭受了一系列的打击,MySQL社区四分五裂,OpenSolaris被无情的抛弃,OpenOffice核心开发人员纷纷出逃。最令人不齿的是,Oracle将redhat enterprise linux的logo改一下,就推出了oracle enterprise linux,见过无耻的,没见过这么无耻的!所以Oracle在开源社区眼中就是一坨屎,不过我觉得应该从另一个角度来看待问题,SUN公司拥有一群优秀的工程师,他们具有独特的浪漫主义情怀,给IT界带来了很多耳目一新的创新技术,但浪漫主义不能当饭吃,SUN公司的连年亏本就是明证。所以,oracle收购sun后,对一些无法带来收益的产品能砍则砍。SUN的工程师也纷纷出逃,流向了joyent、nexenta、OmniIT。

虽然OpenSolaris有如彗星一样一闪而过,但ZFS的光芒在那一瞬已成为永恒。oracle的闭源行动催生了NexentaStor、SmartOS这样的OS,他们都有个共同的妈,那就是illumos。

ZFS on illumos

简单来说,illumos就像linux kernel,ZFS直接由这个kernel驱动。nexenta、SmartOS、openindiana、OmniOS则是发行版,其中名气最大的就是nexenta和SmartOS。

NexentaStor是apt package management+illumos。这是第一个成功打入市场的产品,拥有ZFS全部的优秀品质,同时套了层漂亮的WebUI,获得不少青睐,最要命的是可以免费使用,唯一的限制是18T。

smartos也系出名门:joyent。node.js就出自该公司的手笔,它的光芒掩盖了joyent公司的另一个明星产品:SmartOS。它的广告语是“SmartOS unites four extraordinary technologies to revolutionize the datacenter: ZFS+DTrace+Zones+KVM”。每一项技术仿佛都是为了VPS而生,因此SmartOS非常适合于IaaS。

ZFS on linux

ZFS在linux上衍生了多个版本,首个出现的是zfs-fuse,当时由于考虑到linux内核(GPL v2)和solaris(CDDL)所采用的开源协议有冲突,zfs无法直接作为内核模块存在,因此出现了zfs-fuse这种怪胎。由于zfs-fuse运行在userland下,速度极其缓慢,用户根本无法接受,因而zfs-fuse 0.7.0自2011年发布之后,就没有然后了。

很快,linux界找到突破口,CDDL只是不允许ZFS以二进制内核模块发布而已,那就换成源代码方式发行,用户自行编译。这就是zfs on linux,官网的第一句话是“The native Linux kernel port of the ZFS filesystem”,目前的开发还算比较活跃,只是相比起illumos还是差了很多。

不过我觉得ZFS在linux上不会得到很好的发展,一方面,ZFS在illumos上的开发势头很猛,运行稳定,另一方面,linux上还有brtfs,一个同样具有野心的文件系统,它的重要功能跟ZFS非常相似,在Oracle的支持下也发展得如火如荼,如不出意外将发展成为linux版的ZFS。所以说ZFS在linux上不会有突破性的进展。我想不通的是,Oracle既支持zfs,又支持brtfs,不知用意何在。

2013年9月,随着OpenZFS项目的诞生,ZFS on linux似乎又焕发了又一春,让我们拭目以待吧。

ZFS on BSD

FreeBSD是首个移植zfs的BSD发行版,也许跟SUN的关系不错,ZFS on FreeBSD的性能和稳定性都不错,到了9.1版已经可用于生产环境。ixsystem公司就在FreeBSD的基础上开发了FreeNAS,一个以ZFS为卖点的存储操作系统,它跟nexenta的区别是,FreeNAS是免费的,没有容量限制。

netbsd的zfs port自2009年开始,但是进展非常缓慢。netbsd社区2012年的筹款计划是6万,然而仅筹到1.5万,所以对于zfs on netbsd的未来就不必抱太大的希望了吧。虽然我很喜欢netbsd的简洁、干净。

OpenBSD的BOSS只关注安全和稳定性,其它的功能特性靠边站。连当下热火朝天的虚拟化技术都没法登录OpenBSD,所以zfs还是甭想了,洗洗睡吧。

结论

“shutup,which one is the best choise?”,有些观众估计已经开始脱鞋了。说实在话,我也不知道该选哪个,这绝不是忽悠,因为目前的状态实在是太混乱了。我斗胆做了以下的选择建议:

  • 作为一个存储来说,选择的优先顺序是:omnios/napp-it → freenas

  • 作为一个云OS来说,唯一的选择是:SmartOS