温馨提示×

怎样理解debian overlay原理

小樊
39
2026-10-19 05:24:34
栏目: 智能运维

理解 Debian 中的 overlay(OverlayFS)原理,可以从“联合挂载文件系统”这个核心概念入手。它在 Debian(以及大多数 Linux 发行版)中常用于容器、Live CD、系统只读 rootfs + 可写层等场景。

下面分层说明。


一、OverlayFS 是什么

OverlayFS 是 Linux 内核提供的一种联合文件系统(union filesystem):

它把 多个目录 合并成一个 统一的视图,但底层目录本身不被修改。

在 Debian 中,OverlayFS 通常通过 overlay 内核模块实现:

modprobe overlay

或使用 mount -t overlay。


二、Overlay 的基本组成

Overlay 挂载至少需要 两个目录:

1. lowerdir(只读层)

  • 基础文件系统
  • 通常是 只读的
  • 可以多层(Debian 新版本支持 multiple lowerdirs)

2. upperdir(可写层)

  • 用户修改写入的地方
  • 必须是一个 可写文件系统
  • 只有这一层会被真正修改

3. workdir(工作目录)

  • OverlayFS 内部使用
  • 必须和 upperdir 在同一文件系统
  • 用于原子操作、临时文件

4. merged(挂载点)

  • 用户看到的“统一文件系统”
  • 实际不存在真实数据,只是视图

三、Debian 中典型的 overlay 挂载命令

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

挂载后:

/lower   (只读)
/upper   (可写)
/work    (内部用)
/merged  (用户看到)

四、Overlay 的工作原理(关键点)

1. 文件读取规则(从上到下)

当用户访问 /merged/file:

  • 如果 upper 中有 → 用 upper 的
  • 否则 → 用 lower 的

✅ upper 覆盖 lower


2. 文件写入规则

写已存在的 lower 文件

  • 不会改 lower
  • 先 copy-up(复制到 upper)
  • 再在 upper 中修改

这就是为什么第一次写大文件会慢


新建文件

  • 直接写入 upperdir

删除文件

  • 在 upper 中创建 whiteout(白出)文件
  • lower 中文件“看不见”,但并未被删除

白出文件示例(字符设备):

c--------- 1 root root 0, 0 whiteout

五、Debian 常见使用场景

1. Debian Live CD / Live USB

  • lower: squashfs(只读)
  • upper: tmpfs / 持久分区
  • 用户修改不破坏原始系统

2. Docker / Podman(Debian 上)

镜像层 = lowerdirs
容器层 = upperdir

image layer 1
image layer 2
container writable layer

3. 系统只读 rootfs + 可写配置

例如嵌入式 Debian:

  • rootfs 只读
  • /etc 可写 overlay

六、Debian 版本与支持情况

Debian 版本 内核 Overlay 支持
Debian 8 3.16 实验性
Debian 9 4.9 稳定
Debian 10+ 4.19+ 多 lowerdir

七、通俗类比(帮助理解)

把 Overlay 想成:

透明文件夹 + 便签纸

  • lower = 原书(不能改)
  • upper = 便签(写修改)
  • merged = 你看到的书

你写的字不在原书上,而在便签上。


八、常见误区

❌ Overlay 会复制整个文件系统
✅ 只有被修改的文件才会 copy-up

❌ lower 可以被写
✅ lower 必须视为只读

❌ overlay 是备份方案
✅ 它只是视图层,不是数据冗余


如果你愿意,我可以:

  • 画一张 Overlay 目录结构图
  • 讲 Debian initramfs 中如何使用 overlay
  • 或结合 Docker 镜像层 深入讲

0 踩