温馨提示×

centos overlay配置需要注意啥

小樊
46
2026-09-15 08:06:05
栏目: 智能运维

在 CentOS 上使用 overlay(OverlayFS,常用于 Docker、Kubernetes、容器存储、或使用 overlay 做根文件系统)时,有几个关键点和常见坑需要注意。下面按使用场景通用注意项说明。


一、内核与系统版本要求

1. 内核支持

OverlayFS 需要 内核 ≥ 3.18(生产推荐 ≥ 4.x)

  • CentOS 7:
    • 默认 3.10 内核 支持 overlay,但功能不完整
    • 建议升级内核(elrepokernel-mlkernel-lt
  • CentOS 8 / Stream:
    • 内核较新,支持良好
uname -r
cat /proc/filesystems | grep overlay

二、Docker / Kubernetes 使用 overlay2(最常见)

1. 推荐使用 overlay2,不要用 overlay

  • overlay:旧实现,问题多
  • overlay2:稳定、性能好
docker info | grep Storage

2. 必须使用支持的底层文件系统

✅ 支持:

  • xfs
  • ext4

❌ 不支持:

  • btrfs(Docker 不推荐)
  • overlay 上再叠 overlay

XFS 必须开启 d_type

xfs_info / | grep ftype
  • ftype=1
  • ftype=0 ❌(Docker 会警告或失败)

修复方法:重新格式化并加参数

mkfs.xfs -n ftype=1 /dev/sdX

三、挂载 overlay 的注意事项(手动使用)

1. 至少 3 个目录

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

注意:

  • workdir 必须和 upperdir 同文件系统
  • workdir 不能是挂载点
  • lowerdir 可以是多个(冒号分隔)
lowerdir=/a:/b:/c

四、SELinux 相关问题(CentOS 重灾区)

1. SELinux 会拦截 overlay

常见错误:

  • Permission denied
  • 容器起不来

解决方式(任选):

临时

setenforce 0

永久(不推荐生产)

sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config

正确做法

  • 使用 container-selinux
  • 给目录打标签:
semanage fcontext -a -e /var/lib/docker /your/path
restorecon -Rv /your/path

五、权限与用户映射问题

1. UID/GID 不一致

  • upper / lower 中文件属主不同会导致:
    • 写失败
    • 看不到文件

Docker 场景:

  • 使用 userns-remap

六、磁盘空间与 inode

1. overlay 不节省空间

  • 写时复制(CoW)
  • 修改文件 = 复制整个文件到 upper

注意:

  • inode 消耗快
  • 小文件多时容易 No space left on device
df -i

七、CentOS 特定坑

1. CentOS 7 + 旧 Docker

  • 默认 devicemapper
  • 强烈建议切 overlay2

2. /var/lib/docker 在 LV 上

  • 确认 LV 支持 d_type
  • 不要用 loop-lvm

八、排查命令汇总

# 查看是否支持
lsmod | grep overlay
cat /proc/filesystems

# Docker
docker info
journalctl -u docker

# 手动挂载测试
mount -t overlay overlay -o lowerdir=,upperdir=,workdir= /mnt

九、最佳实践总结

✅ 使用 CentOS 8 / Stream
✅ 使用 overlay2
✅ XFS + ftype=1
✅ SELinux 正确配置
✅ upper/work 同文件系统
❌ 不要在 overlay 上再叠 overlay
❌ 不要用 btrfs


如果你能说明是 Docker / K8s / 手动 overlay / 根文件系统读写分离,我可以给你更针对性的配置示例。

0