温馨提示×

怎样理解linux overlay

小樊
53
2026-10-24 02:32:37
栏目: 智能运维

理解 Linux 的 Overlay(OverlayFS),可以从“分层”“合并视图”“写时复制”这几个核心概念入手。它本质上是一种联合挂载(union mount)文件系统,常用于容器、Live CD、系统只读保护等场景。


一、Overlay 是什么?

OverlayFS 是 Linux 内核提供的一种文件系统,它能把多个目录“叠加”在一起,对外提供一个统一的目录视图:

  • 上层(upper):可读写
  • 下层(lower):只读(可以有多层)
  • 合并层(merged):用户看到的统一视图

用户对 merged 目录的操作,实际会按规则落到 upper 或 lower 上。


二、核心目录结构

典型的 overlay 挂载结构:

upper/      # 可读写层
lower/      # 只读层(可以多个)
work/       # 内核内部工作目录(必须和 upper 同文件系统)
merged/     # 用户看到的统一视图

挂载命令示例:

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

三、关键机制(非常重要)

1. 看得到:合并视图

  • merged 中能看到:
    • lower 的文件
    • upper 的文件
  • 同名文件:upper 覆盖 lower

2. 读文件

  • 优先读 upper
  • upper 没有才读 lower

3. 写文件(写时复制,Copy-on-Write)

  • 写 lower 中已有的文件:
    • 先从 lower 复制到 upper
    • 再在 upper 中修改
  • lower 始终不被改动(只读保护)

4. 新建文件

  • 直接在 upper 中创建

5. 删除文件

  • 在 upper 中创建一个 whiteout(白障)文件
  • 用户看到“文件消失”,但 lower 原文件还在

四、为什么容器爱用 Overlay?

以 Docker 为例:

  • 镜像层 = lower(只读)
  • 容器层 = upper(可读写)
  • 容器根目录 = merged

好处:

  • 多个容器共享同一镜像层(省空间)
  • 容器修改不影响镜像
  • 启动快、占用少

五、常见使用场景

  • Docker / Kubernetes 存储驱动
  • 系统只读根文件系统 + 可写层
  • Live CD / 恢复系统
  • 软件环境隔离

六、简单类比(帮助理解)

把 Overlay 想象成:

透明玻璃板(upper)盖在画(lower)上

  • 你看的是“玻璃 + 画”
  • 你在玻璃上涂写,画本身不变
  • 擦掉玻璃上的内容,画还在

七、常见误区

❌ overlay 是“备份工具”
✅ 它是“视图层叠机制”

❌ lower 可以写
✅ lower 必须只读

❌ upper 可以多个
✅ 只有一个 upper(lower 可多层)


如果你愿意,我也可以:

  • 用 具体文件操作示例演示
  • 讲 Docker 中的 overlay2
  • 或对比 Overlay vs AUFS / Btrfs

你想从哪方面再深入?

0 踩