linux卸载磁盘提示umount: PT5Dockeroverlay2: target is busy

linux卸载磁盘提示umount: PT5Dockeroverlay2: target is busy,第1张

在Linux系统下卸载设备时,经常会遇到“Device is busy”的提示,报错的原因通常是由于待卸载磁盘正在使用,导致无法直接卸载,需要降当前使用数据盘的进程杀掉,才能卸载。如果贸然强行删除,可能会导致数据丢失或设备损坏。需要使用fuser命令查找和删除占用的程序。

例如:无法卸载的设备为/dev/vdd1,运行以下命令:

PS: 如果bash在使用此磁盘,会发现bash退出了,新开bash 并再次查看fuser -mv /dev/vdd1

确认是否还有占用进程。

找到PID对应的进程或者服务,然后杀死或者停止相应服务即可。

此案例中即使使用上述所有 *** 作删除占用的进程,但还是提示磁盘busy,使用kill去杀进程,发现进程号一直在变化,惊觉可能是某个服务进程一直在运行,使用fuser -m -v /dev/vdd1 去查看详细的进程信息,发现是docker服务一直在占用。

解决方案:停止docker服务

用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

usethe device is found by lsof(8) or fuser(1))

[root@localhost lhd]# fuser / /: 1rc 2rc

3rc 4rc 5rc 6rc 7rc80rc82rc84rc85rc 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

USERPID ACCESS COMMAND /var/log:root 4196

..c.. bash3,如何列出进程所属的用户? 用 -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

UNUSED2,fuser可以发送它已知的信号给访问的指定文件进程而代替-k参数默认发送的SIGKILL

例如:只是挂起进程,那么发送HUP信号就可以了 例子: [root@localhost lhd]#

fuser -v /root/install.log 用户 进程号 权限

命令 /root/install.log: root 3347 f.... tail

[root@localhost lhd]# fuser -k -SIGHUP /root/install.log

/root/install.log:3347 [root@localhost lhd]# fuser -v

/root/install.log


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12050099.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存