分类:
2008-04-29 09:09:36
Sun Microsystems公司正式发布的ZFS(Zettabyte File System)文件系统是第一个128位的文件系统,同时ZFS又被Sun Microsystems称作史上最后一个文件系统。因为这个文件系统含有多项创新技术,不仅成功地解决现有文件系统的问题和陋习,而且前瞻性地考量了未来对存储空间的需求,单个文件系统可以达到256 quadrillion(264) Zettabytes(221)。 ZFS不仅符合POSIX文件系统的标准,而且提供了许多高级功能比如:Quota(配额),Reservation(预留), Compression(压缩), Snapshot(快照),Clone(克隆)等。如果你还在坚持使用现有32位或者64位的文件系统,如果你还在“痛并不快乐着”地用着各式各样的 Volume Manager,那就很值得看看这里列出的使用ZFS的十条理由。
1. 再也不需要fsck, scandisk
不管你是在用Linux,UNIX还是Windows,相信大家都有过类似的体会:当系统意外断电或者非法关机,系统重起后发现文件系统有inconsistent的问题,这时 候就需要fsck或者scandisk 来修复,这段时间是非常耗时而且最后不一定能够修复成功。更糟糕的是,如果这是一台服务器需要做fsck的时候,只能offline(下线),而且现有应用往往都是大硬盘,相应fsck修 复时间也很长,这对许多使用该服务器的用户来说几乎不能忍受的。
而使用ZFS后大家可以彻底抛弃fsck这种工具,因为ZFS是一个基于COW(Copy on Write)机制的文件系统。COW是不会对硬盘上现有的文件进行重写,保证所有硬盘上的文件都是有效的。所以不会有这种inconsistent的概念,自然就不需要这种工具了。
2. 管理简单
ZFS作为一个全新的文件系统,全面抛弃传统File System + Volume Manager + Storage的架构,所有的存储设备是通过ZFS Pool进行管理,只要把各种存储设备加 入同一个ZFS Pool,大家就可以轻松的在这个ZFS Pool管理配置文件系统。大家再也不用牢记各种专业概念,各种命令newfs, metinit及各种Volume Manager的用法。在ZFS中我们只需要两个命令,zpool(针 对ZFS Pool管理)和zfs(针对ZFS文件系统的管理),就可以轻松管理128位的文件系统。举个例子,我们经常会遇到系统数据增长过 快,现有存储容量不够,需要添加硬盘,如果依照传统的Volume Manager管理方式,那我 们需要预先要考虑很多现有因素,还要预先根据应用计算出需要配置的各种参数。在ZFS情况下,我们的系统管理员可以彻底解放,再也不需要这种人为的复杂 考虑和计算,我们可以把这些交给ZFS,因为ZFS Pool会自动调节,动态适应需求。我们只需一个简单的命令为 这个ZFS Pool加入新的硬盘就可以了:
zpool add zfs_pool mirror c4t0d0 c5t0d0 |
基于这个动态调节的ZFS Pool之上的所有的文件系统就可以立即使用到这个新的硬盘,并且会自动的选择最优化的参数。
而且ZFS同时也提供图形化的管理界面,下面是一个ZFS图形化管理的一个截屏:
3. 没有任何容量限制
ZFS(Zettabyte File System)文件系统就如其名字所预示,可以提供真正的海量存储,在现实中几乎不可能遇到容量问题。在现有的64位kernel(内 核)下,它可以容纳达到16 Exabytes(264)大小的单个文件,可以使用264个存储设备,可以创建264个文件系统。
4. 完全保证数据的正确和完整
由于ZFS所有的数据操作都是基 于Transaction(事务),一组相应的操作会被ZFS解 析为一个事务操作,事务的操作就代表着一组操作要么一起失败,要么一起成功。而且如前所说,ZFS对 所有的操作是基于COW(Copy on Write), 从而保证设备上的数 据始终都是有效的,再也不会因为系统崩溃或者意外掉电导致数据文件的inconsistent。
还有一种潜在威胁 数据的可能是来自于硬件设备的问题,比如磁 盘,RAID卡的硬件问题或者驱动bug。现有文件系统通常遇到这个问题,往往只是简单的把错误数据直接交给上层应用,通常我们把这个问题称作Silent Data Corruption。而在ZFS中,对所有数据不管是用户数据还是文件系统自身的metadata数 据都进行256位的Checksum(校 验),当ZFS在提交数据时会进行校验,彻底杜绝这种Silent Data Corruption情况。
5. 提供优异性能和扩展性
和传统File System + Volume Manager + Storage架构不同,ZFS则是直接基于存储设备提供所有的功能,因此有自己独有的创新特性,性能自然非比寻常。
Dynamic Striping vs. Static Striping
由于ZFS是基于COW和一个全局动态的ZFS Pool,任何一次写 操作,都是对一块新数据块(Block)的一次写操作。ZFS从ZFS Pool中动态挑选出一个最优的设备,并且以一个transaction(事 务)线性写入,充分有效地利用了现有设备的带宽,我们把这个特性称为Dynamic Striping。而相对应的Static Striping则是传统文件系统所使用的方式,Static Striping需要管理员预先对这组Stripe进行正确地计算人为 设置,而且如果加入新的设备则需要再次人为的计算和设置,更为严重的是如果人为计算错误,则会直接影响系统的性能。而在使用Dynamic Striping这种特性之后,我们根本不需要人为介入,ZFS会自动调整,智能的为你 提供最佳的设备,最快的操作方式。
支持多种大小的数据块(Multiple Block Size)
ZFS支持多种大小的数据块定义,从512字节到1M字节。和传统文件系统往往都是固定大小数据块不同,ZFS则是可以动态的根据不同 大小的文件进行计算,动态的选择最佳的数据块。
因为不同大小数据 块,直接影响到实际使用硬盘容量和读取速度。如果使用较小的数据块,存储文件所导致的碎片则较少,读写小文件更快一些,但是会导致需要创建更多的metadata,读写大文件则会更费时。如果使用较大的数据块,使用的metadata较少,更利于读写大文件,但是会导致更多的碎片。ZFS根据实际调查现有文件使 用的情况,分析出一个选择数据块大小的算法,动态的根据实际文件大小确定最佳的数据块。所以ZFS是 非常智能的,在不需要系统管理员介入,就可以得到一个自我调优的结果。当然ZFS也支持用户对单个文件或者整个文件系统 所使用的数据块大小的自定义设置。
智能预读取(Intelligent Prefetch)
多数的操作系统都 有这种将数据预先读取的功能,而ZFS则是建立在文件系统上直接提供的一种更加智能的数据预读取功能。它不仅可以智能地识别出多种读取模式, 进 行提前读取数据,而且可以对每个读取数据流进行这种预读取智能识别,这个对许多流媒体提供者来说是件非常好的事情。
在扩展性上,和现有文件系统多是基于一个受限的静态模型不同,ZFS是采用ZFS Pool这个动态概念,它的metadata也是动态,并且读写操作都是可并行的,并且具有优先级概念,所以即使在大数据量,多设备的情况下仍可以保证性能的线性增长。