Link

卸载 NFS 失败的解法

目录

  1. 卸载 NFS 失败的解法
  2. 问题
  3. 排查思路
  4. 其他手段
    1. 重新挂载 nfs 再卸载
    2. 强制卸载
    3. Lazy umount
    4. 重启大法
    5. 使用 fuser(find user processes) 卸载

问题

最近测试 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