Zpool scrub在系统重启后无法自动恢复的问题求助
系统环境
- Linux Mint 21.3
- 内核版本:
6.5.0-26-generic - ZFS用户空间版本:
zfs-2.2.3-0ofthesun1 - ZFS内核模块版本:
zfs-kmod-2.2.0-0ubuntu1~23.10.2
问题描述
我已经成功创建了zpool,存入了一些数据并启动了scrub。但在scrub运行过程中我重启了系统,之后执行zpool status显示scrub处于暂停状态,而且不会自动恢复。
我还有另一台配置类似的系统,同样是Linux Mint 21.3,但使用的是原生ZFS和5.x内核,那台机器重启后scrub会自动继续。
我对比过两台机器的配置,但因为经验有限,没能找到问题所在,希望能得到大家的帮助!
排查与解决建议
你好,我来分享几个可能的排查方向和解决办法,希望能帮到你:
先尝试手动恢复scrub
先执行zpool resume <你的zpool名称>,然后再用zpool status查看状态,确认是否能继续运行。如果手动能恢复,那问题大概率是自动恢复的机制在新版本ZFS/内核组合下出了异常。检查ZFS相关服务的启动状态
系统启动时ZFS服务的正常激活是自动恢复scrub的前提,你可以用以下命令查看相关服务状态:systemctl list-units --type=service | grep zfs确保
zfs.target、zfs-mount.service等核心服务都处于active状态。如果有服务未正常启动,尝试手动启动并设置开机自启(比如systemctl enable --now zfs-mount.service)。重点注意ZFS版本不匹配问题
观察到你的ZFS用户空间版本(2.2.3)和内核模块版本(2.2.0)不一致,这是很关键的点!ZFS对用户空间工具和内核模块的版本一致性要求很高,版本 mismatch 很可能导致各种异常行为,包括scrub自动恢复失效。建议你把两者版本统一:要么升级内核模块到2.2.3,要么降级用户空间工具到2.2.0,之后再测试重启后scrub是否能自动恢复。查看系统启动日志找线索
通过查看本次启动的ZFS相关日志,可能会找到scrub未自动恢复的具体原因:journalctl -u zfs.service -b仔细排查日志里的错误、警告信息,比如是否有池挂载延迟、scrub恢复逻辑触发失败的记录。
对比zpool参数差异
用zpool get all <你的zpool名称>导出当前池的所有参数,然后和另一台正常机器的参数对比,看看有没有和scrub相关的参数(比如scrub_timeout)被修改过,差异点可能就是问题所在。临时 workaround:添加开机自动恢复脚本
如果以上方法都没解决问题,可以考虑加一个开机触发的脚本,自动检查并恢复暂停的scrub。比如创建一个简单的systemd服务:- 创建服务文件
/etc/systemd/system/zfs-scrub-resume.service:[Unit] Description=Resume paused ZFS scrub on boot After=zfs-mount.service [Service] Type=oneshot ExecStart=/bin/bash -c 'pool_name="你的zpool名称"; if zpool status $pool_name | grep -q "scrub paused"; then zpool resume $pool_name; fi' [Install] WantedBy=multi-user.target - 启用并启动服务:
systemctl enable --now zfs-scrub-resume.service
- 创建服务文件
备注:内容来源于stack exchange,提问作者Dominik

