初探ZFS

从本文主要简单介绍ZFS,从本文起,将开始一个新的系列,我把这个系列叫ZFS系列,本文只是一个引子。

ZFS是什么

ZFS 是一个先进的文件系统。因此,它有一些有趣的特性。比如:

  • 存储池
  • 写时拷贝
  • 快照
  • 数据完整性验证和自动修复
  • RAID-Z
  • 最大单个文件大小为 16 EB(1 EB = 1024 PB)
  • 最大 256 千万亿(256*1015 )的 ZB(1 ZB = 1024 EB)的存储

ZFS的命名来源发想于”Zettabyte File System”的首字母缩写。但ZFS本身并不具备任何的缩写意涵,只是作者想阐述做为一个具备高扩展容量文件系统且还有支持许多延伸功能的一个产品。

ZFS的历史

ZFS(以前是:Zettabyte文件系统)结合了一个文件系统和一个卷管理器。它在2001年开始作为Sun Microsystems Solaris操作系统的一部分。Solaris的大部分内容–包括ZFS–从2005年起在开放源码许可下作为OpenSolaris发布了大约5年,然后在2009/2010年甲骨文公司收购Sun时被置于一个封闭源码许可下。在2005年至2010年期间,ZFS的开源版本被移植到Linux、Mac OS X(继续作为MacZFS)和FreeBSD。2010年,illumos项目fork了OpenSolaris的一个最新版本,以继续其作为一个开源项目的发展,包括ZFS。2013年,OpenZFS成立,以协调开源ZFS的发展。OpenZFS维护和管理核心的ZFS代码,而使用ZFS的组织维护特定的代码和验证过程,以使ZFS集成到他们的系统中。OpenZFS被广泛用于类似Unix的系统中。

特性介绍

存储池

与大多数文件系统不同,ZFS 结合了文件系统和卷管理器的特性。这意味着,它与其他文件系统不同,ZFS 可以创建跨越一系列硬盘或池的文件系统。不仅如此,你还可以通过添加硬盘来增大池的存储容量。此外,ZFS还可以进行分区和格式化。

写时拷贝

写时拷贝(Copy-on-write)是另一个有趣并且很酷的特性。在大多数文件系统上,当数据被重写时,它将永久丢失。而在 ZFS 中,新数据会写到不同的块。写完成之后,更新文件系统元数据信息,使之指向新的数据块(译注:COW也是实现快照的一种方式)。这确保了如果在写新数据的时候系统崩溃(或者发生其它事,比如突然断电),那么原数据将会保存下来。这也意味着,在系统发生崩溃之后,不需要运行 fsck 来检查和修复文件系统。

快照

写时拷贝使得 ZFS 有了另一个特性: 快照(snapshots)。ZFS 使用快照来跟踪文件系统中的更改。快照包含文件系统的原始版本(文件系统的一个只读版本),实时文件系统则包含了自从快照创建之后的任何更改。没有使用额外的空间。因为新数据将会写到实时文件系统新分配的块上。如果一个文件被删除了,那么它在快照中的索引也会被删除。所以,快照主要是用来跟踪文件的更改,而不是文件的增加和创建。

快照可以挂载成只读的,以用来恢复一个文件的过去版本。实时文件系统也可以回滚到之前的快照。回滚之后,自从快照创建之后的所有更改将会丢失。

数据完整性验证和自动修复

当向 ZFS 写入新数据时,会创建该数据的校验和。在读取数据的时候,使用校验和进行验证。如果前后校验和不匹配,那么就说明检测到了错误,然后,ZFS 会尝试自动修正错误。

RAID-Z

ZFS 不需要任何额外软件或硬件就可以处理 RAID(磁盘阵列)。毫不奇怪,因为 ZFS 有自己的 RAID 实现:RAID-Z 。RAID-Z 是 RAID-5 的一个变种,不过它克服了 RAID-5 的写漏洞:意外重启之后,数据和校验信息会变得不同步(译注:RAID-5 的条带在正写入数据时,如果这时候电源中断,那么奇偶校验数据将跟该部分数据不同步,因此前边的写无效;RAID-Z 用了 “可变宽的 RAID 条带” 技术,因此所有的写都是全条带写入)。为了使用基本级别的 RAID-Z(RAID-Z1),你需要至少三块磁盘,其中两块用来存储数据,另外一块用来存储奇偶校验信息。而 RAID-Z2 需要至少两块磁盘存储数据以及两块磁盘存储校验信息。RAID-Z3 需要至少两块磁盘存储数据以及三块磁盘存储校验信息。另外,只能向 RAID-Z 池中加入偶数倍的磁盘,而不能是奇数倍的。

巨大的存储潜力

创建 ZFS 的时候,它是作为最后一个文件系统而设计的 。那时候,大多数文件系统都是 64 位的,ZFS 的创建者决定直接跳到 128 位,等到将来再来证明这是对的。这意味着 ZFS 的容量大小是 32 位或 64 位文件系统的 1600 亿亿倍。事实上,Jeff Bonwick(其中一个创建者)说:“完全填满一个 128 位的存储池所需要的能量,从字面上讲,比煮沸海洋需要的还多。”

总结

本文只是简要介绍ZFS是什么和一些特性,更详细的解析请看ZFS系列后面的文章,也可以看本文列出的参考资料。
其中存储大师班 | ZFS存储池块管理与事务模型介绍得比较全面,还涉及到了一些具体的细节,也列出了很多参考资料,值得一看。
ZFS 分层架构设计这篇文章讲了ZFS的整体架构和多个特性,此外文章中还有ZFS的创始人的视频,可以一看(视频是YouTube上的,你懂的)。

参考资料

ZFS维基百科

初学者指南:ZFS 是什么,为什么要使用 ZFS?

存储大师班 | ZFS存储池块管理与事务模型

ZFS 分层架构设计

如果你觉得本文对你有帮助,欢迎打赏