在 Ubuntu(以及其它 Linux 发行版)中,overlay(通常指 OverlayFS)是一种联合文件系统(union filesystem),它的主要作用可以概括为:
把多个目录“叠加”在一起,形成一个统一的视图,并且只在对上层做写操作时才真正写入,而不修改下层。
一、OverlayFS 的基本概念
OverlayFS 至少需要两个目录:
- lowerdir(下层):只读层,通常是原始系统或镜像
- upperdir(上层):可写层,所有修改都会写在这里
- workdir(工作目录):OverlayFS 内部使用的临时目录
- merged(挂载点):最终用户看到的统一目录
挂载示例:
mount -t overlay overlay \
-o lowerdir=/lower,upperdir=/upper,workdir=/work \
/merged
此时:
- 读文件:优先从 upper 读,没有再从 lower 读
- 写文件:只写入 upper
- 删除文件:在 upper 中创建一个“白障(whiteout)”标记
二、Ubuntu 中 overlay 的主要作用
1️⃣ 容器技术的基础(Docker / Kubernetes)
这是 最常见的用途。
- Docker 镜像本身是只读的(lowerdir)
- 容器运行时在其上叠加一个可写层(upperdir)
- 容器销毁后,写层可丢弃,镜像不变
✅ 好处:
2️⃣ Live CD / 安装介质
Ubuntu Live USB 通常使用 overlay:
- 底层是只读的 ISO 文件系统
- 上层是内存或磁盘的可写层
- 用户操作不会破坏原始系统
3️⃣ 系统保护与只读 rootfs
在嵌入式或高安全场景:
- 根文件系统设为只读
- overlay 提供临时可写层
- 重启后恢复初始状态
常用于:
4️⃣ 软件测试 / 安全沙箱
- 在 overlay 上安装/修改软件
- 测试完成后直接删除 upperdir
- 原系统完全不受影响
5️⃣ 节省磁盘空间
多个环境可共享同一个 lowerdir:
lower: ubuntu-base
upper1: test-a
upper2: test-b
避免重复拷贝整个系统。
三、Overlay 不适合做什么?
❌ 不适合:
- 长期存储重要数据(应放在独立分区)
- 高并发写密集型数据库(性能与复杂度问题)
- 需要严格权限/审计的场景(写层分离)
四、如何查看 Ubuntu 是否在使用 overlay?
mount | grep overlay
或:
cat /proc/mounts | grep overlay
Docker 容器通常能看到类似:
overlay on /var/lib/docker/overlay2/... type overlay
五、一句话总结
Ubuntu 中的 overlay 配置,本质是用“只读底层 + 可写上层”的方式,实现高效、灵活、可恢复的 filesystem 使用方式,是容器和只读系统的核心技术。
如果你愿意,我可以:
- 帮你 手动搭建一个 overlay 环境
- 解释 Docker overlay2 原理
- 或讲 Ubuntu 开机自动挂载 overlay 的配置方法