当执行 umount 提示“device is busy”时,应使用 lsof 定位占用进程:先用 mount 或 df -h 确认挂载点(如 /mnt/data),再运行 lsof +D /mnt/data 或 lsof /mnt/data 查看 cwd、root、mem 等占用;重点关注 COMMAND、PID、FD(如 cwd)、NAME 列;处理时依进程类型选择 kill、systemctl stop 或 umount -l;卸载前需用 lsof /mnt/data 和 find /proc/*/cwd 验证无占用。

当执行 umount 命令提示“device is busy”时,说明有进程正在访问该挂载点(如打开文件、进入目录、运行程序等),lsof 是定位这类占用最直接有效的工具。
确认挂载点路径并检查占用进程
先用 mount 或 df -h 明确目标挂载路径,例如:/dev/sdb1 on /mnt/data type ext4 (rw,relatime)
然后运行:
lsof +D /mnt/data
该命令递归列出所有访问 /mnt/data 及其子目录的进程(含打开的文件、当前工作目录、内存映射等)。若输出为空但卸载仍失败,可能是进程将该路径作为当前工作目录(cwd)但未打开具体文件,此时需更精确匹配:
-
lsof /mnt/data—— 查找直接以该路径为 cwd、root 或文件名的进程 -
lsof +d /mnt/data—— 仅扫描一级子目录(比+D快,适合大目录)
重点关注常见占用类型
lsof 输出中需留意以下几列:
- COMMAND:进程名;PID:进程号;USER:所属用户
-
FD:文件描述符,
cwd表示当前工作目录,root表示根目录,mem表示内存映射文件,DEL表示已删除但仍被占用的文件 -
TYPE:常见
DIR(目录)、REG(普通文件)、CHR(字符设备) -
NAME:具体路径,若为
/mnt/data或其子路径即为关键线索
例如某行显示 bash 12345 user cwd DIR 8,17 4096 2 /mnt/data,说明 PID 12345 的 bash 进程当前工作目录正是该挂载点,需先退出该 shell 或切换目录。
处理顽固进程与特殊情况
找到 PID 后,可选择终止或通知用户:
- 普通用户进程:
kill PID或kill -9 PID(强制) - 系统服务(如 nginx、mysql):
systemctl stop servicename,避免直接 kill 导致异常 - 内核线程或僵尸进程:检查是否为
lsof误报(如某些 NFS 客户端状态),可尝试umount -l /mnt/data(lazy unmount)临时解绑 - 若提示“no process found”,但
lsof /mnt/data仍有输出,注意检查 NAME 列是否含@符号(如/mnt/data@),这通常表示通过 bind mount 或 overlayfs 引入的间接引用,需排查上层挂载关系
卸载前的快速验证技巧
在 kill 进程后,不要立刻 umount,先验证是否真正释放:
- 运行
lsof /mnt/data确认无任何输出 - 执行
find /proc/*/cwd -lname "/mnt/data*" 2>/dev/null,查找是否有进程 cwd 软链指向该路径(lsof有时漏检) - 使用
fuser -v /mnt/data作为交叉验证(需安装 psmisc),它会按用户和 PID 分组显示,更直观
确认无占用后,再执行 umount /mnt/data 即可成功。


















