如何修复zpool detach悬挂整个池?

当试图在FreeBSD 10.3-RELEASE-p20系统中的zpool中replace一个磁盘时,在发出zpool detach srv gpt/d0命令后,zfs文件系统变得没有响应。 服务器充当NFS服务器,WebDAV服务器和iSCSI目标,并且在执行zpool detach所有iSCSI客户端都开始出现超时。

这显然导致整个ZFS子系统locking。 zpool status或任何其他命令只会挂起并不产生任何输出。 dmesg中没有显示任何内容, top没有显示任何消耗大量CPU的进程。 最后,我们无法find任何解决scheme,并被迫重新启动系统(包括使用硬重启,因为在停止所有服务后软重启无法重启系统),以使iSCSI目标重新联机。

是什么原因造成这种情况,我们该如何避免呢? 在FreeBSD下更换ZFS池中的设备时,我们如何防止zpool detach挂起?

看起来像这是修复在11.0-RELEASE: https : //bugs.freebsd.org/bugzilla/show_bug.cgi? id = 216881

我想他们不认为它值得10.3-RELEASE-P22的后台端口。 🙁

我不确定为什么发生这种情况,但是我们发现这个问题与在池中启用ZFS Autoexpand有关。 设置autoexpand=off使用:

 zpool set autoexpand=off srv 

允许我们拆卸和更换更多的设备,而不使用zpool detach挂在同样的方式。

我仍然有兴趣了解更多关于这种故障模式的信息,但是我正在回答我自己的问题,希望能够共享停用autoexpand可以解决此问题的知识。