温馨提示×

怎么调试CentOS Overlay

小樊
42
2026-08-04 10:11:59
栏目: 智能运维

CentOS(7/8/Stream) 上调试 Overlay / OverlayFS(常见于 Docker、Kubernetes、构建系统),可以按下面思路分层排查。我按最常见场景 → 深入调试来写,你可以对照使用。


一、先确认 Overlay 是否可用

1️⃣ 内核是否支持 OverlayFS

uname -r
lsmod | grep overlay

如果没有加载:

modprobe overlay

确认支持:

cat /proc/filesystems | grep overlay

✅ 正常应看到:

overlay

二、手动挂载 Overlay(最直观调试方式)

1️⃣ 准备目录

mkdir -p /tmp/overlay/{lower,upper,work,merged}
  • lower:只读层
  • upper:可写层
  • work:临时工作目录(必须为空)
  • merged:最终挂载点

2️⃣ 手动挂载

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

✅ 成功即可进入 /tmp/overlay/merged 测试

❌ 失败会直接报错(重点看 dmesg)


三、常见错误 & 调试方法

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

错误示例:

overlayfs: workdir and upperdir must reside under the same mount

✅ 解决:

  • upperwork 必须在 同一个挂载点
  • 不要用 /tmp + /var 混用

2️⃣ workdir 非空

rm -rf /tmp/overlay/work/*

Overlay 要求 workdir 必须为空


3️⃣ SELinux 导致挂载失败(CentOS 特有)

临时关闭验证:

setenforce 0

再试挂载。

✅ 如果成功,说明是 SELinux 问题

永久解决(推荐加策略而不是关 SELinux):

cat /var/log/audit/audit.log | audit2allow -M overlayfix
semodule -i overlayfix.pp

或给目录打标签:

semanage fcontext -a -t container_file_t "/tmp/overlay(/.*)?"
restorecon -Rv /tmp/overlay

4️⃣ 文件系统不支持 overlay

Overlay 不能用在:

  • NFS
  • 某些旧版本 XFS(无 d_type)

检查 d_type:

xfs_info / | grep ftype

✅ 应为:

ftype=1

如果是 ftype=0,Docker / Overlay 都会失败。


四、Docker / Kubernetes 场景调试

1️⃣ 查看 Docker 存储驱动

docker info | grep -i storage

常见:

  • overlay2(推荐)
  • devicemapper(老,问题多)

2️⃣ Docker 无法启动

查看日志:

journalctl -u docker -xe

常见错误:

  • overlay2: the backing xfs filesystem is formatted without d_type
  • failed to mount overlay

3️⃣ 查看 Docker overlay 挂载点

systemctl start docker
ls /var/lib/docker/overlay2

调试挂载:

mount | grep overlay

五、内核日志(最关键)

Overlay 报错 90% 都在 dmesg 里

dmesg | tail -50

常见关键字:

  • overlayfs
  • upperdir
  • workdir
  • permission denied
  • invalid argument

六、调试建议总结(实战顺序)

推荐调试顺序:

  1. dmesg 看内核报错
  2. 手动 mount overlay 验证
  3. 检查 SELinux
  4. 检查文件系统(XFS / d_type)
  5. 检查 upper / work 是否同文件系统
  6. Docker / K8s 层再排查

七、如果你愿意,我可以更精确帮你

你可以直接贴:

  • CentOS 版本(cat /etc/centos-release
  • 内核版本
  • 报错完整信息(dmesg / docker logs
  • Docker / K8s / 手动 overlay

我可以一步一步帮你定位到具体原因 ✅

0