前言


有时我们会因为某些需要,会对已挂载好的目录进行调整。这时就需要先对硬盘先解除挂载,再重新挂载新目录。但是,在解除挂载的时候,可能会遇到无法解除挂载的问题。下面介绍的就是解决这个问题的方法。

磁盘分区、挂载、取消挂载操作





问题



使用umount或umount -f强制解除挂载,提示device is busy,无法解除挂载。

客户端取消挂载nfs_客户端取消挂载nfs

客户端取消挂载nfs_共享库_02

umount: /mnt: device is busy. 设备正忙
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))




原因


通常是解除挂载时,有进程正在使用此挂载的目录导致




解决方法


其他的无法解除挂载的报错,也可使用下列方法解决。



【1】方法一(fuser)


fuser能识别出当前正在对指定文件、挂载点或端口访问的进程的详细信息
fuser会显示当前正在使用指定文件或挂载点的进程ID和进程的访问类型

进程的访问类型:  
c       作为当前目录使用   
e       作为程序的可执行对象使用  
f       作为打开的文件(默认不显示) 
F       作为打开的文件,写操作(默认不显示) 
r       作为根目录使用 
m       作为映射文件或者共享库
s       作为共享库(或其他可装载对象)

常用参数/选项

-k       杀掉访问文件的进程
-i       杀掉进程之前询问用户  
-l       列出所有已知的信号名称  
-signal  使用指定的信号,而不是用SIGKILL来杀掉进程(要和-k一起使用,否则会被忽略)
-v       列出进程的详细信息


<1>查看当前访问挂载点的进程

fuser /mnt

客户端取消挂载nfs_访问类型_03

fuser /mnt -v

客户端取消挂载nfs_客户端取消挂载nfs_04



<2>杀死进程

fuser /mnt -k

客户端取消挂载nfs_共享库_05

kill -9 4882


<3>解除挂载

杀掉占用进程后,再解除挂载

umount /mnt



【2】方法二(losf)


<1>查找当前使用挂载点的进程

lsof |grep "/mnt"

客户端取消挂载nfs_fuser命令使用_06



<2>杀死进程

kill -9 5059


<3>解除挂载

杀掉占用进程后,再解除挂载

umount /mnt