ZFS History
-
ZFS 的诞生:ZFS 由 Sun 存储部门的 CTO 、研究员 Jeff Bonwick 带领团队开发。开发于 2001 年,作为 Sun Microsystems Solaris 操作系统的一部分。
-
带领开发 ZFS 的是 Jeff Bonwick。他首先有了对 ZFS 整体架构的构思,然后游说 Sun 高层,亲自组建起了 ZFS 开发团队。
-
招募了当时刚从大学毕业的 Matt Ahrens,又从 Solaris 的 Storage Team 抽调了 UFS 部分的负责人 Mark Shellenbaum 和 Mark Maybee 来开发 ZFS。
-
-
ZFS 的开源:在 2005 年,Sun 开源 Solaris 的大部分,包括 ZFS 开源;开源项目 OpenSolaris。
-
illumos 项目成立,OpenZFS:
- 在 2010 年,Sun 被 Oracle 收购,ZFS 成为 Oracle 的注册商标。Oracle 停止为 OpenSolaris 和 ZFS 项目提供更新的源代码,三分之二的 ZFS 核心开发者决定离开 Oracle 公司。
- illumos 项目的成立,维护已经存在的开源的 Solaris 代码,并且在 2013 年成立 OpenZFS 以配合 ZFS 开源的发展。
-
ZFS on Linux:2013 年,Linux 上 ZFS 的第一个稳定版本,继续发展。
ZFS Overview
ZFS(Zettabyte File System)是一个跨时代的文件系统,被称为最后一个单机文件系统,已经被证实可以移植到多种 OS 平台上。它拥有如下特性:
-
完全兼容 posix 语义(ZPL: ZFS POSIX Layer)。
-
提供逻辑卷功能(ZVOL: ZFS Volumes)。
-
提交完善的管理功能:通过 libzfs 的工具,经过 ioctl 发送管理命令到 zfs kernel module。
-
提供接近无限的存储空间:将物理存储设备进行池化管理,文件系统建立在设备存储池上。当文件系统空间不够,可以将物理设备动态添加存储池中。存储池上的单个文件系统极限值:
-
支持 2^{48} 个快照。
-
支持 2^{48} 个文件。
-
单个文件最大 16EB。
事务模型 + COW:
-
-
事务模型和 COW 是强绑定的关系。
-
COW(Copy On Write):对文件的数据不是原地直接修改,而是拷贝更新的方式,数据块的内容更新不存在中间状态。
-
事务:保证了对文件的一组操作都是原子性的,并且每个事务之间是相互独立的。所有文件的同一个事务 ID 的集合打包成一个事务组,进行从 file 到 root 的全局的拓扑的更新。
-
事务 TX 和事务组 TXG 的关系(在事务模型章节详细介绍):
-
XG:在同一个事务 ID(TXG-num)下的 TX 构成一个事务组 TXG
-
当一个 TXG 中的被需要改的数据达到一个阈值(脏数据阈值),或者周期到了,发生一次事务组的轮转,在这个事务组的 sync 结束之后,生成一个全新的 root 的拓扑树(layout)。
-
- 端到端的数据安全性:
-
256 位的 Checksum,Checksum 的数据存储在父亲节点上。
-
形成一棵自验证的 Merkle Tree, 当 ZFS 在 load 数据时会进行校验。
-
它在负责读取数据的时候会自动和 256 位校验码进行校验,会主动发现这种 Silent Data Corruption:
-
通过相应的 Mirror 硬盘或者通过 RAID-Z 阵列中其他硬盘得到正确的数据返回给上层应用,并且同时自
-