Linux 的 OverlayFS(overlay) 常用于容器(Docker、Kubernetes)、LiveCD、只读根文件系统等场景。排查 overlay 问题,通常可以按下面几个层次来做。
mount | grep overlay
cat /proc/mounts | grep overlay
典型形式:
overlay on /var/lib/docker/overlay2/xxx/merged type overlay (rw,relatime,...)
ls -l /var/lib/docker/overlay2/
常见结构:
lowerdir:只读层(镜像)upperdir:可写层(容器)workdir:内部工作目录merged:最终挂载点可能原因
lowerdir 不存在upperdir / workdir 不在同一文件系统排查
dmesg | tail
journalctl -k | tail
手动测试挂载:
mount -t overlay overlay \
-o lowerdir=/lower,upperdir=/upper,workdir=/work \
/merged
⚠️ 注意:
upperdir 和 workdir 必须在 同一文件系统workdir 必须是空目录原因
lowerdir 覆盖upperdir 被删除(whiteout)排查
ls -l /merged/file
ls -l /upper/file
ls -l /lower/file
查看 whiteout(删除标记):
ls -l /upper
# 看到 c--------- 的设备文件通常是 whiteout
df 看不出来原因
upperdir 实际占用空间排查
du -sh /var/lib/docker/overlay2/*
df -h
Docker 场景:
docker system df
原因
排查
iostat -x 1
perf top
建议:
典型错误
failed to mount overlay: invalid argument
排查
cat /etc/docker/daemon.json
docker info | grep -i storage
常见解决:
{
"storage-driver": "overlay2"
}
uname -a
cat /sys/module/overlay/version
lsmod | grep overlay
overlay 需要:
mount -t overlay overlay -o ...,debug /merged
dmesg -w
stat /merged/file
stat /upper/file
cat /proc/self/mountinfo | grep overlay
docker inspect <container> | grep UpperDir
ls -l <UpperDir>
kubectl exec -it pod -- df -h
du -sh /var/lib/docker/overlay2/*
✅ mount 是否成功
✅ lower/upper/work 路径是否正确
✅ upper 和 work 是否同文件系统
✅ dmesg 是否有 overlay 报错
✅ 磁盘是否写满
✅ 内核版本是否支持
✅ 是否 overlay on overlay
如果你愿意,可以告诉我:
我可以帮你做针对性排查。