在 CentOS(尤其是 7/8 以及使用 Docker / Kubernetes 场景)里,overlay / overlay2 存储驱动是非常常见的,但实际用下来确实有不少“坑”。下面按场景 + 问题 + 建议给你梳理一下。
overlay 对底层文件系统有要求:
ext4、xfsbtrfs(Docker 不推荐)、overlay 自己叠自己坑点
xfs,但如果格式化时没加:mkfs.xfs -n ftype=1 /dev/sdX
会导致 Docker overlay2 无法使用检查
xfs_info / | grep ftype
必须是:
ftype=1
✅ 建议:
Docker 数据盘单独格式化时一定加 -n ftype=1
CentOS 7 默认 3.10 勉强可用,但:
✅ 建议:
kernel 4.x / 5.xoverlay2 的目录结构:
/var/lib/docker/overlay2
坑点
现象
df -h # 空间满
df -i # inode 满
✅ 建议:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
docker system prune -a
原因
检查
lsof | grep deleted
✅ 解决:
umount 异常挂载CentOS 默认开启 SELinux。
典型报错
permission denied
cannot mount overlay
✅ 解决方案(二选一):
setenforce 0
--security-opt label=disable
或修改 /etc/selinux/config⚠️ 生产不建议直接关 SELinux
K8s 节点:
坑点
✅ 建议:
[plugins."io.containerd.grpc.v1.cri".containerd]
snapshotter = "overlayfs"
overlay 不支持跨文件系统 merge。
错误示例
/var/lib/docker 在 //data✅ 建议:
/etc/docker/daemon.json
{
"data-root": "/data/docker"
}
overlay2:
场景
✅ 建议:
即使磁盘空间充足:
No space left on device
但 df -h 正常
✅ 检查:
df -i
✅ 解决:
✅ 生产环境推荐配置:
ftype=1如果你愿意,可以告诉我:
我可以直接帮你定位是哪一个坑。