解决umount 卸载挂载点 卸载存储报错 device is busy

2017年7月24日 2 1,228 2118字阅读7分3秒

device is busy这类问题百度一下又很多解决方法,大鸟这里记录分享自己挂载的时候遇到的问题!但是总体的解决思路是(umount某个目录的时候总是报错:device is busy,说明该目录正在被使用,如果是bash客户端占用的话,可以直接kill掉,但是如果是某个应用占用的话,需要找到应用程序,然后关闭应用程序!)

这样的问题大多出现在默认购买或者已经挂载的VPS主机中,我们需要重新挂载或者是重新挂载到其他目录,则需要先将已经挂载的目录移除掉,使用umount命令移除。但是有些时候会有出现"device is busy"提示问题。

解决umount 卸载挂载点 卸载存储报错 device is busy

解决方法:

fuser -km /www

根据上面的脚本,换成我们自己的对应目录,然后再去执行umount移除挂载命令就没有报错。

一般当你无法umount一个设备的时候, 你如果想强制umount,可以先这样做。另:
fuser -m /dev/sda1 #显示所有使用sda1的进程
fuser -km /dev/sda1 #杀死所有使用sda1的进程

这个命令要慎用啊, 因为涉及的进程可能很多。

附fuser命令详解:
linux fuser

用fuser杀掉进程

一,为什么要使用fuser?
先说 fuser的作用,fuser能识别出正在对某个文件或端口访问的进程

大家想一下,还有哪个命令具备这个功能? 没错,是lsof,我们前面讲过, lsof能够找出正在对指定文件访问的进程,

那么它们两者之间有何区别?

fuser有一个特别的用法在于它可以一次杀死那些正在访问指定文件的进程。

二,如何使用fuser?

1,如何用fuser得到正在使用指定文件的进程?
用法: fuser 文件
说明:它会把正在使用当前文件的进程id列出

[root@localhost lhd]# umount /
umount: /: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
[root@localhost lhd]# fuser /
/: 1rc 2rc 3rc 4rc 5rc 6rc 7rc 80rc 82rc 84rc 85rc 153rc 157rc 158rc
160rc 165rc 168rc 203rc 204rc 205rc 253rc 441rc 444rc 516rc 521rc 524rc 582rc 583rc
584rc 633rc 1052rc 1392rc 1394rc 1417rc 1597rc 1609rc 1617rc 1620rc 1683rc 1744rc 1783r 1785rc
1788rc 1806r 1808r 1810rc 1811rc 1812rc 1813rc 1814rc 1815rc 1848rc 1886rc 1899rc 1900rc 2001rc
......太多不一一列出

说明:
这些进程号后面的rc是什么意思?

c 将此文件作为当前目录使用。
e 将此文件作为程序的可执行对象使用。
r 将此文件作为根目录使用。
s 将此文件作为共享库(或其他可装载对象)使用

2,如何列出进程的详细信息,而不仅仅是进程id?
用 -v参数即可
说明: -v: 含义是:verbose output,详细的输出信息
例子:

[root@dev ~]# fuser /var/log
/var/log: 4196c
[root@dev ~]# fuser -v /var/log

USER PID ACCESS COMMAND
/var/log: root 4196 ..c.. bash

3,如何列出进程所属的用户?
用 -u参数即可
说明: -u: 含义:display user IDs,显示用户id

例子:
[root@dev ~]# fuser -u /var/log
/var/log: 4196c(root)

4,如何杀死所有正在访问指定文件的进程?
用 -k参数即可
说明: -k:含义: kill processes accessing the named file

例子:

[root@localhost lhd]# fuser -v /root/install.log
用户 进程号 权限 命令
/root/install.log: root 3185 f.... tail
[root@localhost lhd]# fuser -k /root/install.log
/root/install.log: 3185
[root@localhost lhd]# fuser -v /root/install.log

说明: -k参数能够杀死所有的正在访问指定文件的进程,所以用来杀进程时非常方便
说明之二: fuser如何杀死的进程?
它发送的是这个信号:SIGKILL

三,多学一点知识

1,fuser可以列出它所知的信号:
用 -l参数即可

例子:
[root@dev ~]# fuser -l
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
UNUSED

2,fuser可以发送它已知的信号给访问的指定文件进程而代替-k参数默认发送的SIGKILL
例如:只是挂起进程,那么发送HUP信号就可以了

  • 我的微信
  • 分享宝塔面板建站技术交流等!
  • weinxin
  • 微信公众号
  • 关注本博公众号
  • weinxin
  • 版权声明: 发表于 2017年7月24日
  • 转载注明:https://www.daniao.org/1870.html

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:2   其中:访客  2   博主  0
    • avatar 大鸟 回复 5

      好像很麻烦啊!

        • avatar 大鸟 回复 5

          @大鸟 下次要改进,说的太罗嗦了!