温馨提示×

linux overlay是啥原理

小樊
32
2026-10-15 06:31:59
栏目: 智能运维

Linux 的 Overlay(OverlayFS) 是一种联合挂载(union mount)文件系统,它的核心思想是:
把多个目录“叠加”在一起,让用户看到一个统一的目录,但底层数据可以分开存放。


一、OverlayFS 的基本概念

OverlayFS 一般涉及以下几个目录:

  1. lower(底层,只读)

    • 可以是一个或多个目录
    • 通常是只读的(比如基础镜像)
  2. upper(上层,可读写)

    • 只有一个
    • 所有写操作都会发生在这里
  3. work(工作目录)

    • 内部使用,用户不可见
    • 用于文件copy-up等操作
  4. merged(挂载点,用户看到的目录)

    • lower + upper 合并后的统一视图
lower (只读)
   +
upper (可读写)
   =
merged (你看到的)

二、核心原理

1. 读文件(Read)

  • 如果在 merged 里读一个文件:
    • 先看 upper 有没有
    • 没有再看 lower
  • 对用户来说,完全透明
merged/readme.txt
  → upper/readme.txt ? 否
  → lower/readme.txt ✅

2. 写文件(Write)

  • 写操作 只会发生在 upper
  • lower 永远不被修改

例如:

echo hello > merged/test.txt

实际写入的是:

upper/test.txt

3. 删除文件(Delete)

Overlay 不能直接删 lower 的文件,所以:

  • 在 upper 里创建一个 whiteout 文件(特殊标记)
  • 表示“这个文件在 merged 中不存在”

例如删除 lower/old.txt:

upper/old.txt (whiteout)

4. Copy-up(写时复制)

如果你修改一个 lower 中的文件:

  1. 先把文件从 lower 复制到 upper
  2. 然后在 upper 中修改

这就是 CoW(Copy-on-Write)

修改 lower/a.txt
→ 复制 upper/a.txt
→ 修改 upper/a.txt

三、为什么 Docker 用它?

Docker 镜像和容器就是典型例子:

  • 镜像层 = lower(只读)
  • 容器层 = upper(可读写)
  • 容器删除后,upper 被清掉,镜像不变

好处:

  • 省空间(多层共享)
  • 启动快
  • 隔离性好

四、手动体验 OverlayFS

mkdir lower upper work merged
echo "from lower" > lower/a.txt

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

cat merged/a.txt
echo "modify" > merged/a.txt

五、一句话总结

OverlayFS 就是把“只读层”和“可写层”合并成一个视图,写操作只影响可写层,从而实现高效、轻量的文件系统叠加。

如果你愿意,我也可以讲:

  • overlay 和 aufs 的区别
  • Docker 多层 overlay 怎么组织
  • overlay 在 Kubernetes 里的使用

0 踩