ZFS是SUN公司开发的业界第一个128位的文件系统。它具有以下优点:
1. 可证实的数据完整性
数据完整性是所有用户都关心的头等大事,如果存储的数据都不完整了,那还有存储干什么呢?有人说,不用ZFS,我有RAID-5啊。说这话的朋友可能不知道RAID-5有个致命的问题--写漏洞(write hole)。因为RAID-5在写数据和校验信息时不是原子操作(atomicity),就可能出现新的数据已经写到磁盘上,但是新的校验信息还没有写完的情况,比如整个磁盘阵列异常掉电时,这样当下次读取这块数据时,就会得到一堆”垃圾“。虽然可以靠添加非易失性存储(NVRAM)来解决这种问题,但这无疑增加了企业的成本。而相比之下,ZFS并不需要添加任何新的硬件。这都要感谢ZFS基于“事务性“(transaction)的面向对象的处理方式。
ZFS是一种”树状“文件系统,其超级块(uberblock)就是整个文件系统的”根节点“,数据块就是”叶节点“,而地址块就是中间的”枝节点“。如下图所示:

图1 初始状态
其中树的每个节点都是一个对象。ZFS对文件块(除文件系统超级块uberblock)的修改操作都采用”写时拷贝(Copy-On-Write)“技术实现,而从”叶节点”到“根节点”的操作是事务性的,即一个分支要么被修改,要么就什么也没有改变。
下面是对数据块data1和data2进行修改的示意图:

图2 对data1和data2数据块作“写时拷贝(COW)”

图3 对间接地址块作“写时拷贝(COW)”

图4 修改超级块(uberblock)
尽管这里修改数据块data1和data2有4个图,实际上从图1到图4的操作是“事务性的原子操作“,即最终的结果要么就是图1的状态,要么就是图4的状态,不可能是中间状态。
由于每个数据块有256位的校验码(checksum),在遍历数据的过程中,ZFS会使用数据块的校验码校验数据的正确性,一旦发现有错,ZFS就能自行进行纠正(self-healing)。这样就绝对的保证了数据的完整性。
2. 卓越的性能
ZFS采用了一种称为"RAID-Z"的技术,"RAID-Z"与RAID-5类似,也是数据和校验相结合的模式,但是与RAID-5不同的是,ZFS使用可变的条带宽度(Dynamic Stripe Width),每一个数据块就是一个条带,因此,ZFS的每次写操作都是一个完整的条带写操作,这样就不需要像RAID-5一样作”读-修改-写“,再加上ZFS的”写时拷贝“技术,可以将随机写操作转换为顺序写操作并且在多个磁盘上并发的完成,因此,ZFS的性能比传统的RAID技术要好很多。
3. 简单的管理
ZFS本身就集成了卷管理(Storage Pool)的功能,不需要你在卷管理软件和文件系统之间折腾,甚至不需要你修改/etc/vfstab和/etc/dfs/dfstab,因为ZFS可以自动安装及共享文件系统。你会发现你是否真的还需要花钱去雇人来对你的文件系统进行管理,因为这一切已经被ZFS变成一件愉快的事。
创建一个镜像池,你只需要:
# zpool create home mirror c0t0d0 c1t0d0
创建一个文件系统,
# zfs mount -c home/user1 /export/home/user1
更多的例子,你可以在《ZFS: the last word in file systems》中找到
4. 巨大的存储量
正如文章开篇说所,ZFS是128位的文件系统。这里128位指的是ZFS可以寻址的数据块的地址位数。每个数据块是512个字节,即2^9bytes=2^12bits,因此一个ZFS可以存储(2^128)*(2^12)=2^140bits。到底这个2^140bits是什么样一个概念,可能很多朋友都不知道,下面引用ZFS的开发者Jeff Bonowick的Blog上一个形象的例子来告诉大家。
大家都知道摩尔定律,但是摩尔定律忽略了一点,那就是任何物质都有其上限。根据Seth Lloyd的研究,1公斤的物质(1升的空间内)其极限是每秒执行10^51次运算,存储10^31位(bit)信息,而一个存满了的ZFS可以存储2^140位信息,因此至少需要(2^140bits)/(10^31bits/kg)=136 billion公斤物质。
为了将这个”设备“运行起来,它必须是以纯能量的方式。按照爱因斯坦E=mc^2,需要的能量是1.2x10^28焦耳。海洋的质量是1.4x10^21公斤。让1公斤水温度升高1摄氏度需要4000焦耳能量,因此让1公斤水从凝固到沸腾(100摄氏度)需要400000焦耳能量,再加上每公斤蒸发需要的2000000焦耳能量。蒸发整个海洋共需要(2000000+400000)焦耳/公斤*1.4x10^21公斤=3.4x10^27焦耳。可见要运行一个存满ZFS的设备需要的能量远超过把海洋蒸发完的能量。
现在你该相信ZFS就是"the last word in filesystem”了吧。
5. ZFS是开源的(Open)
秉承SUN的开源思想,ZFS项目也是开源的。如果你是软件开发人员并且对文件系统感兴趣的话,你可以加入到ZFS的项目中:http://www.opensolaris.org/os/community/zfs
6. ZFS是免费的
”天下没有免费的午餐“,这句话在SUN公司就不成立了。有了功能如此强大的ZFS,作为公司的决策者,你还有必要花钱去单独买昂贵的卷管理软件吗?
