昨天,在 FreeBSD 10.3-RELEASE-p20 系统上尝试更换 zpool 中的磁盘时,发出命令后 zfs 文件系统变得无响应zpool detach srv gpt/d0
。该服务器充当 NFS 服务器、WebDAV 服务器和 iSCSI 目标,执行zpool detach
所有 iSCSI 客户端后,开始出现超时。
这显然导致整个 ZFS 子系统锁定。zpool status
或者任何其他命令都会挂起并且不产生任何输出。 中没有显示任何内容dmesg
,也top
没有显示任何消耗大量 CPU 的进程。最后我们无法找到任何解决方案,被迫重新启动系统(包括使用硬重启,因为软重启在停止所有服务后无法重新启动系统)以使 iSCSI 目标重新上线。
zpool detach
是什么原因导致了这种情况?我们该如何避免?在 FreeBSD 下更换 ZFS 池中的设备时,如何防止挂起?
答案1
看起来这个问题在 11.0-RELEASE 中已经修复了:https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=216881
我猜他们认为它不值得移植到 10.3-RELEASE-p22。:(
答案2
我不确定为什么这种情况确实会发生,但我们发现此问题与在池上启用 ZFS Autoexpand 有关。autoexpand=off
使用以下设置:
zpool set autoexpand=off srv
允许我们拆卸和更换其他设备,而无需zpool detach
以相同的方式挂起。
我仍然有兴趣了解有关此故障模式的更多信息,但我正在回答我自己的问题,希望分享禁用自动扩展可以解决此问题的知识。