在 Linux 中,overlay 文件系统(Overlay Filesystem)可以把多个目录合并成一个统一的挂载点,常用于容器(如 Docker)、Live CD、只读根文件系统等场景。下面按常见用法 → 实战示例 → 常见问题来说明。
overlay 是一种联合文件系统(union filesystem):
mount -t overlay overlay \
-o lowerdir=<lower>,upperdir=<upper>,workdir=<work> \
<挂载点>
| 目录 | 作用 |
|---|---|
| lowerdir | 只读层(可以多个) |
| upperdir | 可写层 |
| workdir | 工作目录(必须为空) |
| 挂载点 | 最终看到的目录 |
⚠️ workdir 不能与 upperdir / lowerdir 相同
mkdir -p /tmp/overlay/{lower,upper,work,merged}
echo "hello from lower" > /tmp/overlay/lower/file.txt
mount -t overlay overlay \
-o lowerdir=/tmp/overlay/lower,upperdir=/tmp/overlay/upper,workdir=/tmp/overlay/work \
/tmp/overlay/merged
cat /tmp/overlay/merged/file.txt
# hello from lower
修改文件:
echo "modified" >> /tmp/overlay/merged/file.txt
cat /tmp/overlay/upper/file.txt
✅ 修改只发生在 upperdir
mount -t overlay overlay \
-o lowerdir=/lower1:/lower2:/lower3,upperdir=/upper,workdir=/work \
/merged
规则:
overlay /mnt/merged overlay
lowerdir=/lower,upperdir=/upper,workdir=/work
0 0
或完整写法:
overlay /mnt/merged overlay defaults,lowerdir=/lower,upperdir=/upper,workdir=/work 0 0
Docker 通常使用:
overlay2/var/lib/docker/overlay2查看示例:
mount | grep overlay
umount /tmp/overlay/merged
⚠️ 如果提示 busy:
fuser -m /tmp/overlay/merged
overlay: workdir is in-use
✅ 解决:清空 workdir
有时需要同一文件系统(ext4/xfs)
mount: No such file or directory
如果你愿意,可以告诉我:
我可以直接给你针对场景的完整挂载方案。