Linux 的 overlay(一般叫 OverlayFS)是一种联合文件系统,可以把多个目录“叠加”在一起,看起来像一个统一的目录。常用于 Docker、容器、live CD、系统升级 等场景。
下面从 原理 → 用法 → 实战示例 → 常见问题 来讲。
OverlayFS 至少需要 两个目录:
| 名称 | 作用 |
|---|---|
| lowerdir | 只读层(一个或多个) |
| upperdir | 可写层 |
| workdir | 临时工作目录(必须为空) |
| merged | 挂载后看到的统一目录 |
修改只会发生在 upperdir,lowerdir 不会变。
mkdir -p /tmp/overlay/{lower,upper,work,merged}
echo "lower file" > /tmp/overlay/lower/file1
mount -t overlay overlay \
-o lowerdir=/tmp/overlay/lower,upperdir=/tmp/overlay/upper,workdir=/tmp/overlay/work \
/tmp/overlay/merged
ls /tmp/overlay/merged
cat /tmp/overlay/merged/file1
在 merged 里:
whiteout 文件# 修改文件(实际写在 upper)
echo "modified" > /tmp/overlay/merged/file1
# 删除文件
rm /tmp/overlay/merged/file1
查看:
ls /tmp/overlay/upper
你会发现:
upperc--------- 的白出文件mount -t overlay overlay \
-o lowerdir=/lower1:/lower2:/lower3,upperdir=/upper,workdir=/work \
/merged
✅ 右边优先级高(最后面的先被看到)
Docker 默认存储驱动之一就是 overlay2:
docker info | grep Storage
Docker 镜像层 = lower
容器可写层 = upper
你一般不需要手动操作它。
overlay /mnt/merged overlay defaults,lowerdir=/lower,upperdir=/upper,workdir=/work 0 0
workdir must be an empty directory
✅ 清空或重建 workdir
某些内核版本要求:
upperdir and workdir must be on same filesystem
lsmod | grep overlay
modprobe overlay
✅ 容器文件系统
✅ 系统只读 + 可写临时层
✅ 升级系统(lower 是旧系统,upper 是新系统)
✅ 网吧 / 实验室环境
OverlayFS = 多个目录叠在一起,修改只发生在最上层,下层保持只读。
如果你愿意,我可以:
你现在是用在 容器、系统、还是实验环境?