Sun的开源ZFS文件系统有一些很好的特性。它原来是为Solaris设计的,并于2005年公布,但是你也可以在OpenSolaris和相关版本中看到ZFS。未来,ZFS将成为流行的文件系统,并可以与Linux和BSD一起运行。
下面是ZFS支持者觉得很好的十大特点:
1. 针对数据完整性的元数据内校验码
数据完整性在ZFS中具有无与伦比的重要性,而且是许多ZFS功能的重要因素。
该文件系统使用256位校验码。作为元数据,在写入信息到磁盘的时候,校验码与相关的数据分开存储。和简单的磁盘块校验码不同,它可以检测出错位写、误导的读取和写入、DMA(直接存储器读取)校验码错误、驱动程序漏洞、意外的覆盖写入和传统的"比特衰减(bit rot)"。
2.写时复制
利用包括写时复制在内的各种技术,ZFS确保数据始终与磁盘保持一致。这意味着当数据发生变化的时候数据没有覆盖写入–数据始终写入的是新的块,并且在数据的指针发生变化之前就已经校验过。旧的数据可能被保留,随着变化的发生,创建文件系统的快照。使用ZFS的文件写入是事务型的–要么所有都写入磁盘,要么都不写入磁盘。
3. TimeSlider下的数据快照
最新版本的OpenSolaris通过一个名为TimeSlider的绘图应用程序展现了ZFS的快照能力。ZFS可以设置成定期对文件系统(或文件系统的一部分,比如用户的主目录)进行快照–可以是每15分钟,每小时等。这些快照非常小而有效,因为只有相对于前面快照的变化才被存储下来。
TimeSlider提供了一个关于文件系统(或主目录)的视野,用一个滑动块可以沿着时间线移到更早以前的快照时间。随着滑动块的移动,用户可以观察文件系统或目录的内容在相应的快照时间发生了什么变化。如果文件被错误地覆盖写入并需要恢复,或用户进行了一次失败的升级并需要还原系统,那么用户只需要将滑动块移动到正确的快照时间就可以了。
快照还可以设置为可写入的,以便创建现有文件系统的副本。
4. 数据存储池
ZFS可以将现有可用的存储驱动器整合成一个单一资源,即zpool。通过条带、镜像或某种形式的RAID(独立磁盘冗余阵列),zpool可以进行容量、I/O性能或冗余上的优化。如果需要更多的存储,只要在zpool中增加更多的驱动器就可以了–ZFS会自动观察到并使用新的容量,平衡I/O并最大化吞吐量。
5. RAIDZ和RAIDZ2
RAID 5有一个广为人知的缺点,即RAID 5写入洞。当数据块写入一个条带的时候,这会导致一个问题,但是在相应的校验码块被写入的时候,会发生电源故障。因此,数据和条带的校验码将无法匹配。如果再发生磁盘故障,那么RAID的重建过程将产生错误的数据。唯一的解决办法是,一旦整个条带被覆盖写入,就创建一个正确的校验码块。
RAIDZ避开了这个问题。通过使用可变宽度的条带,每个写入都能成为有效的全部条带写入。因此,加上ZFS的写时复制功能,可以完全避免RAID 5写入洞。RAIDZ2也是采用类似的工作原理,但是通过双校验码可以容忍阵列中两块磁盘的丢失。
设置RAIDZ(或RAIDZ2)阵列非常简单,只要一个命令就可以了。
6. 复合存储池
高性能SSD(固态驱动器)可以添加到存储池中以创建一个复合存储池。当这些驱动器被设置成高性能高速缓存磁盘后,ZFS可以利用它们来存储经常访问的数据来改善性能。它同时使用一项名为L2 ARC(自适应替代高速缓存)来写入需要被立即存储的数据。在时间和资源允许的时候,这种数据可以慢慢迁移到传统的硬盘驱动器以便进行更加持久的存储。
7. 容量
ZFS是128位文件系统。这意味着理论上它可以存储256 1015ZB(一个ZB是10个TB)数据。实际上,这个数字远远超过了实际需要的数量,至少在可预见的未来内是如此。
8. 数据清理
ZFS可以清理存储池内的所有数据,检查每个数据块相应的校验码以确认其完整性,检测所有无记载数据损坏,纠正遇到的所有错误。
当数据以冗余的方式存储的时候–在镜像阵列或RAID类型的阵列–即使没有管理员的干预,ZFS也可以纠正所有不可见的数据损坏。由于数据损坏都有记录,ZFS可以发现记忆体模块(或其他硬件)中导致存储在硬盘驱动器上的数据被错误地存储的原因。
数据清理的I/O优先级比较低,因此对系统性能的影响很小。用户还可以在存储池正在被使用的时候进行数据清理。
9. 简单而有效的管理
使用ZFS命令,你可以用简单而有效的命令来管理系统。例如,你可以用下面这样一个简单的命令来创建一个五磁盘的RAIDZ阵列:
zpool create poolname raidz c1t0d0 c2t0d0 c3t0d0 c4t0d0 c5t0d0
10. 更多的还在后面
ZFS还在发展中,不断有新的功能出现。2009年的路线图包括增强安全性的加密功能,以及增强存储效率的重复数据删除功能。
如果你有兴趣试试ZFS,最简单的方法就是下载OpenSolaris或从http://opensolaris.org/os/downloads/下载相关的版本。ZFS还有针对FUSE/Linux的项目。