ZFS数据集SSDs/hs-b44gx无法销毁(提示忙)及无法设置挂载点的问题求助
嗨,Dennis,我来帮你分析下这个问题,应该能帮你找到解决方向:
首先,从你遇到的mountpoint属性无法设置的错误来看,这个SSDs/hs-b44gx大概率是ZFS卷(zvol)——也就是块设备类型的数据集,这类数据集是直接作为块设备使用的,不是常规的文件系统数据集,所以确实不能设置挂载点,也不会像普通数据集那样挂载到文件系统里。
接下来解决“忙”的问题,因为它是块设备,大概率是被某个进程占用了,或者被当作块设备挂载/使用了,你可以按下面的步骤一步步排查:
先确认它的具体类型
用这条命令明确数据集类型:zfs get type SSDs/hs-b44gx如果结果里
type字段显示volume,就实锤是zvol了。检查是否有进程在占用这个块设备
ZFS卷对应的块设备文件一般在/dev/zvol/SSDs/hs-b44gx,你可以用这两个工具排查占用进程:lsof /dev/zvol/SSDs/hs-b44gx # 或者用fuser fuser /dev/zvol/SSDs/hs-b44gx要是查到有进程占用,先停止对应的进程,再尝试销毁操作。
检查是否被当作块设备挂载了
有些情况下,zvol可能被单独格式化成文件系统并挂载到系统里了,你可以用这两条命令排查:# 查挂载记录 mount | grep hs-b44gx # 查块设备是否有文件系统标识 blkid /dev/zvol/SSDs/hs-b44gx如果确实被挂载了,先卸载它:
umount /dev/zvol/SSDs/hs-b44gx检查是否有快照或克隆依赖
要是这个数据集有快照,或者存在基于它的克隆,也会导致无法销毁,你可以用这条命令查看相关快照:zfs list -t snapshot -r SSDs/hs-b44gx有快照的话先销毁快照,有克隆的话先删掉克隆,再尝试销毁原数据集。
强制销毁的最后手段(谨慎使用)
如果上面的步骤都试过还是不行,你可以尝试加-f参数强制销毁(注意这会直接删除数据,确保你确实不需要它):zfs destroy -f SSDs/hs-b44gx要是还不行,再试试递归强制销毁(如果它下面还有子数据集的话):
zfs destroy -rf SSDs/hs-b44gx
另外,因为你的池是从FreeNAS迁移过来的,这个zvol很可能在FreeNAS上被用作过虚拟机磁盘、iSCSI目标这类用途,迁移到Ubuntu后残留的配置或者关联进程导致它被占用,你也可以检查下系统里是否有iSCSI服务、虚拟机相关进程在运行,看看是不是和这个zvol有关联。
备注:内容来源于stack exchange,提问作者Dennis

