温馨提示×

linux overlay怎么排查问题

小樊
46
2026-10-15 06:36:53
栏目: 智能运维

Linux 的 OverlayFS(overlay) 常用于容器(Docker、Kubernetes)、LiveCD、只读根文件系统等场景。排查 overlay 问题,通常可以按下面几个层次来做。


一、先确认是不是 overlay 的问题

1. 查看挂载情况

mount | grep overlay
cat /proc/mounts | grep overlay

典型形式:

overlay on /var/lib/docker/overlay2/xxx/merged type overlay (rw,relatime,...)

2. 查看目录结构(以 Docker 为例)

ls -l /var/lib/docker/overlay2/

常见结构:

  • lowerdir:只读层(镜像)
  • upperdir:可写层(容器)
  • workdir:内部工作目录
  • merged:最终挂载点

二、常见 overlay 问题 & 排查方法

1. 挂载失败 / 挂载报错

可能原因

  • lowerdir 不存在
  • upperdir / workdir 不在同一文件系统
  • 权限不足
  • 内核不支持 overlay

排查

dmesg | tail
journalctl -k | tail

手动测试挂载:

mount -t overlay overlay \
  -o lowerdir=/lower,upperdir=/upper,workdir=/work \
  /merged

⚠️ 注意:

  • upperdir 和 workdir 必须在 同一文件系统
  • workdir 必须是空目录

2. 文件“看不见”或“改了没生效”

原因

  • 被 lowerdir 覆盖
  • 文件在 upperdir 被删除(whiteout)
  • 挂载顺序问题

排查

ls -l /merged/file
ls -l /upper/file
ls -l /lower/file

查看 whiteout(删除标记):

ls -l /upper
# 看到 c--------- 的设备文件通常是 whiteout

3. 磁盘满了但 df 看不出来

原因

  • overlay 的 upperdir 实际占用空间
  • 容器写层暴涨

排查

du -sh /var/lib/docker/overlay2/*
df -h

Docker 场景:

docker system df

4. 性能差 / IO 慢

原因

  • 多层 overlay
  • 大量小文件
  • 底层是网络存储(NFS、Ceph)

排查

iostat -x 1
perf top

建议:

  • 减少镜像层数
  • 使用本地 SSD
  • 避免 overlay on overlay

5. 容器无法启动(Docker / K8s)

典型错误

failed to mount overlay: invalid argument

排查

cat /etc/docker/daemon.json
docker info | grep -i storage

常见解决:

  • 升级内核(≥ 4.0 推荐 ≥ 5.x)
  • 修改 storage driver:
{
  "storage-driver": "overlay2"
}

三、内核 & 版本检查

uname -a
cat /sys/module/overlay/version
lsmod | grep overlay

overlay 需要:

  • 内核 ≥ 3.18(基础)
  • ≥ 4.0(稳定)
  • ≥ 5.x(推荐)

四、调试技巧

开启 debug

mount -t overlay overlay -o ...,debug /merged
dmesg -w

检查 inode

stat /merged/file
stat /upper/file

查看挂载选项

cat /proc/self/mountinfo | grep overlay

五、典型实战场景

Docker 容器文件被改坏

docker inspect <container> | grep UpperDir
ls -l <UpperDir>

K8s Pod 写满磁盘

kubectl exec -it pod -- df -h
du -sh /var/lib/docker/overlay2/*

六、快速排查清单(建议收藏)

✅ mount 是否成功
✅ lower/upper/work 路径是否正确
✅ upper 和 work 是否同文件系统
✅ dmesg 是否有 overlay 报错
✅ 磁盘是否写满
✅ 内核版本是否支持
✅ 是否 overlay on overlay


如果你愿意,可以告诉我:

  • 用的是 Docker / K8s / 自建 overlay
  • 具体报错信息
  • 内核版本

我可以帮你做针对性排查。

0 踩