设备忙的几种占用来源
卸载时报目标忙,说明仍有进程在使用该挂载点。占用不限于「打开了文件」这一种形式:进程把挂载点下的目录当成当前工作目录、进程持有已被删除但仍未释放的文件句柄、内核模块或服务保持了对该路径的引用,都会导致同样的报错。
强制卸载不是首选
强制卸载只是把挂载点从命名空间里摘除,底层设备与正在写入的数据仍然存在,已经打开句柄的进程可能继续写入预期之外的位置,或者未落盘的数据直接丢失。因此应优先通过停止占用方来正常卸载,强制手段只在评估过影响、且确认无重要写入时使用。
基本信息
| 定位工具 | 按挂载点查询占用进程,查看打开的文件 |
|---|---|
| 隐蔽占用 | 工作目录占用与已删除文件的句柄 |
| 处理顺序 | 停止占用方后正常卸载 |
| 强制卸载 | 评估影响后使用,存在数据风险 |
典型使用场景
- 维护窗口内需要卸载数据盘,提示目标忙
- 存储迁移前卸载挂载点失败
- U 盘或外置盘拔不出来,提示设备忙
- 网络存储恢复后需要重新挂载,旧挂载点卸不掉
- 巡检时发现挂载点残留占用
定位占用
定位占用
fuser -vm /mnt/data 2>/dev/null | head # 占用进程一览
lsof +f -- /mnt/data | head # 打开的文件清单
lsof +L1 2>/dev/null | grep /mnt/data | head # 已删除但未释放的句柄
ls -l /proc/<PID>/cwd 2>/dev/null # 核查进程工作目录是否在挂载点内处理
处理
systemctl stop <占用服务名> # 示例:停止占用方
umount /mnt/data # 正常卸载
mount | grep /mnt/data # 复核已卸载
# 确需强制时评估影响后再用:umount -l(延迟卸载)
# 网络存储场景检查挂载参数,硬挂载会让卸载长时间等待占用类型与处置
| 占用类型 | 识别方式 | 处置 |
|---|---|---|
| 进程打开文件 | 按挂载点列出打开的文件 | 停止对应服务后卸载 |
| 工作目录占用 | 查看进程的工作目录指向 | 切换目录或重启该进程 |
| 已删除文件句柄 | 列出被删除但仍打开的文件 | 重启持有句柄的进程 |
| 服务依赖 | 服务单元依赖该挂载点 | 先停止服务再卸载 |
| 内核或子系统引用 | 常规手段无法定位占用 | 评估后使用延迟卸载 |
强制卸载可能造成未落盘数据丢失或文件系统状态不一致。执行前确认没有重要写入,并复核挂载点下的业务已停止或已迁移。