(一)ZFS的历史
Z文件系统(ZFS)由Matthew Ahrens和Jeff Bonwick于2001年创建。ZFS被设计为Sun Microsystems的 OpenSolaris的下一代文件系统。在2008年,ZFS被移植到FreeBSD。同年开始了一个项目,将ZFS移植到Linux。但是,由于ZFS是根据通用开发和发行许可证(与GNU通用公共许可证不兼容)获得许可的,因此它不能包含在Linux内核中。为了解决这个问题,大多数Linux发行版都提供了安装ZFS的方法。
在甲骨文收购Sun Microsystems之后不久,OpenSolaris成为了开源。ZFS的所有进一步开发也成为封闭源。ZFS的许多开发人员对此事件感到不满。由于这一决定,包括Ahrens和Bonwick在内的ZFS核心开发者中有三分之二离开了Oracle。他们加入了其他公司,并于2013年9月创建了OpenZFS项目。该项目带头推动了ZFS的开源开发。
让我们回到上面提到的许可证问题。由于OpenZFS项目与Oracle是分开的,因此有些人可能想知道为什么他们不将许可证更改为与GPL兼容的许可证,以便可以将其包含在Linux内核中。根据OpenZFS网站,更改许可证将涉及与向当前OpenZFS实现贡献代码的任何人联系(包括初始的通用ZFS代码,直到OpenSolaris为止),并获得他们的许可以更改许可证。由于这项工作几乎是不可能的(因为某些贡献者可能死了或很难找到),因此他们决定保留自己的许可证。
(二)什么是ZFS?有什么特点?
如前所述,ZFS是高级文件系统。这样,它具有一些有趣的功能。如:
- 存储池
- 写时拷贝
- 快照
- 数据完整性验证和自动修复
- RAID-Z
- 最大单个文件大小为 16 EB(1 EB = 1024 PB)
- 最大 256 千万亿(256*1015 )的 ZB(1 ZB = 1024 EB)的存储
1、存储池
与大多数文件系统不同,ZFS结合了文件系统和卷管理器的功能。这意味着与其他文件系统不同,ZFS可以创建跨一系列驱动器或池的文件系统。不仅如此,您还可以通过添加另一个驱动器将存储添加到池中。ZFS将处理分区和格式化。
2、写时拷贝
写时拷贝是另一个有趣且很酷的功能。在大多数文件系统上,当数据被覆盖时,它会永远丢失。在ZFS上,新信息将写入另一个块。写入完成后,文件系统元数据将更新为指向新信息。这样可以确保如果在写入过程中系统崩溃(或发生其他情况),则将保留旧数据。这也意味着系统崩溃后无需运行fsck。
3、快照
写入时拷贝导致ZFS的另一个功能:快照。ZFS使用快照来跟踪文件系统中的更改。“快照包含文件系统的原始版本,实时文件系统包含自拍摄快照以来所做的任何更改。没有使用额外的空间。在将新数据写入实时文件系统时,将分配新的块来存储此数据。” 如果删除了文件,则快照引用也将被删除。因此,快照主要用于跟踪文件更改,但不能跟踪文件的添加和创建。
快照可以只读方式安装,以恢复文件的旧版本。还可以将实时系统回滚到先前的快照。自快照以来所做的所有更改都将丢失。
4、数据完整性验证和自动修复
每当将新数据写入ZFS时,它都会为该数据创建一个校验和。读取该数据后,将校验和。如果校验和不匹配,则ZFS知道已检测到错误。ZFS随后将自动尝试纠正该错误。
5、RAID-Z
ZFS可以处理RAID,而无需任何其他软件或硬件。毫不奇怪,ZFS具有自己的RAID实现:RAID-Z。RAID-Z实际上是RAID-5的变体。但是,它旨在克服RAID-5写孔错误,即“在意外重启后数据和奇偶校验信息不一致”的问题。要使用基本级别的RAID-Z(RAID-Z1),您至少需要两个磁盘用于存储,一个磁盘用于奇偶校验。RAID-Z2至少需要两个存储驱动器和两个用于奇偶校验的驱动器。RAID-Z3至少需要两个存储驱动器和三个驱动器以实现奇偶校验。将驱动器添加到RAID-Z池时,必须以两个的倍数添加它们。
6、巨大的存储潜力
创建 ZFS 的时候,它是作为最后一个文件系统而设计的 。那时候,大多数文件系统都是 64 位的,ZFS 的创建者决定直接跳到 128 位,等到将来再来证明这是对的。这意味着 ZFS 的容量大小是 32 位或 64 位文件系统的 1600 亿亿倍。事实上,Jeff Bonwick(其中一个创建者)说:“完全填满一个 128 位的存储池所需要的能量,从字面上讲,比煮沸海洋需要的还多。”
7、如何安装 ZFS
如果你想立刻使用 ZFS(开箱即用),那么你需要安装 FreeBSD操作系统。
事实上,支持 ZFS 是一些有经验的 Linux 用户选择 BSD 的主要原因。
如果你想在 Linux 上尝试 ZFS,那么只能在存储文件系统上使用。据我所知,没有任何 Linux 发行版可以在根目录上安装 ZFS,实现开箱即用。