正如我前面提到的,ZFS 是一种高级文件系统。因此,它具有一些有趣的功能[9]。如:
存储池
与大多数文件系统不同,ZFS 结合了文件系统和卷系统管理器的功能。这意味着与其他文件系统不同,ZFS 可以创建跨越一系列驱动器或池的文件系统。不仅如此,还可以通过添加另一个驱动器将存储添加到池中。ZFS 将处理分区和格式化[10]。
ZFS 中的存储池
写时拷贝[11] 是另一个有趣(而且很酷)的功能。在大多数文件系统上,当数据被覆盖时,它会永远丢失。在 ZFS 上,新信息被写入不同的块,写入完成后,文件系统元数据将更新以指向新信息。这确保如果在写入过程中系统崩溃(或发生其他事情),旧数据将被保留,这也意味着系统在崩溃后不需要运行文件系统检查 fsck (file system check)[12]。
写时拷贝导致另一个 ZFS 功能:快照。ZFS 使用快照来跟踪文件系统中的更改。“快照包含文件系统的原始版本,实时文件系统包含自快照以来所做的任何更改,不使用额外的空间。当新数据写入实时文件系统时,会分配新块来存储这些数据。” 如果文件被删除,快照引用也会被删除。因此,快照主要用于跟踪文件的更改,而不是文件的添加和创建。
快照能够以只读方式挂载以恢复文件的过去版本,还可以将实时系统回滚到以前的快照。一旦快照没了,所有更改都将丢失。
每当新数据写入 ZFS 时,它都会为该数据创建校验和(checksum)。当读取该数据时,校验和被验证。如果校验和不匹配,则 ZFS 知道已检测到错误。然后 ZFS 将自动尝试更正错误。
ZFS 无需任何额外的软件或硬件即可处理磁盘阵列 RAID (Redundant Arrays of Independent Disks)。ZFS 有自己的 RAID 实现:RAID-Z。RAID-Z 实际上是 RAID-5 的变体,为了克服 RAID-5 的 WriteHole 问题,即“意外重启后数据和奇偶校验信息变得不一致”。要使用基本的 RAID-Z (RAID-Z1)[13],至少需要 2 块磁盘用于存储,1 块磁盘用于奇偶校验[14]。RAID-Z2 至少需要 2 个存储驱动器和 2 个用于奇偶校验的驱动器。RAID-Z3 则至少需要 2 个存储驱动器和 3 个用于奇偶校验的驱动器。将驱动器添加到 RAID-Z 池时,它们必须以 2 的倍数添加。
ZFS 在创建之初,就被设计为最后一代文件系统[15]。在大多数文件系统都是 64 位的时候,ZFS 创建者决定直接跳到 128 位以备未来验证。这意味着 ZFS “提供了 32 位或 64 位系统容量的 160 亿倍”。事实上,Jeff Bonwick 表示,“要填满一个 128 位的文件系统,将耗尽地球上所有存储设备。除非你拥有煮沸整个海洋的能量,不然你不可能将其填满”[16]。“fully populating a 128-bit storage pool would, literally, require more energy than boiling the oceans.”
如果想开箱即用地使用 ZFS,则需要安装 FreeBSD[17] 或使用 illumos 内核的操作系统。illumos[18] 是 OpenSolaris 内核的一个分支。
事实上,对 ZFS 的支持是一些有经验的 Linux 用户选择 BSD [19] 的主要原因之一。
如果想在 Linux 上试用 ZFS,可以将其用作存储文件系统。最近,Ubuntu 19.10 引入了在根目录上开箱即用安装 ZFS 的功能。阅读有关在 Ubuntu 上使用 ZFS[20] 的更多信息。如果有兴趣在 Linux 上尝试 ZFS,Linux 项目上的 ZFS 有许多教程。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。