LXC OverlayFS

张开发
2026/6/2 2:55:20 15 分钟阅读
LXC OverlayFS
LXC 使用 OverlayFS 的核心目的是让多个容器共享同一个基础根文件系统只读 lowerdir各自只保存差异修改可写 upperdir实现快速创建、秒级克隆、空间极大节省。OverlayFS 核心原理LXC 视角OverlayFS 是 Linux 内核联合文件系统Union Mount把多个目录 “叠” 成一个统一视图。1. 四层结构lowerdir只读基础层LXC 模板 / 原容器 rootfs可多层dir1:dir2:dir3左 右内核 ≥4.0 支持多 lowerupperdir容器可写层所有修改存在这里唯一可写层新建、修改、删除都在这里workdirOverlayFS 内部临时目录必须与 upperdir同文件系统merged容器看到的合并根文件系统/2. 读写规则LXC 容器行为读先 upper → 找不到再读 lower写 / 修改文件不存在 upper →copy_up复制到 upper 再改文件已在 upper → 直接写 upper删除删除 lower 文件 → upper 建whiteout隐藏标记删除 upper 文件 → 真删除目录同名目录合并显示上层优先3. LXC 典型分层结构原容器 / 模板lowerdir→ 只读共享 ↓ 容器运行时 → merged/ ↑ 容器差异层upperdir→ 可写独有LXC 中 OverlayFS 的两种用法1. 用法一lxc-clone 克隆最常用秒级克隆、共享原容器 rootfs# 创建原容器普通目录型 lxc-create -t download -n my-template -- -d ubuntu -r jammy -a amd64 # Overlay 克隆关键-B overlay lxc-clone -o my-template -n my-container1 -B overlay lxc-clone -o my-template -n my-container2 -B overlay原容器/var/lib/lxc/my-template/rootfslowerdir只读新容器/var/lib/lxc/my-container1/delta0upperdir配置自动用overlayfs:/lower:/upper2. 用法二手动配置自定义路径编辑容器 config/var/lib/lxc/NAME/config# 格式overlayfs:/lowerdir:/upperdir lxc.rootfs overlayfs:/var/lib/lxc/my-template/rootfs:/var/lib/lxc/my-container/upper # 自动挂载 proc/sys/cgroup lxc.mount.auto proc sys cgroupLXC OverlayFS 配置详解config1. 典型容器 configOverlay 模式# 容器名 lxc.uts.name my-container # OverlayFS 根文件系统 lxc.rootfs overlayfs:/var/lib/lxc/ubuntu-template/rootfs:/var/lib/lxc/my-container/upper # 网络 lxc.net.0.type veth lxc.net.0.link lxcbr0 lxc.net.0.flags up # 自动挂载 lxc.mount.auto proc sys cgroup # cgroup 资源限制 lxc.cgroup.memory.limit_in_bytes 512M lxc.cgroup.cpu.shares 10242. 目录结构宿主机视角/var/lib/lxc/ ├── ubuntu-template/ # lowerdir只读 │ └── rootfs/ # 完整 Ubuntu 系统 └── my-container/ # 容器 ├── config # 配置 ├── upper/ # upperdir所有修改 └── work/ # Overlay workdir自动LXC OverlayFS 优缺点✅ 优点极快创建 / 克隆秒级不用复制 GB 级 rootfs省磁盘N 容器共享 1 份基础系统易还原删除 upperdir 即恢复初始状态模板统一更新改模板 → 所有克隆容器下次启动生效无状态⚠️ 缺点写性能损耗首次修改触发 copy_up大文件慢删除不立即释放空间upper 只删标记需手动清理原容器不能删 / 改否则所有克隆容器失效不适合强持久化数据库 / 存储服务建议用目录 /btrfs/zfs实战常用操作1. 检查容器是否用 Overlay# 看配置 grep rootfs /var/lib/lxc/my-container/config # 输出lxc.rootfs overlayfs:/... # 看挂载进入容器 mount | grep overlay # 输出overlay on / type overlay (rw,relatime,lowerdir...,upperdir...,workdir...)2. 查看容器差异upperdir 内容# 直接看宿主机上的 upperdir ls /var/lib/lxc/my-container/upper3. 重置容器恢复初始状态lxc-stop -n my-container rm -rf /var/lib/lxc/my-container/upper/* lxc-start -n my-container4. 转为普通目录容器合并 overlaylxc-stop -n my-container # 合并 upper 到新 rootfs mkdir -p /var/lib/lxc/my-container/rootfs cp -a --reflinkauto /var/lib/lxc/my-template/rootfs/* /var/lib/lxc/my-container/rootfs/ cp -a /var/lib/lxc/my-container/upper/* /var/lib/lxc/my-container/rootfs/ # 修改 config 为普通目录 sed -i s#lxc.rootfs overlayfs.*#lxc.rootfs /var/lib/lxc/my-container/rootfs# /var/lib/lxc/my-container/config lxc-start -n my-containerLXC OverlayFS vs Docker OverlayFS特性LXC OverlayDocker Overlay2定位系统容器多进程应用容器单进程分层1 lower 1 upper多层镜像 1 upper生命周期有状态、持久化无状态、可丢弃管理lxc-clone -B overlay镜像分层、自动管理修改可长期修改 upper推荐重建镜像适用场景✅大量相似容器开发 / 测试 / CI 环境✅模板 派生一个基础系统N 个实例✅快速重置沙箱、临时环境❌高写入性能数据库、消息队列建议 btrfs/zfs/directory总结LXC OverlayFS 轻量虚拟机的 “快照 克隆” 能力底层共享、上层隔离秒级创建、空间极省适合系统容器、批量实例、临时环境

更多文章