EC2 挂载 EBS 卷显示 Device busy 报错怎么强制卸载

文章导读
遇到 Device busy 不要直接强制卸载,先查占用进程才是正解,强制卸载仅在无法停止进程且接受数据风险时使用。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
A A

遇到 Device busy 不要直接强制卸载,先查占用进程才是正解,强制卸载仅在无法停止进程且接受数据风险时使用。

先说结论:优先找出占用文件的进程并停止,正常卸载失败后再考虑 lazy unmount,切勿直接在控制台强制分离卷。

  • 先确认:使用 lsof 或 fuser 查找占用 mount 点的进程
  • 先处理:停止相关服务或切换进程工作目录,尝试正常 umount
  • 再验证:确认 lsblk 无挂载信息后,再去 AWS 控制台分离卷

命令速用版

# 查看挂载点
mount | grep /mnt/data

# 查找占用进程
lsof +f -- /mnt/data
# 或
fuser -vm /mnt/data

# 正常卸载
umount /mnt/data

# 强制懒卸载(慎用)
umount -l /mnt/data

为什么会这样

Linux 内核不允许卸载正在被使用的文件系统。常见原因包括有进程打开了该卷上的文件、某个进程的当前工作目录在该挂载点下,或者该卷被配置为了 swap 分区。直接强制分离 EBS 卷而不先在操作系统内卸载,会导致文件系统元数据损坏,下次挂载可能需要 fsck 修复甚至数据丢失。

分步处理

1. 确认挂载点:使用 df -h 或 mount 命令确认报错卷的具体挂载路径。

2. 查找占用:执行 lsof +f -- /你的挂载点,列出所有占用文件的进程 PID 和命令。

3. 停止占用:尝试停止相关服务(如 systemctl stop nginx),或让进程切换目录(cd /)。如果是 shell 会话当前在该目录,退出该会话或切换目录。

4. 执行卸载:再次运行 umount /你的挂载点。如果仍报错,确认没有关键写入后,可使用 umount -l 进行懒卸载,这会在后台清理引用。

EC2 挂载 EBS 卷显示 Device busy 报错怎么强制卸载

5. 控制台分离:登录 AWS EC2 控制台,找到该卷,选择 Detach Volume。切勿在操作系统未卸载时直接在此步骤操作。

怎么验证是否生效

在实例内运行 lsblk,确认该卷不再显示挂载点信息。在 AWS 控制台查看卷状态,应变为 available。重新挂载测试时,运行 mount -a 或手动 mount 命令无报错。

常见坑

1. 根目录占用:如果是根卷,无法卸载,需在救援模式处理。

2. 隐藏进程:某些后台 daemon 或打开的文件句柄不易察觉,需仔细检查 lsof 输出。

3. 数据风险:umount -l 可能导致未写入数据丢失,仅建议在实例即将终止或卷只读时使用。

4. Swap 占用:如果卷包含 swap,需先用 swapoff 关闭交换空间。