要查看指定挂载点被哪些进程以独占模式实时打开,需通过lsof或fuser结合写、读写、内存映射、当前工作目录及已删除仍打开等特征综合判断,而非直接标记“独占”;先用mount确认挂载状态,再以sudo umount测试是否busy,接着用sudo lsof +D /mnt/data筛选FD含w/u/mem或TYPE为DEL/cwd的条目,或用sudo fuser -v /mnt/data快速定位带W/m/c标记的进程。

要查看指定挂载点被哪些进程以独占模式(exclusive)实时打开,lsof 本身**不直接标记“独占模式”**,但可通过组合判断:挂载点被打开且对应文件系统处于“只读挂载”或“被进程以写方式打开并锁定”,更常见、可实操的判断依据是——该挂载点下有进程正以 写(w)、修改(u)、删除(D)或强制访问(如 mmap 写入)等方式持有文件句柄,且这些行为可能阻止卸载(umount 失败时提示 device busy),这在效果上等同于“独占占用”。
确认挂载点路径并检查是否被占用
先明确目标挂载点,例如 /mnt/data:
- 运行
mount | grep "/mnt/data"确认它确实是一个独立挂载点(非子目录绑定挂载) - 尝试卸载测试:执行
sudo umount /mnt/data,若报错target is busy,说明存在活跃占用,此时再用lsof定位
用 lsof 列出挂载点下的所有打开文件
执行以下命令(需 root 权限才能看到所有进程):
sudo lsof +D /mnt/data
-
+D表示递归扫描整个目录树(含子目录),比+d更彻底 - 输出中重点关注
TYPE列为DIR(目录句柄)、REG(普通文件)、DEL(已删除但仍被打开的文件)的行 - 特别留意
FD列含w(write)、u(read-write)、mem(内存映射写入)或DEL的条目——这些最可能导致“无法卸载”
过滤出高风险(类独占)访问的进程
结合 lsof 输出,筛选典型独占场景:
-
写入中的文件:
sudo lsof +D /mnt/data | awk '$4 ~ /[uw]/ && $5 == "REG"' | head -20 -
当前工作目录为该挂载点(常见于 shell 或守护进程):
sudo lsof +D /mnt/data | awk '$9 == "/mnt/data" && $4 == "cwd"' -
内存映射写入(mmap with MAP_SHARED):
sudo lsof +D /mnt/data | grep 'mem' -
已删除但仍在使用的文件(阻碍清理与卸载):
sudo lsof +D /mnt/data | awk '$5 == "DEL"'
辅助验证:用 fuser 快速定位占用进程
作为补充,fuser 更简洁直观:
sudo fuser -v /mnt/data
- 输出中带
W(write)、m(mmap)、c(current dir)标记的 PID 即为关键嫌疑进程 - 加
-k可直接 kill 占用进程(慎用):sudo fuser -k -v /mnt/data


















