在 CentOS 上使用 overlay / overlay2(通常用于 Docker 存储驱动,或手动 mount overlay 文件系统)时,确实有不少“坑”。下面按常见场景给你梳理一下,尤其是 CentOS 7/8 的实际经验。
overlay2 对内核有要求:
❌ 坑:
rm -rf 卡死✅ 解决:
uname -r
yum update kernel
reboot
overlay2 强烈依赖底层文件系统特性
如果 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
很多人在:
上放 /var/lib/docker
❌ 坑:
✅ 建议:
# 单独一块 SSD
/var/lib/docker -> 本地 ext4/xfs
CentOS 默认开启 SELinux
❌ 表现:
Permission denied✅ 解决方式(任选):
# 临时
setenforce 0
# 永久
vi /etc/selinux/config
SELINUX=permissive
或给 Docker 正确打标签:
--selinux-enabled
overlay2 每个文件都占 inode
❌ 现象:
No space left on device✅ 检查:
df -i
✅ 解决:
CentOS 7 自带 docker 是 1.13(很老)
❌ 坑:
✅ 推荐:
yum remove docker docker-common
yum install docker-ce docker-ce-cli
如果你是自己用 mount -t overlay
mount -t overlay overlay \
-o lowerdir=/a,upperdir=/b,workdir=/c \
/mnt
❌ 错误:
workdir and upperdir must be different
workdir 里不能有任何文件
在 overlay 里:
whiteout 文件❌ 坑:
rename 跨层有限制| 项目 | 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
如果你愿意,可以告诉我:
我可以直接帮你对号入座排错。