温馨提示×

CentOS Overlay怎么调试

小樊
48
2026-08-04 10:12:56
栏目: 智能运维

在 CentOS 上调试 Overlay 文件系统(常见于 Docker、Podman、或手动挂载 overlay),可以从 内核、挂载参数、Docker 存储、SELinux、dmesg 几个方向入手。下面给你一套实用调试思路 + 命令清单


一、确认 Overlay 类型

先搞清楚你用的是哪一种:

mount | grep overlay

常见形式:

  • Docker / Podman:overlayoverlay2
  • 手动挂载:overlay on /xxx type overlay

二、查看 Overlay 挂载参数(最重要)

cat /proc/mounts | grep overlay

典型输出:

overlay /var/lib/docker/overlay2/.../merged overlay rw,relatime,lowerdir=...,upperdir=...,workdir=... 0 0

重点检查:

  • lowerdir:只读层
  • upperdir:可写层
  • workdir:必须为空目录
  • ❌ workdir 和 upperdir 在同一文件系统(常见坑)

三、手动测试 Overlay(排除 Docker)

如果怀疑是 Docker 问题,先 手动挂载 overlay 验证:

mkdir -p /tmp/overlay/{lower,upper,work,merged}
mount -t overlay overlay \
  -o lowerdir=/tmp/overlay/lower,upperdir=/tmp/overlay/upper,workdir=/tmp/overlay/work \
  /tmp/overlay/merged

如果失败,直接看错误信息。


四、常见错误 & 调试方法

1️⃣ workdir 非空

overlayfs: workdir is in-use

✅ 解决:

rm -rf /path/to/workdir/*

2️⃣ upperdir / workdir 不在同一文件系统

overlayfs: upperdir and workdir must reside under the same mount

✅ 解决:

df -h upperdir workdir

确保它们在同一挂载点。


3️⃣ SELinux 导致 Overlay 失败(CentOS 常见)

getenforce

如果是 Enforcing

setenforce 0

或给目录打标签:

chcon -Rt svirt_sandbox_file_t /var/lib/docker

4️⃣ 内核不支持 overlay

lsmod | grep overlay
modprobe overlay

检查内核版本(建议 ≥ 3.10.0-693):

uname -r

五、Docker / Podman Overlay 调试

查看 Docker 存储驱动

docker info | grep -i storage

建议:

  • CentOS 7:overlay2
  • CentOS 8/Stream:overlay2

如果不是:

vim /etc/docker/daemon.json
{
  "storage-driver": "overlay2"
}

然后:

systemctl restart docker

查看 Docker overlay2 目录

ls -l /var/lib/docker/overlay2

查看某容器的层:

docker inspect <container_id> | grep -A 10 UpperDir

六、内核日志调试(非常关键)

dmesg -T | grep -i overlay

常见错误:

  • overlayfs: failed to resolve
  • overlayfs: invalid argument
  • overlayfs: missing workdir

七、调试工具推荐

# 查看文件来自哪一层
ls -i file
find /var/lib/docker/overlay2 -inum <inode>
# 跟踪系统调用
strace -f -e mount docker run ...

八、快速排查清单 ✅

  • [ ] dmesg 是否有 overlay 报错
  • [ ] workdir 是否为空
  • [ ] upperdir/workdir 是否同 FS
  • [ ] SELinux 是否干扰
  • [ ] Docker 是否使用 overlay2
  • [ ] 内核是否支持 overlay

九、如果你愿意,我可以帮你:

  • ✅ 分析 具体报错信息
  • ✅ 判断是 Docker 还是系统问题
  • ✅ 针对 CentOS 7 / 8 / Stream 给精确方案

你可以直接贴:

dmesg | tail -30
mount | grep overlay
docker info

0