温馨提示×

Linux overlay怎么用

小樊
43
2026-07-21 19:34:45
栏目: 智能运维

Linux 的 overlay(一般叫 OverlayFS)是一种联合文件系统,可以把多个目录“叠加”在一起,看起来像一个统一的目录。常用于 Docker、容器、live CD、系统升级 等场景。

下面从 原理 → 用法 → 实战示例 → 常见问题 来讲。


一、OverlayFS 的核心概念

OverlayFS 至少需要 两个目录

名称 作用
lowerdir 只读层(一个或多个)
upperdir 可写层
workdir 临时工作目录(必须为空)
merged 挂载后看到的统一目录

修改只会发生在 upperdirlowerdir 不会变。


二、最简使用方式(手动挂载)

1️⃣ 准备目录

mkdir -p /tmp/overlay/{lower,upper,work,merged}

2️⃣ 在 lower 里放点文件

echo "lower file" > /tmp/overlay/lower/file1

3️⃣ 挂载 overlay

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

4️⃣ 查看效果

ls /tmp/overlay/merged
cat /tmp/overlay/merged/file1

merged 里:

  • :优先 upper,没有才读 lower
  • :写入 upper
  • 删除:在 upper 产生 whiteout 文件

三、修改 / 删除行为示例

# 修改文件(实际写在 upper)
echo "modified" > /tmp/overlay/merged/file1

# 删除文件
rm /tmp/overlay/merged/file1

查看:

ls /tmp/overlay/upper

你会发现:

  • 修改 → 文件出现在 upper
  • 删除 → 产生 c--------- 的白出文件

四、多 lowerdir(层叠)

mount -t overlay overlay \
  -o lowerdir=/lower1:/lower2:/lower3,upperdir=/upper,workdir=/work \
  /merged

右边优先级高(最后面的先被看到)


五、Docker 中的 overlay(常见)

Docker 默认存储驱动之一就是 overlay2

docker info | grep Storage

Docker 镜像层 = lower
容器可写层 = upper

你一般不需要手动操作它。


六、fstab 中自动挂载

overlay /mnt/merged overlay defaults,lowerdir=/lower,upperdir=/upper,workdir=/work 0 0

七、常见错误

❌ workdir 不为空

workdir must be an empty directory

✅ 清空或重建 workdir


❌ upperdir / workdir 在同一文件系统

某些内核版本要求:

upperdir and workdir must be on same filesystem

❌ 内核不支持

lsmod | grep overlay
modprobe overlay

八、典型使用场景

✅ 容器文件系统
✅ 系统只读 + 可写临时层
✅ 升级系统(lower 是旧系统,upper 是新系统)
✅ 网吧 / 实验室环境


九、一句话总结

OverlayFS = 多个目录叠在一起,修改只发生在最上层,下层保持只读。


如果你愿意,我可以:

  • 给你 Docker overlay2 原理图解
  • 演示 只读根文件系统 + overlay
  • 或结合 systemd / initramfs 实战

你现在是用在 容器、系统、还是实验环境

0