温馨提示×

ubuntu overlay怎么叠加文件

小樊
46
2026-09-30 22:11:54
栏目: 智能运维

在 Ubuntu(以及其它 Linux 发行版)里,“overlay”通常指 OverlayFS(overlay filesystem),它可以把多个目录“叠加”成一个统一视图,常用于容器、Live CD、嵌入式系统等场景。

下面从原理 → 手动使用 → 常见场景给你讲清楚。


一、OverlayFS 基本原理

OverlayFS 至少需要 4 个目录:

lowerdir  (只读层,可多个)
upperdir  (可读写层)
workdir   (工作目录,必须和 upperdir 同文件系统)
merged    (最终挂载后的统一视图)

规则:

  • 读文件:先从 upperdir 找,找不到再去 lowerdir
  • 写文件:写入 upperdir
  • 删除文件:在 upperdir 创建一个 “whiteout” 标记(并不真的删 lower)

二、手动创建 overlay(最常用)

1️⃣ 准备目录

mkdir -p /tmp/lower /tmp/upper /tmp/work /tmp/merged

模拟 lower 中已有文件:

echo "lower file" > /tmp/lower/a.txt
echo "lower file2" > /tmp/lower/b.txt

2️⃣ 挂载 overlay

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

3️⃣ 查看叠加效果

ls /tmp/merged
cat /tmp/merged/a.txt

你看到的就是 lower + upper 合并后的视图

4️⃣ 修改文件

echo "modify" > /tmp/merged/a.txt

实际写入的是:

cat /tmp/upper/a.txt

而 /tmp/lower/a.txt 不变(只读)


三、多个 lowerdir 叠加

mkdir -p /tmp/lower1 /tmp/lower2

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

⚠️ 注意:

  • lowerdir 用冒号 : 分隔
  • 靠前的优先级更高

四、卸载 overlay

sudo umount /tmp/merged

五、容器 / Docker 中的 overlay

Docker 默认使用 overlay2:

docker info | grep Storage

镜像层 = lower
容器层 = upper

你一般不需要手动操作,除非做调试。


六、常见用途

✅ Live USB(只读系统 + 可写内存)
✅ Docker / Kubernetes
✅ 系统恢复环境
✅ 只读根文件系统 + 临时修改


七、常见错误

❌ workdir 和 upperdir 不在同一文件系统
❌ 权限不足(需要 root)
❌ lower 被修改(lower 必须只读)


如果你是指:

  • Docker overlay 网络
  • Ubuntu 桌面文件叠加
  • 系统启动时使用 overlay

可以告诉我具体场景,我可以给你更针对性的方案。

0 踩