df命令卡住了;umount报错umount.nfs4: /data/xxx/upload: device is busy

2022-11-21 21:19:54 浏览数 (2)

问题描述

正式环境出现了不能上传图片,图片不能浏览的问题,上正式环境进行排查,在使用df -h命令的时候卡住不动了,其他命令没问题。运行内存以及cpu都是正常的。 正式环境服务器 /data/xxx/upload的目录是进行了nfs挂载

在取消挂载之前找出原挂载方式

代码语言:javascript复制
[root@node01 ~]# mount -l | grep /data/xxx/upload
192.168.x.10:/data/upload on /data/xxx/upload type nfs4 (rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.x.4,local_lock=none,addr=192.168.x.10)
或者通过
[root@node01 ~]# cat /etc/mtab | grep /data/xxx/upload
192.168.x.10:/data/upload /data/xxx/upload nfs4 rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.x.4,local_lock=none,addr=192.168.x.10 0 0

可以看出服务端与客户端的nfs挂载方式

问题解决

首先可以先跟踪df -h命令在哪里卡住了 使用strace命令

代码语言:javascript复制
strace df -h

如果服务器没这个命令,进行安装

代码语言:javascript复制
yum -y install strace

如下,就准确的知道df -h这个命令卡在了哪里,果然确实是nfs挂载的那个目录

尝试使用umount取消挂载但是会卡住不动 当有别的程序正在访问挂载的文件时,也会提示卸载失败,通过 lsof /xxx 查看是哪个进程占用了/xxx,kill -9 $pid ,然后再卸载,进程少的时候这个方便一些,一旦进程量过大就不方便了

加参数 -f 也会报错

使用【umount -l /data/xxx/upload】命令可以解决挂载问题 使用:umount -l /xxx (-l : 卸载前检查占用该挂载文件的程序并迅速kill掉,以达到快速卸载的目的) 也可以umount -lf /xxx

代码语言:javascript复制
[root@node01 ~]# umount -l /data/xxx/upload

[root@node01 ~]# umount /data/xxx/upload
umount: /data/xxx/upload: not mounted

测试df -h命令是否恢复正常

重新进行挂载 客户端:

代码语言:javascript复制
重启nfs:
systemctl stop nfs

systemctl start nfs

服务器端:

代码语言:javascript复制
重启nfs、rpcbind
systemctl stop nfs
systemctl stop rpcbind

#让nfs生效
exportfs -rv 
启动
systemctl start nfs
systemctl start rpcbind

客户端重新挂载

df -h命令查看

成功解决

0 人点赞