Linux 的 overlay 文件系统可以把多个目录“叠加”成一个,常用于 Docker、Live CD、容器、只读根文件系统 等场景。下面从 原理 → 手动挂载 → 常见用法 → 示例 系统说明。
overlay 至少需要 两个目录:
| 名称 | 作用 |
|---|---|
lowerdir |
只读层(可以多个) |
upperdir |
可读写层(修改会写到这里) |
workdir |
临时工作目录(必须为空) |
merged |
最终挂载点(你看到的结果) |
规则:
upperdir,再 lowerdirupperdirupperdir 中创建 whiteout 文件mkdir -p /tmp/overlay/{lower,upper,work,merged}
echo "lower file" > /tmp/overlay/lower/lower.txt
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/lower.txt
写入测试:
echo "new file" > /tmp/overlay/merged/new.txt
查看实际写入位置:
ls /tmp/overlay/upper
mount -t overlay overlay \
-o lowerdir=/lower1:/lower2:/lower3,upperdir=/upper,workdir=/work \
/merged
优先级:
lower1 > lower2 > lower3
overlay /mnt/merged overlay
lowerdir=/data/lower,upperdir=/data/upper,workdir=/data/work
0 0
⚠️ 注意:
workdir 不能和 upperdir/lowerdir 相同workdir 必须为空Docker 默认使用:
overlay2
查看:
docker info | grep -i storage
Docker 的 overlay 结构:
/var/lib/docker/overlay2
├── l(短链接)
├── diff(upperdir)
├── merged
└── work
workdir must be an empty directory
✅ 解决:清空 workdir
旧内核要求:
upperdir 和 workdir 在同一文件系统modprobe overlay
或检查:
ls /sys/module/overlay
umount /tmp/overlay/merged
| 场景 | 说明 |
|---|---|
| Docker | 镜像 + 容器层 |
| Live CD | 只读系统 + 内存写层 |
| 系统恢复 | 升级不影响原系统 |
| 只读根文件系统 | embedded / IoT |
如果你愿意,我可以:
直接说你的使用场景即可。