当前位置: 首页 > news >正文

LXC OverlayFS

LXC 使用 OverlayFS 的核心目的是:让多个容器共享同一个基础根文件系统(只读 lowerdir),各自只保存差异修改(可写 upperdir),实现快速创建、秒级克隆、空间极大节省

OverlayFS 核心原理(LXC 视角)

OverlayFS 是 Linux 内核联合文件系统(Union Mount),把多个目录 “叠” 成一个统一视图。

1. 四层结构

  • lowerdir只读基础层(LXC 模板 / 原容器 rootfs)
    • 可多层(dir1:dir2:dir3,左 > 右)
    • 内核 ≥4.0 支持多 lower
  • upperdir容器可写层(所有修改存在这里)
    • 唯一可写层
    • 新建、修改、删除都在这里
  • workdir:OverlayFS 内部临时目录
    • 必须与 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/rootfs(lowerdir,只读)
  • 新容器
    • /var/lib/lxc/my-container1/delta0(upperdir)
    • 配置自动用overlayfs:/lower:/upper

2. 用法二:手动配置(自定义路径)

编辑容器 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 cgroup

LXC OverlayFS 配置详解(config)

1. 典型容器 config(Overlay 模式)

# 容器名 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 = 1024

2. 目录结构(宿主机视角)

/var/lib/lxc/ ├── ubuntu-template/ # lowerdir(只读) │ └── rootfs/ # 完整 Ubuntu 系统 └── my-container/ # 容器 ├── config # 配置 ├── upper/ # upperdir(所有修改) └── work/ # Overlay workdir(自动)

LXC OverlayFS 优缺点

✅ 优点

  1. 极快创建 / 克隆:秒级(不用复制 GB 级 rootfs)
  2. 省磁盘:N 容器共享 1 份基础系统
  3. 易还原:删除 upperdir 即恢复初始状态
  4. 模板统一更新:改模板 → 所有克隆容器下次启动生效(无状态)

⚠️ 缺点

  1. 写性能损耗:首次修改触发 copy_up(大文件慢)
  2. 删除不立即释放空间:upper 只删标记,需手动清理
  3. 原容器不能删 / 改:否则所有克隆容器失效
  4. 不适合强持久化:数据库 / 存储服务建议用目录 /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/upper

3. 重置容器(恢复初始状态)

lxc-stop -n my-container rm -rf /var/lib/lxc/my-container/upper/* lxc-start -n my-container

4. 转为普通目录容器(合并 overlay)

lxc-stop -n my-container # 合并 upper 到新 rootfs mkdir -p /var/lib/lxc/my-container/rootfs cp -a --reflink=auto /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-container

LXC 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 = 轻量虚拟机的 “快照 + 克隆” 能力

  • 底层共享、上层隔离
  • 秒级创建、空间极省
  • 适合系统容器、批量实例、临时环境
http://www.jsqmd.com/news/571739/

相关文章:

  • 5步高效掌握B站视频下载:BilibiliDown全流程应用指南
  • 3小时搭建专属中文法律AI助手:ChatLaw实战指南
  • 告别NeRF的慢与笨:用SplaTAM的3D高斯球,在普通笔记本上也能玩转实时RGB-D SLAM
  • Fast-LIVO2实战:如何让海康工业相机与Livox雷达实现时间戳硬同步?
  • 多动症干预措施是什么?哈氏训练在课堂注意力不集中和情绪管理中的应用是什么?
  • EDSR超分辨率镜像API调用教程:从单张测试到批量处理的进阶
  • 2026年4月徐州全包/二手房/别墅/毛坯房/老房翻新装修公司深度测评:五家实力派谁更值得托付? - 2026年企业推荐榜
  • 【学习】IP地址:数字世界的“门牌号”怎么读?
  • 避坑指南|快温变试验箱选型:四大核心要点(温变速率/质量/口碑/售后)详解 - 品牌推荐大师
  • 别再只用Hydra了!Kali下用Medusa暴力破解SSH密码的完整实战与对比(附线程调优心得)
  • 深入解析GATT:BLE数据传输的核心架构与实战应用
  • 阿里AI办公神器!3步上手,告别加班,效率翻倍!QoderWork深度解析
  • ChatGPT_JCM用户反馈收集:构建更好产品的用户研究方法
  • 从理论到实践:传递函数离散化方法对比与Matlab仿真指南
  • 告别闭集检测!用Grounding DINO + Python 3.11 实现‘一句话找图’的保姆级教程
  • 突破限制的启动盘制作工具:让Mac用户轻松创建Windows启动USB的开源方案
  • 【运维】Linux交换空间实战:如何高效利用硬盘扩展内存并优化性能
  • 2026中国木门十大品牌排行榜及行业品质参考 - 品牌排行榜
  • 2025 Cursor Pro功能永久解锁方案:AI编程助手无限制使用指南
  • 利用 Apache SeaTunnel UDF 高效解析 Kafka 嵌套 JSON 数据实战
  • AI如何重塑CAD设计?DeepCAD技术解析与实战指南
  • CONSONANCE如韵电子 CN825R SOT23-6 监控和复位芯片
  • 避坑指南:Windows系统下Dify插件开发,这几个细节和官方文档不一样
  • OpenEuler 23.09上,5分钟搞定Chrony时间同步服务器(附国内高校/企业NTP源清单)
  • Prompt | GitHub copilot 帮我复现别人的工作
  • 决策型Agent正在成为汽车制造的核心工厂大脑
  • 如何帮助A娃克服写作业拖延症和冲动行为?
  • 如何使用 UEFI Shell 执行 Hello World 程序 - 阿源
  • PCB设计进阶指南:贴片电容与插件电容的选型策略与实战技巧
  • ReAct:让AI学会“边想边做“,小白程序员必备收藏,轻松驾驭大模型!