卸载 NFS 失败的解法
目录
问题
最近测试 NFS 与 k8s 集成,测试完想卸载 NFS 却发现报设备忙,具体错误如下:
umount /nfs
umount.nfs4: /nfs: device is busy
排查思路
网上查了一圈,建议首先用 lsof
查看哪个进程在使用 NFS,然后停止这个进程后再试:
如果系统没有 lsof 可以用下列命令安装:
yum install lsof
执行结果:
lsof /nfs
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1804 root cwd DIR 0,140 4096 281474976710775 /nfs (10.10.50.2:/nfs)
执行 kill 1804
发现进程还在,通过 ps -ef 查看 1804 是谁在用,发现是 tty1,也就是 console 在用,登录console 发现确实有个 bash 在 /nfs 下,只需要切换到其他文件夹即可。
ps -ef | grep 1804
root 1804 916 0 Jul21 tty1 00:00:00 -bash
再次执行下列命令,返回结果皆为空:
lsof /nfs
umount /nfs
其他手段
上述操作为标准操作,下面是其他方法:
重新挂载 nfs 再卸载
mount -o remount /nfs
umount /nfs
强制卸载
umount -f /nfs
Lazy umount
# mount 会从文件系统的namespace中移除,但是此时还处于挂载状态,直到最后一个使用此挂载点的进程退出,才会完成卸载。
umount -l /nfs
重启大法
#重启 nfs-common
systemctl restart nfs-common
umount /nfs
使用 fuser(find user processes) 卸载
#下列命令可以查找出哪个进程在用这个命令
fuser -mv /nfs
## -m 表示列出所有在访问挂载点的进行
## -v 表示显示类似于 ps 的输出
#查找到占用的进程并停止对应的进程
fuser -k /nfs
fuser -k -9 /nfs
#卸载
umount /nfs