这个问题在线上不会自己消失,按现象、配置、日志三步走基本能定位。 要下线一块数据盘,umount /data 直接报 target is busy,退到根目录再执行也一样,fuser 提示有进程的工作目录落在里面。

先把影响面控制住,再谈彻底修复,顺序反了容易在高峰期出二次故障。

先分清是哪一类原因

  1. 有进程的当前工作目录正好就在这个挂载点里面
  2. 文件被打开后没有关闭,句柄仍然指着挂载点上的 inode
  3. 挂载点被 bind mount 到别处,形成了嵌套占用

按顺序处理

1. 查占用进程和打开的文件

lsof +D /data | head -20

2. 看谁的工作目录落在里面

fuser -vm /data

3. 先停服务再正常卸载

systemctl stop app && umount /data

4. 确认真的卸载干净

findmnt /data; lsblk /dev/vdb

怎么确认已经恢复

findmnt /data 没有任何输出,lsblk 里该盘不再带挂载点,df 列表中也不出现这个目录。

容易忽略的地方

umount -l 只是把挂载点从当前命名空间摘掉,进程仍握句柄时数据不会立刻落盘,重要数据盘别图快用懒卸载。 处理过程中建议每改一项就验证一次,避免多个变量同时变化导致判断失真。

作者 9823189