星期日 三月 11, 2007

ZFS:你用得完吗?

        ZFS是SUN公司开发的业界第一个128位的文件系统。它具有以下优点:

1. 可证实的数据完整性

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

      ZFS是一种”树状“文件系统,其超级块(uberblock)就是整个文件系统的”根节点“,数据块就是”叶节点“,而地址块就是中间的”枝节点“。如下图所示:

      Intial Block tree
                            图1 初始状态

     其中树的每个节点都是一个对象。ZFS对文件块(除文件系统超级块uberblock)的修改操作都采用”写时拷贝(Copy-On-Write)“技术实现,而从”叶节点”到“根节点”的操作是事务性的,即一个分支要么被修改,要么就什么也没有改变。

     下面是对数据块data1和data2进行修改的示意图:

     cow data1 and data2

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

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

      rewite uberblock
                        图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,作为公司的决策者,你还有必要花钱去单独买昂贵的卷管理软件吗?

 

 

 




 


 

     
 


 

About

samwan

Search

Categories
Archives
« 四月 2014
星期日星期一星期二星期三星期四星期五星期六
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
今天