Linux 的 Overlay(OverlayFS) 是一种联合挂载(union mount)文件系统,它的核心思想是:
把多个目录“叠加”在一起,让用户看到一个统一的目录,但底层数据可以分开存放。
OverlayFS 一般涉及以下几个目录:
lower(底层,只读)
upper(上层,可读写)
work(工作目录)
merged(挂载点,用户看到的目录)
lower (只读)
+
upper (可读写)
=
merged (你看到的)
merged 里读一个文件:
upper 有没有lowermerged/readme.txt
→ upper/readme.txt ? 否
→ lower/readme.txt ✅
例如:
echo hello > merged/test.txt
实际写入的是:
upper/test.txt
Overlay 不能直接删 lower 的文件,所以:
upper 里创建一个 whiteout 文件(特殊标记)例如删除 lower/old.txt:
upper/old.txt (whiteout)
如果你修改一个 lower 中的文件:
这就是 CoW(Copy-on-Write)
修改 lower/a.txt
→ 复制 upper/a.txt
→ 修改 upper/a.txt
Docker 镜像和容器就是典型例子:
好处:
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 就是把“只读层”和“可写层”合并成一个视图,写操作只影响可写层,从而实现高效、轻量的文件系统叠加。
如果你愿意,我也可以讲: