调试 Ubuntu 下的 OverlayFS(overlay) 通常出现在这些场景:
下面按常见问题 → 排查方法 → 实用命令来讲。
mount | grep overlay
cat /proc/mounts | grep overlay
典型 Docker:
overlay on /var/lib/docker/overlay2/xxx/merged type overlay (...)
cat /proc/mounts | grep overlay
重点关注:
lowerdirupperdirworkdirindex=off(有时是坑)✅ 检查 4 个目录是否存在:
ls -ld lowerdir upperdir workdir merged
⚠️ 要求:
upperdir 和 workdir 必须在同一文件系统workdir 不能是被挂载点本身lowerdir 可以是多个,用 : 分隔✅ 正确示例:
mount -t overlay overlay \
-o lowerdir=/lower,upperdir=/upper,workdir=/work \
/merged
原因通常是:
lowerdir 是只读upperdir✅ 排查:
ls -l /upper/somefile
ls -l /lower/somefile
✅ 查看白障文件(whiteout):
ls -l /upper/somefile # 如果是 c 字符设备 0,0,说明被删除
✅ 确认文件系统支持:
df -T /var/lib/docker
推荐:
ftype=1)❌ 不支持:
✅ 检查 xfs 是否支持:
xfs_info / | grep ftype
应为:
ftype=1
✅ 查看 inode:
df -i /var/lib/docker
✅ 清理:
docker system prune -a
dmesg | tail
overlay 报错一般会在这里。
strace mount -t overlay overlay -o ... /merged
mkdir -p /tmp/{lower,upper,work,merged}
echo hello > /tmp/lower/a
mount -t overlay overlay \
-o lowerdir=/tmp/lower,upperdir=/tmp/upper,workdir=/tmp/work \
/tmp/merged
docker info | grep -i storage
docker inspect <容器> | grep MergedDir
cd /var/lib/docker/overlay2/<id>/merged
| 问题 | 原因 |
|---|---|
| mount 失败 | upper/work 不在同文件系统 |
| 文件删了还在 | upper 有 whiteout |
| 改了没生效 | 改的是 lower |
| Docker 慢 | NFS / 机械盘 / inode 满 |
| 启动不了 | overlay on overlay |
如果你能告诉我:
我可以直接帮你定位并给出命令级解决方案。