![]()
内核支持又双叒叕往前推了
Openzfs 2.4.4 刚刚作为最新的维护版发布。别看是“小版本”,这次直接把官方支持的 Linux 内核范围拉到了 4.18 到 7.2。没错,7.2 的内核也已经安排上了。
怎么适配的?开发组把 ZFS 的超级块代码迁到了内核的 sget_fc() 接口,算是跟上了新内核的步伐。FreeBSD 那边也没落下,13.3 和 14.0 及后续版本继续稳稳支持。
新工具:MMP 恢复,救回“被抛弃”的存储池
这次最抢眼的,是一个叫 zhack mmp reclaim 的新命令。它是干嘛的?专门用来抢救被 Multi-Modifier Protection 卡死的存储池。
MMP 是 ZFS 的一道保险,防止多个系统同时导入并修改同一个池,否则数据分分钟坏给你看。但有时候这个机制会误判,让池子卡在那动不了。新命令就是针对这种情况——帮你把“僵住的池”拉回来。
另外,MMP 逻辑本身也做了优化:能更好地区分 uberblock 申请失败还是别的系统真在干活;活动检查时跳过不可写的虚拟设备;处理降级镜像时,如果某些盘标记缺失,现在也更从容了。
系统启动更快,依赖被砍了一刀
以前 systemd 导入池时,必须傻等 udev 把所有设备处理完。这次 OpenZFS 2.4.4 把 systemd-udev-settle 改成了可选依赖——不再无条件等待,启动速度自然就上来了。
去重表、L2ARC、读写各种修
去重表(DDT)那边修了一串:DDT 修剪时的负时间溢出、多个修剪 bug、去重验证时锁不够、DDT 日志里引用计数标记错误……全是容易踩坑的地方。
L2ARC 也有一处修复:第一次扫描时,重建过程会被写指针限速,避免过度消耗资源。
还有,修复了读取“被克隆后释放的块”的问题;Direct I/O 的验证事件也做了限频,免得日志被刷爆。
Linux 特有修复:死循环、mmap、时间戳
在 Linux 上,zfs_write() 操作不可 fault 的缓冲区时可能陷入无限循环——这次堵上了。mmap() 读文件超出末尾的问题也修了。另外,用 fallocate() 扩展文件时,修改时间和变更时间现在能正确更新了。
池管理更严谨,导出不再“强行走”
zpool export 现在更懂事了:如果池里的 zvol 次设备还在使用,它会返回 EBUSY 报错,而不是硬着头皮导出。设备移除和导出之间的竞态条件也修了。
接收、权限、ACL 缓存都动了
修复了接收拆分大块时尾部短块的处理;纠正了 zfs receive -x 的行为;DMU 接收代码里一个潜在的空指针解引用也被干掉了。回滚后残留的 POSIX ACL 缓存问题,这次也一并清理。
权限方面新增了 send:encrypted 委托权限,可以更细粒度地控制普通用户能否发送加密数据集。
杂七杂八,但都挺实用
设备权限检查更安全了;libzfs 里的字符串和内存处理更谨慎;断点续传的接收修复了;分区磁盘扩容后池自动扩展的逻辑也改进了。还有一堆构建、CI、测试套件和 FreeBSD 相关的更新。
想翻完整变更列表?https://github.com/openzfs/zfs/releases/tag/zfs-2.4.4。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.