温馨提示×

怎样学习linux overlay好

小樊
35
2026-09-24 20:11:32
栏目: 智能运维

学习 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 中访问文件时:

  1. 先看 upper
  2. 再看 lower(从下到上)

2️⃣ 写时复制(CoW)

  • 改 lower 文件 → 复制到 upper 再改
  • 删 lower 文件 → upper 生成 whiteout

3️⃣ whiteout 机制

  • c--------- 字符设备
  • 名字相同,表示“删除”
ls -l upper

四、典型使用场景(学完更有感觉)

✅ Docker 镜像与容器

  • 镜像 = 多层 lower
  • 容器 = upper + lower
  • 容器删除 = 删 upper
docker info | grep Storage

✅ 系统只读保护

  • rootfs 只读
  • overlay 提供可写层

✅ 嵌入式 / live CD

  • 光盘只读
  • 内存作为 upper

五、进阶学习方向

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


七、推荐学习路线总结

  1. 看 man overlay
  2. 手敲 mount 示例
  3. 对比 upper / lower 变化
  4. 学 Docker 存储驱动
  5. 读内核 overlay 源码(可选)

如果你愿意,我可以:

  • 给你 一步一步的实验脚本
  • 用 Docker 例子讲 Overlay
  • 或讲 Overlay 在 Kubernetes 里怎么用

你更想从哪一块开始?

0 踩