如何修复 zpool detach 挂起整个池的问题?

如何修复 zpool detach 挂起整个池的问题?

昨天,在 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以相同的方式挂起。

我仍然有兴趣了解有关此故障模式的更多信息,但我正在回答我自己的问题,希望分享禁用自动扩展可以解决此问题的知识。

相关内容