这个问题在线上不会自己消失,按现象、配置、日志三步走基本能定位。 要下线一块数据盘,umount /data 直接报 target is busy,退到根目录再执行也一样,fuser 提示有进程的工作目录落在里面。
先把影响面控制住,再谈彻底修复,顺序反了容易在高峰期出二次故障。
先分清是哪一类原因
- 有进程的当前工作目录正好就在这个挂载点里面
- 文件被打开后没有关闭,句柄仍然指着挂载点上的 inode
- 挂载点被 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 只是把挂载点从当前命名空间摘掉,进程仍握句柄时数据不会立刻落盘,重要数据盘别图快用懒卸载。 处理过程中建议每改一项就验证一次,避免多个变量同时变化导致判断失真。