Sun在2005年推出开源文件系统ZFS,最初是为OpenSolaris设计的。
以下是ZFS支持者认为ZFS具备的十佳特性:
1、元数据校验和确保数据完整性
数据完整性在ZFS中具有非常高的重要性,也是很多ZFS功能的先决条件。
ZFS文件系统采用了256位校验和,当向磁盘写入数据的时候,校验和就会被作为元数据与它相关的数据分开保存。与普通的磁盘块校验和不同的是,这种校验和可以检测出错位写、误读取和误写入、DMA奇偶错误、驱动器bug、意外过量写入以及常见的物理存储的衰减(bit rot)。
2、写时才拷贝
ZFS文件系统使用多项技术确保数据在磁盘上的一致性/连续性,其中就包括写时才拷贝(Copy on Write),也就是当数据发生变更的时候它并不会覆盖写入——它总是在指针指向变更数据之前被写入到一个新块并产生校验和。旧的数据可能被保存下来,在发生变更的过程中创建文件系统的快照。利用ZFS的文件写入是事务型的——要么将所有数据写入到磁盘,要么什么都不写入。
3、利用Time Slider的数据快照
OpenSolaris的最新版本展示了ZFS利用TimeSlider小型图形应用所实现的强大快照功能。可以通过配置设定对ZFS文件系统进行常规的快照操作——每15分钟,或者每小时等等。这种快照占用容量很小,而且很高效,因为它只保存与之前快照的变量。
TimeSlider提供了对文件系统(或一个主目录)的查看功能,而且有一个可以沿着时间线返回到更早快照时间的滑块。用户可以观察特定快照时间的文件系统或者文件夹内容。如果想要恢复一份被错误覆盖的文件,或者在升级失败之后还原系统,你只需要将滑块滑向合适的快照时间即可。
4、数据存储池
ZFS利用可用的存储驱动器,将之聚合为一个称为zpool的资源池。这个资源池可以使用脚本、镜像或者某种RAID针对容量、I/O性能或者冗余性进行优化。如果需要更多存储,只需向zpool中添加更多存储就行——ZFS将检测并自动开始使用新添加的容量,平衡I/O并最大化吞吐量。
5、RAIDZ和RAIDZ2
RAID 5有一个广为人知的缺陷——RAID5 Write Hole。RAID 5在写数据的时候,是分为两步的,首先将数据写到磁盘阵列上,然后将该stripe上数据的校验码记录到阵列上,如果在刚写完数据的时候,系统断电,那么该数据对应的校验码就没有机会再恢复了。如果接下来再发生磁盘故障,RAID重建流程将出现错误数据。唯一的解决方案就是,如果整个stripe发生覆盖写入,就创建一个正确的奇偶校验块。
RAIDZ通过使用可变宽度的条带来解决这个问题,这样每次写入实际上是一个完全的条带写入。再加上ZFS的写入时才拷贝特性,这就完全消除了RAID 5的Write Hole缺陷。RAIDZ2同理,但它使用双奇偶校验,允许阵列中丢失两个磁盘。
设置RAIDZ/RAIDZ2阵列非常简单,只需一条命令即可。
6、SSD混合存储池
可以通过向存储池中添加高性能的SSD,使其变成一个固态混合存储池。当这些固态盘作为高性能缓存时,ZFS会用其储存常用数据以提高性能。另外ZFS还采用了L2 ARC(自适应替代高速缓存)技术来暂存那些无需立即保存的数据——在时间和资源允许的情况下,这些数据会被慢慢迁移到传统的更持久的硬盘驱动器中。
7、容量
ZFS是128位文件系统,也就是说理论上它可以保存256千万亿ZB(1ZB=10亿TB)。它的容量远超今日实际所需,至少可预见的未来是如此。
8、数据清洗
ZFS可以清洗存储池中的所有数据,根据相应的校验和检查每个数据来验证其完整性,检测任何潜在的数据损毁,修复可能存在的任何错误。
当数据以冗余形式储存时——例如镜像或者RAID型阵列中——它可以检测修复任何潜在的损坏数据,且无需管理员干预。由于数据损坏都有记录,所以ZFS可以发现内存模块(或其他硬件)导致硬盘数据被错误存储的原因。
数据清理的I/O优先级较低,因此对系统性能影响非常小。用户可以在存储池使用过程中就进行数据清洗。
9、简单有效的管理
使用ZFS命令,你可以用简短而有效的命令来管理系统。例如,5磁盘RAIDZ阵列可以用这样一条命令设置:
zpool create poolname raidz c1t0d0 c2t0d0 c3t0d0 c4t0d0 c5t0d0
10、更多期待
ZFS仍在不断发展,不时有新的功能。ZFS的2009年路线图中包括增强安全性的加密功能,以及提高存储效率的重复数据删除功能。