有时候我们需要umount某个挂载目录时会遇到如下问题:
[root@localhost /]# umount /data/
umount.nfs: /data: device is busy
出现此问题的原因可能有:
1、有其他进程正在占用此目录
通过这条命令查看:
[root@localhost /]# fuser -m -v /data/
-v 表示 verbose 模式。进程以 ps 的方式显示,包括 PID、USER、COMMAND、ACCESS 字段
-m 表示指定文件所在的文件系统或者块设备(处于 mount 状态)。所有访问该文件系统的进程都被列出。
如上所示,有两个进程占用了,将其kill掉,再重新取消挂载。
[root@localhost /]# kill -9 2798
[root@localhost /]# kill -9 2996
[root@localhost /]# umount /data/
[root@localhost /]#
2、正在将要umount的目录下
退出此目录
3、fuser 概述
fuser命令是用来显示所有正在使用着指定的file, file system 或者 sockets的进程信息。
[root@gc-statis2 ]# fuser -m -v tests/
同时fuser 可以用来查找哪些进程正在使用指定的端口(network port).
[root@gc-statis2 ]# fuser -v -n tcp 80
4、fuser 常用场景
fuser通常被用在诊断系统的“resource busy”问题,通常是在你希望umount指定的挂载点得时候遇到。 如果你希望kill所有正在使用某一指定的file, file system or sockets的进程的时候,你可以使用-k option。
fuser –k /path/to/your/filename
这时fuser会向所以正在使用/path/to/your/filename的进程发送SIGKILL。如果你希望在发送之前得到提示,可以使用-i 选项。
fuser –k –i /path/to/your/filename