温馨提示×

ubuntu overlay配置需注意什么

小樊
50
2026-10-09 16:54:33
栏目: 智能运维

在 Ubuntu(以及其它使用 Linux 内核的发行版)里,**OverlayFS(overlay)**常用于容器、Live CD、只读根文件系统等场景。配置时需要注意以下关键点:


一、基础概念

OverlayFS 至少需要两个目录:

  • lowerdir(只读层):一个或多个,支持多个时用 : 分隔
  • upperdir(可写层):只能有一个,且必须可写
  • workdir(工作目录):必须和 upperdir 在同一文件系统

挂载示例:

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

二、重要注意事项

1. upperdir 和 workdir 的限制

  • ✅ upperdir 和 workdir 必须在同一文件系统
  • ❌ workdir 不能是 upperdir 的子目录
  • ❌ upperdir 不能是 lowerdir 的子目录

错误示例:

upperdir=/a/upper,workdir=/b/work   # 不同文件系统,错误

2. lowerdir 可以是多个

lowerdir=/lower1:/lower2:/lower3
  • 优先级:左边优先
  • 所有 lowerdir 都应为只读(否则行为未定义)

3. 文件系统支持

OverlayFS 要求:

  • lower / upper / work 不能是普通文件
  • 某些文件系统不支持(如 FAT、NTFS)
  • 推荐:ext4 / xfs / btrfs

4. 权限与 SELinux / AppArmor

  • Ubuntu 默认启用 AppArmor
  • 容器(Docker/LXC)使用 overlay 时,需确保:
    • 挂载权限允许
    • 安全策略未阻止 mount

调试:

dmesg | tail
aa-status

5. 只读 lower 被修改的风险

  • lowerdir 必须只读
  • 若底层被修改,overlay 行为可能异常或缓存不一致

6. 删除文件行为

  • 在 merged 中删除文件:
    • lower 文件 → 创建 whiteout(c---------)
    • upper 文件 → 直接删除
  • whiteout 文件不要手动删除

7. inode 与硬链接限制

  • overlay 不支持跨层硬链接
  • 同一文件在 lower 和 upper 中不是同一 inode

8. 卸载顺序

  • 先卸载 merged 目录
  • 再操作 upper / work
umount /merged

9. Docker / Kubernetes 场景

Ubuntu 上常见:

  • Docker 默认 storage-driver=overlay2
  • 建议:
    • 使用 overlay2(不是 overlay)
    • 内核 ≥ 4.0(Ubuntu 18.04+ 都支持)

检查:

docker info | grep Storage

10. 常见错误排查

现象 原因
mount: wrong fs type 内核未支持 overlay
workdir and upperdir 报错 不在同一文件系统
文件看不到 lowerdir 顺序错误
删除无效 whiteout 未正确生成

启用调试:

mount -t overlay overlay -o ...,debug /merged

三、推荐实践

  • 使用 overlay2(新项目)
  • upper/work 放 SSD
  • lower 可放只读镜像
  • 避免嵌套 overlay

如果你是在 Docker / LXC / 系统根目录只读 / 定制 Live 系统 场景下用 overlay,可以告诉我具体用途,我可以给更针对性的配置示例。

0 踩