umount 时出现"Device is busy"的解法 [转]

本文介绍如何使用fuser指令找出并解决Linux系统中umount时出现Device is busy的问题,通过查询具体进程占用目录,进而终止该进程实现目录卸载。

 

Linux: umount 时出现 "Device is busy" 的解法

当任何目录有 mount, 然后有程序使用/挂在那个目录上的话, 就没有办法 umount 掉, 於 umount 时会出现 Device is busy 的讯息.

要怎麼找出是哪个程序挂在那个目录上? 然后去把那个程式砍掉呢?

使用 fuser 的指令

那要怎麼找出是哪个程式挂在那个目录上?可以使用 fuser - identify processes using files or sockets

假设现在 mount 起来的目录是 /media/share

* 查询: fuser -m /media/share
* 显示: /media/share: 25023c

就代表是 process 25023(pid) 有使用到此目录, 后面 c 代表的意思可参考下述:

* c: current directory.
* e: executable being run.
* f: open file. f is omitted in default display mode.
* F: open file for writing. F is omitted in default display mode.
* r: root directory.
* m: mmap'ed file or shared library.

要把这个资源释放的话, 可以有下述做法:

* kill -9 25023 # ps aux | grep 25023 应该就会看到它
* fuser -m -v -i -k /media/share # 会问你是不是要把 25023 这个 kill 掉, 选 y 就会 kill 掉

提示信息如下:
USER PID ACCESS COMMAND
/meida/share: root 25023 ..c.. bash
Kill process 25023 ? (y/N) y

 

或者使用 umount -l   /

即等到设备闲置的时候卸载

### 解决 `umount.nfs` 设备忙的问题 当尝试卸载 NFS 挂载点遇到设备忙的错误,通常是因为有进程正在访问该挂载点下的文件或目录。以下是几种解决方案: #### 方法一:查找并终止占用资源的进程 可以通过 `fuser` 或者 `lsof` 命令来找出哪些进程占用了挂载点。 ```bash # 查找占用 /mnt 的进程 fuser -m /mnt # 或者使用 lsof 来查看打开文件的情况 lsof +D /mnt ``` 找到这些进程之后可以选择结束它们: ```bash # 终止所有占用 /mnt 的进程 (需谨慎操作) sudo fuser -km /mnt ``` 这种方法适用于知道具体是什么原因造成繁忙,并且能够安全地中止那些进程的情况下[^1]。 #### 方法二:强制懒惰卸载 (`-l`) 如果不想立即停止可能依赖于这个路径的应用程序,则可以考虑采用懒惰方式卸载(`-l`)选项。这会让内核在实际不再有人使用的候自动完成卸载过程。 ```bash # 对指定位置执行懒惰卸载 umount -l /mnt ``` 此命令不会等待所有的引用被释放就返回成功状态,而是让系统继续运行直到自然地断开连接为止[^4]。 #### 方法三:循环尝试卸载 对于某些特殊情况,比如存在残留的网络问题或者其他异常情况,可以编写一个小脚本来不断重试卸载动作直至成功。 ```bash sh -c 'while true; do umount -lf /out && break || sleep 5; done' ``` 这段 shell 脚本会在每次失败后暂停五秒钟再重复尝试,直到最终顺利完成卸载工作[^5]。 以上三种方法可以根据实际情况灵活选用,建议先从最温和的方法开始测试,即先检查是否有活动进程阻止正常卸载,然后再决定是否采取更激进的方式处理这个问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值