卸载磁盘提示“device is busy”说明有进程正访问挂载点,需先用lsof或fuser定位占用进程,再按类型安全终止;顽固情况可用umount -l懒卸载,最后通过findmnt、df等命令验证卸载成功。

磁盘卸载时提示“device is busy”或“target is busy”,说明有进程正在访问该挂载点——比如当前 shell 在其目录下、文件被打开、服务读写其中数据,或存在子挂载。直接强制卸载可能引发数据丢失,需先定位并合理释放占用。
查清谁在用这个挂载点
先确认挂载路径(如 /mnt/data),再用以下任一命令查看占用进程:
- lsof /mnt/data:列出直接以该路径为工作目录(cwd)、根目录(root)或打开文件的进程
- lsof +D /mnt/data:递归扫描所有子目录下的打开文件(较慢但全面)
- fuser -v /mnt/data:简洁显示用户、PID、访问类型(如 c 表示 cwd)
- fuser -mv /mnt/data:带命令名和详细访问模式的视图
安全终止占用进程
不建议一上来就 kill -9,优先按进程类型处理:
- 若输出中显示 bash 或 zsh 的 cwd 是该路径,只需在对应终端执行 cd / 即可释放
- 普通用户程序(如编辑器、播放器)可通知用户保存后关闭,或用 kill PID 温和终止
- 系统服务(如 nginx、mysql)应运行 systemctl stop servicename,避免状态异常
- 需要快速清理时,可用 fuser -k /mnt/data 向所有占用进程发送 SIGKILL(慎用)
处理顽固或特殊挂载
某些情况无法立即终止进程,或内核仍保留引用(如 NFS hang、容器残留、绑定挂载):
- 运行 umount -l /mnt/data(lazy unmount):立即解绑挂载点,让内核在引用全部释放后自动清理;挂载点变为空目录,但设备不可拔出或重格式化
- 检查是否有子挂载:findmnt -D /mnt/data,若有需先卸载子挂载
- Docker/Podman 容器可能挂载了该路径,用 docker ps 或 podman ps 查看并 stop 相关容器
- 若用 systemd 管理挂载,运行 systemctl stop mnt-data.mount(unit 名依实际而定)
验证是否真正卸载成功
执行卸载后,别急着拔盘,用以下方式确认:
- findmnt | grep /mnt/data:无输出表示已从挂载列表移除
- df -h | grep /mnt/data:不应再显示该路径
- ls /mnt/data:应为空目录(懒卸载后也为空,但底层仍在用)
- 再次运行 lsof /mnt/data 和 fuser -v /mnt/data,确保无任何输出











