温馨提示×

如何理解linux overlay

小樊
40
2026-10-27 00:16:15
栏目: 智能运维

理解 Linux 的 Overlay(OverlayFS),可以从“是什么、解决什么问题、怎么工作、典型用途”几个层面来看。


一、Overlay 是什么

Overlay 通常指 OverlayFS(Overlay File System),是 Linux 内核提供的一种联合挂载(union mount)文件系统。

它的核心思想是:

把多个目录“叠”在一起,对外表现为一个统一的目录,但底层目录本身并不合并。


二、为什么需要 Overlay

在没有 Overlay 之前,常见问题是:

  • 想“只读 + 可写”共存
  • 想多个环境共享基础文件
  • 想修改文件但不破坏原始系统

例如:

  • 容器运行时,不想复制整个操作系统
  • 系统恢复、只读系统中需要临时写文件

Overlay 的价值就是: ✅ 共享底层 ✅ 只记录差异 ✅ 不破坏原始数据


三、Overlay 的基本结构

OverlayFS 至少涉及这些目录:

lowerdir  (底层,只读)
upperdir  (上层,可写)
workdir   (工作目录,内核内部用)
merged    (最终挂载点,用户看到)

关系示意:

merged (= lower + upper 的视图)
   ↑
upperdir (写操作实际发生在这里)
   ↑
lowerdir (只读,可被多个 overlay 共享)

四、Overlay 的工作规则(重点)

1️⃣ 读文件

  • 先查 upper
  • 没有再去 lower
  • 同名文件以 upper 为准

2️⃣ 写文件

  • 若文件在 lower:
    • 第一次写 → 复制到 upper(copy-up)
    • 之后只改 upper
  • 若文件在 upper:
    • 直接修改

3️⃣ 删除文件

  • 在 upper 创建一个 whiteout 文件(特殊标记)
  • 用户看不到,但 lower 中文件被“屏蔽”

4️⃣ lower 可多层

lower1:lower2:lower3

越靠前优先级越高


五、一个最小示例

mkdir lower upper work merged
echo "base" > lower/file.txt

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

cat merged/file.txt
# base

echo "changed" > merged/file.txt
cat upper/file.txt
# changed

umount merged
cat lower/file.txt
# base(未被修改)

六、Overlay 的典型应用

✅ Docker / Kubernetes

  • 镜像层 = lower
  • 容器层 = upper
  • 多个容器共享同一镜像,互不干扰

✅ 系统恢复 / Live CD

  • 根文件系统只读
  • 用户输入写到 overlay

✅ 构建系统 / CI

  • 基础环境共享
  • 每次构建只保存差异

七、常见误区

❌ Overlay = 备份
✅ 不是,删 upper 就丢修改

❌ Overlay 会合并文件内容
✅ 不会,只做“视图合并”

❌ 所有文件系统都能用
✅ 通常需支持 whiteout(ext4、xfs 等)


八、一句话总结

OverlayFS 是一种“看起来的合并,实际只记差异”的文件系统,是容器和只读系统的关键技术。

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

  • Docker 存储驱动角度
  • 内核实现角度
  • 性能与坑点角度

继续深入讲。

0 踩