OpenZFS2.0版本统一了Linux和BSD并添加了大量新功能
本周一,Linux 上的 ZFS 首席开发人员 Brian Behlendorf向 GitHub发布了 OpenZFS 2.0.0版本。除了许多新功能外,该公告还结束了“Linux 上的 ZFS”和其他地方(例如,在 FreeBSD 上)ZFS 之间的区别。这一举措已经进行了很长时间——FreeBSD 社区在两年前制定了路线图的一面——但这次发布使其正式化。
可用性
新的 OpenZFS 2.0.0 版本已经在 FreeBSD 上可用,它可以从 FreeBSD 12 系统上的端口(覆盖基本系统 ZFS)安装,并将成为即将发布的 FreeBSD 13 中的基本 FreeBSD 版本。在 Linux 上,情况是有点不确定,主要取决于正在运行的 Linux 发行版。
使用 DKMS 构建的 OpenZFS 内核模块的 Linux 发行版用户往往会很快获得新版本。支持更好但移动速度较慢的 Ubuntu 的用户可能在 Ubuntu 21.10 之前可能不会看到 OpenZFS 2.0.0,也就是从现在开始将近一年。对于愿意生活在边缘的 Ubuntu 用户来说,流行但第三方和单独维护的jonathonf PPA 可能会使其更快地可用。
OpenZFS 2.0.0 模块可以从 3.10-5.9 的 Linux 内核的源代码构建——但大多数用户应该坚持从发行版或成熟的开发人员那里获取预构建的模块。“远远超出常规”不是一个通常应用于保存宝贵数据的文件系统的短语!
新特性
顺序重新同步
在 ZFS 中重建降级阵列历来与传统 RAID 非常不同。在几乎为空的阵列上,ZFS 重建(称为“重新同步”)要快得多,因为 ZFS 只需要接触磁盘的已使用部分,而不是克隆整个驱动器上的每个扇区。但是这个过程涉及大量的随机 I/O——所以在更接近完整的阵列上,传统 RAID 更行人的逐块全磁盘重建速度要快得多。通过顺序重新同步,ZFS 获得了两全其美的优势:主要是顺序访问,同时仍然跳过所涉及磁盘的未使用部分。
持久性 L2ARC
ZFS 最引人注目的功能之一是其高级读取缓存,称为 ARC。具有非常大、非常热的工作集的系统还可以实现称为 L2ARC 的基于 SSD 的读取缓存,它从 ARC 中接近驱逐的块中填充自身。从历史上看,L2ARC 的最大问题之一是,虽然底层 SSD 是持久的,但 L2ARC 本身不是——它在每次重新启动(或池的导出和导入)时变空。这一新功能允许 L2ARC 中的数据在池导入/导出周期(包括系统重启)之间保持可用和可行,从而大大增加了 L2ARC 设备的潜在价值。
Zstd压缩算法
OpenZFS 提供透明的内联压缩,可在每个数据集的粒度上进行控制。传统上,最常用的算法是 lz4,这是一种流算法,压缩率相对较差,但 CPU 负载非常轻。OpenZFS 2.0.0 支持 zstd——一种由 Yann Collet(lz4 的作者)设计的算法,旨在提供类似于 gzip 的压缩,CPU 负载类似于 lz4。
这些图有点难以理解——但本质上,它们表明 zstd 实现了其目标。在压缩(磁盘写入)期间,zstd-2 甚至比 gzip-9 更有效,同时保持高吞吐量。
与 lz4 相比,zstd-2 的压缩率提高了 50%,但吞吐量降低了 30%。在解压(磁盘读取)方面,吞吐量损失略高,约为 36%。
请记住,所描述的吞吐量“惩罚”假设存储介质本身的瓶颈可以忽略不计。在实践中,大多数 CPU 可以围绕大多数存储介质运行环(即使是相对较慢的 CPU 和快速的 SSD)。ZFS 用户普遍习惯于看到 lz4 压缩在现实世界中加速工作负载,而不是减慢它们!
编辑复制
这个有点脑残。比方说,有数据的部分,你不希望备份使用ZFS的复制。首先,克隆数据集。接下来,您从克隆中删除敏感数据。然后,您在父数据集上创建一个书签,标记从父数据集更改为克隆数据集的块。最后,您可以将父数据集发送到其备份目标,包括参数——这只会将非敏感块复制到备份目标。