学习 Linux Overlay(OverlayFS),建议从“概念 → 原理 → 实践 → 场景 → 排错”这条主线走。下面给你一套比较系统的学习路径。
一、先搞清楚 Overlay 是什么
OverlayFS 是一种 联合文件系统(union filesystem),可以把多个目录“叠加”成一个目录:
- 上层(upper):可读写
- 下层(lower):只读(可以有多个)
- 合并层(merged):用户看到的统一视图
- work 目录:内部使用,不能动
典型特点:
写时复制(Copy-on-Write, CoW)
修改文件时:
二、基础学习资源(按优先级)
1️⃣ 官方 & 内核文档(最权威)
man overlay
或在线:
- https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt
重点看:
- lowerdir / upperdir / workdir / merged
- 多层 lower 的合并规则
- 白out 文件(whiteout)
2️⃣ 动手实验(最重要)
最小可运行示例
mkdir -p /tmp/overlay/{lower,upper,work,merged}
echo "lower file" > /tmp/overlay/lower/a.txt
mount -t overlay overlay \
-o lowerdir=/tmp/overlay/lower,upperdir=/tmp/overlay/upper,workdir=/tmp/overlay/work \
/tmp/overlay/merged
ls /tmp/overlay/merged
然后试:
- 修改 merged 里的文件
- 删除文件
- 看 upper 里多出来什么
三、理解核心机制(关键)
1️⃣ 文件查找顺序
merged 中访问文件时:
- 先看 upper
- 再看 lower(从下到上)
2️⃣ 写时复制(CoW)
- 改 lower 文件 → 复制到 upper 再改
- 删 lower 文件 → upper 生成 whiteout
3️⃣ whiteout 机制
c--------- 字符设备
- 名字相同,表示“删除”
ls -l upper
四、典型使用场景(学完更有感觉)
✅ Docker 镜像与容器
- 镜像 = 多层 lower
- 容器 = upper + lower
- 容器删除 = 删 upper
docker info | grep Storage
✅ 系统只读保护
✅ 嵌入式 / live CD
五、进阶学习方向
1️⃣ 多层 lower
lowerdir=/l1:/l2:/l3
规则:
2️⃣ Overlay + 容器 Runtime
- runc
- containerd
- Kubernetes
3️⃣ 性能与坑
- 大量小文件 CoW 慢
- inode 限制
- NFS 不支持 workdir
六、常见排错经验
❌ overlayfs: workdir is not empty
✅ workdir 必须为空
❌ upperdir and workdir must be on same fs
✅ 同一文件系统
❌ 文件“删了还在”
✅ 看 whiteout
七、推荐学习路线总结
- 看
man overlay
- 手敲 mount 示例
- 对比 upper / lower 变化
- 学 Docker 存储驱动
- 读内核 overlay 源码(可选)
如果你愿意,我可以:
- 给你 一步一步的实验脚本
- 用 Docker 例子讲 Overlay
- 或讲 Overlay 在 Kubernetes 里怎么用
你更想从哪一块开始?