温馨提示×

centos overlay配置有啥坑

小樊
56
2026-10-09 02:32:04
栏目: 智能运维

在 CentOS 上使用 overlay / overlay2(通常用于 Docker 存储驱动,或手动 mount overlay 文件系统)时,确实有不少“坑”。下面按常见场景给你梳理一下,尤其是 CentOS 7/8 的实际经验。


一、Docker 使用 overlay2 的常见坑

1️⃣ 内核版本不够(最常见)

overlay2 对内核有要求:

  • CentOS 7:必须 ≥ 3.10.0-514
  • 推荐 ≥ 3.10.0-957
  • CentOS 8:默认 OK

❌ 坑:

  • 老内核使用 overlay2 会:
    • 容器无法启动
    • 文件丢失
    • rm -rf 卡死

✅ 解决:

uname -r
yum update kernel
reboot

2️⃣ 文件系统不支持(XFS 参数问题)

overlay2 强烈依赖底层文件系统特性

XFS 的坑(CentOS 默认)

如果 XFS 没有开启 d_type:

xfs_info / | grep ftype
  • ftype=1 ✅ 正常
  • ftype=0 ❌ Docker 会报错

❌ 错误示例:

overlay2 does not support d_type

✅ 解决:

  • 只能 重新格式化磁盘
mkfs.xfs -n ftype=1 /dev/sdX

⚠️ 默认 CentOS 7 老镜像装的 XFS 经常是 ftype=0


3️⃣ /var/lib/docker 在错误分区

很多人在:

  • LVM
  • NFS
  • 网络盘
  • 小系统盘

上放 /var/lib/docker

❌ 坑:

  • overlay 不支持某些远程文件系统
  • inode 耗尽
  • 性能极差

✅ 建议:

# 单独一块 SSD
/var/lib/docker  -> 本地 ext4/xfs

4️⃣ SELinux 导致的“玄学问题”

CentOS 默认开启 SELinux

❌ 表现:

  • 容器内能读,宿主机不能读
  • 文件权限正常但访问被拒
  • Permission denied

✅ 解决方式(任选):

# 临时
setenforce 0

# 永久
vi /etc/selinux/config
SELINUX=permissive

或给 Docker 正确打标签:

--selinux-enabled

5️⃣ inode 耗尽(很隐蔽)

overlay2 每个文件都占 inode

❌ 现象:

  • 磁盘空间还多
  • 但 No space left on device

✅ 检查:

df -i

✅ 解决:

  • 清容器
  • 换大 inode 文件系统

6️⃣ Docker 版本不匹配

CentOS 7 自带 docker 是 1.13(很老)

❌ 坑:

  • overlay2 支持不完整
  • 网络/存储 bug 多

✅ 推荐:

yum remove docker docker-common
yum install docker-ce docker-ce-cli

二、手动 mount overlay 的坑

如果你是自己用 mount -t overlay

1️⃣ upperdir / workdir 不能在同一目录

mount -t overlay overlay \
  -o lowerdir=/a,upperdir=/b,workdir=/c \
  /mnt

❌ 错误:

workdir and upperdir must be different

2️⃣ workdir 必须为空

workdir 里不能有任何文件


3️⃣ 删除文件是“白障文件”

在 overlay 里:

  • 删除 lower 的文件
  • 实际是写一个 whiteout 文件

❌ 坑:

  • 直接进 lowerdir 还能看到
  • rsync / cp 会复制隐藏文件

4️⃣ 不支持某些操作

  • rename 跨层有限制
  • 硬链接行为异常
  • 某些备份工具会炸

三、CentOS 7 vs 8 差异

项目 CentOS 7 CentOS 8
内核 老 新
overlay2 需检测 默认 OK
Docker 老版本 podman / docker-ce
XFS ftype 常坑 一般 OK

四、快速自检清单 ✅

uname -r
xfs_info / | grep ftype
df -i
cat /etc/selinux/config
docker info | grep -i storage

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

  • CentOS 版本
  • Docker 还是手动 overlay
  • 具体报错信息

我可以直接帮你对号入座排错。

0 踩