OpenZFS版本更新录(202x)
2022-10-27 16:26:51 阿炯

本文是从OpenZFS的产品主页分离出来的,专门用于该软件相关的版本更新记录,截止到2030年之前。


最新版本:2.0
2020年12月2日,OpenZFS 2.0.0 已正式发布,新版本标志着开源 ZFS 文件系统在支持平台方面的重大突破——从最初的 ZFS On Linux 演变成如今统一支持 FreeBSD 和 Linux 的 OpenZFS(对 macOS 的支持工作仍在进行中)。除此之外,OpenZFS 2.0.0 也带来了许多新功能。统一的代码仓库和文档:ZFS on Linux 早已被重命名为 OpenZFS。现在 Linux 和 FreeBSD 通过同一个代码仓库获得支持,因此 OpenZFS 的所有功能都可以在这两个平台上使用:
Linux: 兼容 3.10 - 5.9 内核版本
FreeBSD: Release 12.2, stable/12, 13.0

主要新功能:
OpenZFS 2.0 增加了持久的 L2ARC 支持、Zstd 压缩支持、可编校的流 (redacted streams)、按顺序重新恢复(sequential resilvering)、改进 ZFS 命令/工具、多项性能优化,比如 SIMD 优化和各种加密速度调整等等。
按顺序重新恢复-此功能可以在传统恢复自动重新同步所需时间的一小部分内重建故障镜像 vdev,尽可能快地恢复完整的冗余,然后自动清理池以验证所有的数据校验和。
持久的 L2ARC 支持-此功能使 L2ARC 缓存设备在重新启动后保持持久,从而消除了导入数据池后通常需要的缓存预热时间。
ZStandard 压缩:ZStandard 是一种现代的高性能通用压缩算法,可以提供与 GZIP 相似或更好的压缩级别,但性能要好得多。ZStandard 提供了大量压缩级别选择,以允许存储管理员选择首选的性能/压缩权衡。
可编校zfs send/receive-可编校的流允许用户将其数据的子集发送到目标系统。通过不复制给定数据集中不重要的数据或选择性地排除敏感信息,用户可以节省空间。
此外,还有一些性能方面的改进,例如优化 SIMD、优化 AES-GCM 加密性能、改进zfs share伸缩性、更有效的 ARC 和内存管理和提升写入性能。更多详情点击这里查看。

OpenZFS 2.0.2 于2021年2月发布了,在此前1月初发布的 OpenZFS 2.0.1 已经增加了对 Linux 5.10 的支持和开发中的 Linux 5.11 的早期兼容性补丁,此次更新则进行了一些 bug 修复,并提供了 FreeBSD 13.0 (开发中) 的支持。部分更新内容:
避免不必要地更新L2ARC设备标头
修复 zrele_async 中的 zrele race,其可能导致挂起
修复 zfs-program.8 中的手册页链接
zfsprops.8:修复“默认值为”中的多语言错误
ZTS:使用 swapctl 列出 FreeBSD 上的交换设备
vdev_id:缺少 $CONFIG 时添加错误消息
放宽 special_small_blocks 断言
FreeBSD:对 VFS 接口的上游更改
dracut:支持将 /usr/bin 作为 “systemctl” 路径
将 zgenhostid 安装到 sbindir
更多详细内容请查看更新公告

OpenZFS 2.0.4 于2021年3月10日发布了,本次更新为 Linux Kernel 5.11 带来了官方支持,同时也为开发中的 Linux 5.12 带来了早期的兼容性。主要更新内容:
兼容 Linux Kernel 3.10 - 5.11
阐明压缩后的 ZFS 发送/接收行为
在 zfs_write 中允许 ZFS_READONLY
禁止 cppcheck 的无效语法警告
初始化 ZIL 缓冲区
zpool:使用 tab 从删除状态继续
支持使用 keylocation=file://
添加 “zstd-fast” 以帮助选择 “compression” 属性
修正 FreeBSD 特有的 dmu_read_pages 断言
Linux 5.12 兼容:用 disk_io_acct 替换 bio_io_acct
Linux 5.12 兼容:bio-> bi_disk 成员已移动
Linux:增加 nvlist_src_size 最大值
send_iterate_snap:全部发送而不用 fromsnap
详细内容请查看更新公告

虽然 OpenZFS 2.1 已在 7 月正式发布,但有不少用户仍在使用 OpenZFS 2.0.x 系列并且尚未准备好使用 dRAID 和其他较大的变更。因此官方针对这部分用户在2021年9月末发布了 OpenZFS 2.0.6 更新。属于维护版本,适用于尚未迁移到 v2.1 系列的用户。OpenZFS 2.0.6 最显著的更新是支持较新版本的 Linux 内核:OpenZFS 2.0.5 一直支持到 Linux 5.12,而 OpenZFS 2.0.6 现在支持 Linux 5.13/5.14 以及一些早期的 5.15 兼容性补丁。除此之外,OpenZFS 2.0.6 还包含部分特定于 FreeBSD 的修复和其他一些核心修复,完整变更说明和下载地址查看发行说明

OpenZFS 2.1.0 现已于2021年7月上旬发布,该版本主要更新内容如下:
支持的平台:Linux:兼容 3.10 - 5.13 内核;FreeBSD:兼容从 12.2-RELEASE 开始的版本。

主要新功能
Distributed Spare RAID(dRAID)- 允许使用 RAIDZ 的新分布式变体创建 pools,从而使用集成热备件加快重新同步时间。dRAID 的实施允许在进行 full disk 时,在 "一小部分时间 "内恢复完全冗余。
兼容性属性:新的兼容性属性允许管理员可以指定应该在 pool 中启用的功能集。这种精细的控制使创建可移植 pool 和维护 OpenZFS 版本之间和跨平台的 pool 兼容性变得容易。
InfluxDB 支持:使用zpool influxdb命令在 InfluxDB 时间序列数据库中收集 pool 的统计信息以进行分析和监控。

zpool/zfs命令的更改
zpool create -u:防止文件系统被自动挂载。
zpool history -i:pool 历史现在包括每个命令进行性能分析所用的时间。
zpool status:通知用户任何正在使用非最佳块大小的磁盘。
zfs send --skip-missing|-s:发送复制流时跳过丢失的快照。
zfs rename -u:无需重新安装即可重命名文件系统。

更新vdev_id以支持多路径模式下的 daisy-chained JBOD。
用新的 L2ARC 统计数据更新了arcstat,并添加了-a (all) 和-p (parsable)  命令行选项。
支持内存和 CPU hotplugging。
将acltype=posixacl重命名为acltype=posix,为兼容性添加了别名。
为公共库接口添加了自动 ABI 验证。
在 FreeBSD 上为 fletcher4 添加了 sysctl。

性能优化
改进了交互式 I/O 的性能。
针对并行工作负载优化预取。
通过减少对 locks 和 atomics 的争用来提高可扩展性。
减少 pool import time。
减少了 ZIL 块的碎片化。
通过轻量级写入提高zfs receive性能。
改进的内存管理。
改进了模块加载时间。
更多详情可查看此处

OpenZFS 2.1.1 已于2021年9月中旬发布,该版本大约包含了 90 个 fix,增加了对 Linux Kernel 5.14 的正式支持,以及对仍在开发中的 Linux 5.15 的早期兼容。还包括数据完整性修复、各种 ZTS 修复,持久性 L2ARC 修复、各种 FreeBSD 特有的问题、几种不同的优化,以及其他几十个随机修复。主要更新内容如下:
支持的平台:Linux:兼容 3.10 - 5.14 内核;FreeBSD:兼容从 12.2-RELEASE 开始的版本。

修复底层磁盘返回错误时的数据完整性问题
ZTS:等待 zvols 可用
验证 arc_read() 中的嵌入式 blkptr
Linux 5.15 兼容:get_acl()
即使元数据损坏,也允许发送损坏的快照
arc:删除错误的断言
具有不同 ashift 的压缩接收可能会导致磁盘上的 PSIZE 不正确
Linux 5.15 兼容:独立 <linux/stdarg.h>
Linux 5.15 兼容:block device readahead 12532
在 zpool cmd vdev media 脚本中检测 iSCSI
CI:不要安装 abigail-tools
通过新的 libabigail 版本更新 ABI 文件
Libabigail:使 .abi 文件更加一致
CI:通过 docker 镜像使用新的 libabigail
检查 libabigail 版本
ZTS:移除 FreeBSD 上的 flaky zhack 异常
FreeBSD:如果不是 SA znode,则不要删除 SA xattr
修复 zstd 的跨端互操作性#12008
ZTS:等待 zvols 可用
更多详情可查看此处

OpenZFS 2.1.3 已于2022年3月中旬发布,这是开源 ZFS 文件系统实现的最新版本,与现代 Linux 和 FreeBSD 系统兼容。
Linux: 兼容 3.10 - 5.16 内核
FreeBSD: 兼容自 12.2-RELEASE 以来的系统

新版本修复了大量错误,例如修复了 Linux 内核兼容性问题、zfs-receive、支持额外的 $KERNEL_* 环境变量、解决了 ZFS 问题、确保页面被清零、systemd 的每周和每月清理计时器、Zed 函数的 Pushover 通知支持、以及各种各样的其他修复。与 OpenZFS 2.1.2 只正式支持到 Linux 5.15 相比,OpenZFS 2.1.3 正式支持从 Linux 3.10 到 Linux 5.16 版本的内核。这个版本还对即将在未来几天发布的 Linux 5.17 进行了一些兼容性修复。相信 OpenZFS 2.1.3 最终会对即将发布的 Linux 5.17 版本有相当好的支持。详情查看发行说明

OpenZFS 2.1.5 已于2022年6月下旬发布,这是开源 ZFS 文件系统实现的最新版本,与现代 Linux 和 FreeBSD 系统兼容。新版本主要是修复错误,此外还包括面向 Linux 5.18 的兼容性更新,这意味着 OpenZFS 已官方支持最新的稳定版 Linux 内核,同时也保留对 Linux 3.10 的支持。OpenZFS 2.1.5 还包含针对 Linux 5.19 兼容性的补丁,不过这些补丁仍处于发布候选阶段,因此在下个月稳定发布之前仍可能出现破坏性变更。但无论如何,这至少说明 OpenZFS 已经开始测试下一个内核版本。至于 FreeBSD,目前兼容 FreeBSD 12.2-RELEASE 以及更新的版本。总结如下:
Linux:兼容 3.10 - 5.18 内核
FreeBSD:兼容自 12.2-RELEASE 以来的系统
其他变化
优化 sorted scan memory accounting
在 FreeBSD 上实现对 hole-punching 的支持
删除 dracut 的 zfs-load-module.service 安装
……
更多详情请查看发行说明

OpenZFS 2.1.6 已于2022年10月上旬发布,这是开源 ZFS 文件系统实现的最新版本,与现代 Linux 和 FreeBSD 系统兼容。该版本的更新内容主要集中在修复错误,值得注意的变化是扩展对 OpenZFS 内核模块的支持,以兼容较新版本的 Linux 内核。因此,OpenZFS 2.1.6 现在支持从 Linux 3.10 到 Linux 5.19 版本的内核,另外还针对新推出的 Linux 6.0 中的内核变化提供了部分初始补丁。相比之下,OpenZFS 2.1.5 最高只支持 Linux 5.18。2.1.6 支持平台情况如下:
Linux: 兼容 Linux 3.10 - 5.19 内核
FreeBSD: 兼容自 12.2-RELEASE 以来的系统

还包含对 B-tree 的优化、针对 FreeBSD 平台的多项特定修复、针对 sorted scrub 的优化、改进推测性预取器,以及其他各种小的改进:
FreeBSD: handle V_PCATCH,catch up to 1400068,stop passing LK_INTERLOCK to VOP_LOCK
FreeBSD: Fix integer conversion for vnlru_free{,_vfsops}(),Ignore symlink to i386 includes
LUA: Fix CVE-2014-5461
Linux: 修复 zio_do_crypt_data () 中未初始化的变量使用问题
重构 Log Size Limit,新增 zfs_btree_verify_intensity kernel module parameter

更多详情查看发行说明。OpenZFS 3.0 有望支持 macOS 和 DirectIO,继续优化 Window 版本。

2.1.7 已于2022年12月上旬发布,这是开源 ZFS 文件系统实现的最新版本,与现代 Linux 和 FreeBSD 系统兼容。与  5.19 相比,提供了数十个错误修复,同时将 Linux 内核支持扩展到 Linux 6.0 稳定版,意味着支持从 Linux 3.10 到 Linux 6.0 版本的内核。错误修复包括修复 Clang 编译问题、修复多个空指针取消引用、CI 更新,以及一些特定于 FreeBSD 的修复。具体大致如下:
将 ubuntu-20.04 用于 zloop 和 sanity 构建器
修复接收快照后设置 large_block 功能
修复 dbuf_prefetch_indirect_done () 中的 NULL 指针取消引用
Lua:修复 lua_strx2number () 中的错误位移位
修复 clang 13 编译错误
删除最终的 K&R 定义
模块:zfs:vdev_removal:删除未使用的 num_indirect
测试:cmd:draid:删除未使用和未记录的 -v
linux: libspl: 区域: () -> (void)
将 multipathd.target 更正为 .service #12709
修复 arc_p 激进增加 #14137
FreeBSD:修复 zfs_ioctl_ozfs_to_legacy () 中的越界读取问题

更多详情可查看发行说明。近日在旧金山举行了一年一度的 OpenZFS 开发者峰会,会议主题包括介绍 OpenZFS 现状、亚马逊 AWS 如何大规模使用 OpenZFS,以及开发者目前正在解决的一些优化和改进等内容。

2.1.10 已于2023年4月中旬发布,这是开源 ZFS 文件系统实现的最新版本,与现代 Linux 和 FreeBSD 系统兼容。支持最新的 Linux 6.2 系列,扩展了 Linux 内核兼容性。 Linux 6.3 内核将在未来两周左右发布,因此此版本中还有一些早期的 v6.3 兼容性更新。代码已经放弃了对 Python 2 以及 v3.5 及之前版本的 Python 3 的支持。还有许多错误修复:
改进的文本颜色输出支持
FreeBSD 修复
优化 microzaps
允许以普通用户身份在 .zfs/snapshot 中安装快照
更多详情查看更新公告

最新版本:2.2
OpenZFS 2.2 已于2023年10月中旬正式发布。此版本增加了许多新功能、性能改进和其他增强功能。支持平台:
Linux:兼容 3.10 - 6.5 版本内核
FreeBSD:兼容自 12.2-RELEASE 以来的版本

2.2版本中值得关注的变化包括:Linux 容器支持、BLAKE3 校验和块克隆 (block cloning) 功能。

块克隆 (block cloning) 功能支持通过仅创建对数据块的附加引用而无需复制数据本身,将文件(或文件块的子集)克隆到另一个(或相同)文件中。Block Cloning 属于快速的手动重复数据删除方式。Linux 容器支持包括用户命名空间中的 IDMAPPED 挂载、OverlayFS 支持和 Linux 命名空间委派支持。与算法相比,使用 BLAKE3 哈希的性能结果非常优秀,其速度比 SHA-256 和 SHA-512 快得多。尤其是 BLAKE3 支持 AVX2 和 AVX-512 优化模式。

此外,OpenZFS 2.2 还新增了用于修复文件系统中损坏数据的 "zfs receive" 纠正功能、Vdev 属性以及各种性能改进。在性能方面的改进包括完全自适应的 ARC、支持硬件加速的 SHA2 校验和、Zstd 提前终止、改进 prefetch 以及其他一般性能优化。更多详情查看发行说明

2.2.1 现已于2023年11月下旬发布。该版本修复了一个可导致用户出现数据损坏问题的块克隆 (block cloning) 错误,官方建议运行 zfs-2.2.0 的用户尽快更新升级。zfs-2.2.1 版本默认禁用块克隆(参阅 #15529 和 479dca5),以解决该问题。运行 2.1.x 分支或更早版本的用户不受影响,因为块克隆是 2.2.x 独有的功能。支持的平台:
Linux:兼容 3.10 - 6.6 版本内核
FreeBSD:兼容自 12.2-RELEASE 以来的版本

ZTS:修复 Alma 9 上 “无法卸载数据集” 的问题
zfs-2.2.1:默认禁用块克隆
添加一个可调参数以禁用 BRT 支持。
Packaging:配置期间自动生成变更日志
Linux 6.6 兼容:META
解决变量 arrays 的 UBSAN 错误
ZTS:测试所有已知的 zpool 功能集
允许在 Ubuntu 上安装 openzfs-zfs-dkms 的解决方法
修复 zpool iostat 中待处理同步 IO 操作的记账错误#
从 grub2 兼容性列表中删除 obsolete_counts
将所有只读兼容的 zpool 功能添加到 grub2 兼容性
统一 arc_prune_async() 代码
FreeBSD:改进 taskq wrapper
修复未加密和加密数据集之间的块克隆......

最新版本:2.3
2025年1月中旬消息,开源文件系统和卷管理器 OpenZFS 发布 v2.3 版本更新,主要针对 Linux 和 FreeBSD 系统,带来最新内核支持和多项新功能,并提升了性能、扩展了兼容性、修复了关键错误,为用户提供了更强大的存储解决方案。

v2.3 扩展内核支持,现支持 Linux 4.18 至最新的 Linux 6.12 LTS 内核;此外支持 RAIDZ 存储池在线扩容,可以在不停机的情况下向现有 RAIDZ 存储池添加新设备,提升存储容量。还提升了数据去重功能,大幅提升了原有数据去重功能的性能;并支持最长 1023 个字符的文件和目录名。

在兼容性方面,v2.3 新增支持 CentOS Stream 10 和 FreeBSD 14.2 操作系统。还增强 ARC 旁路功能,支持绕过 ARC 进行读 / 写操作,在 NVMe 等高速设备场景下,避免缓存影响效率,进一步提升性能。

v2.3.1 已于2025年3月中旬发布,新版本兼容 Linux 6.13 内核,以及修复了多项错误。对于在 Linux 上使用 OpenZFS 的用户来说,v2.3.1 现在与 Linux 6.13 上游兼容,而之前的 v2.3.0 版本仅支持到 Linux 6.12。v2.3.1 还包含一些初步的 Linux 6.14 兼容性内容,但尚未官方确认,因为 Linux 6.13 稳定版还需要两周时间才能最终确定。该版本还带来了各种 ZFS 文件系统驱动程序修复、更好的填充空元数据块、文档更新、各种 ZTS 修复以及其他一些小型的修复。