【docker】overlay2文件系统

Overlay2 是基于 Linux 内核的 OverlayFS 的文件系统,OverlayFS 是改进的 UnionFS,从 Linux 3.18 引入,它允许多个文件系统层(layers)叠加在一起,形成一个统一的视图。Overlay2 又是 OverlayFS 的改进版本,由于是直接基于内核实现,因此 Overlay2 专用于管理容器镜像和容器层的存储时, 能提供比用户态文件系统(aufs)更好的性能和可扩展性。Overlay2 是 Docker 的默认存储驱动。
overlayFS的架构如下:
OverlayFS 底层思想与 AUFS 相同,概念也几乎相同:将多个层组合在一起以构建联合文件系统。 图中的 lowerdir 是 AUFS 中的只读层,而 upperdir 对应于读/写层。
与 AUFS 比较,OverlayFS 使用了一个 workdir 临时目录来支持 OverlayFS 文件系统的内部操作, 如文件的重命名和删除等,该目录必须是空的,并且在挂载期间不能被其他进程使用 OverlayFS 仅支持将 1 个只读层与 1 个读写层合并(但可以通过嵌套叠加来实现多层叠加)。而现 在 Overlay2 可支持多达 128 个层级(lower layers)。
  • AUFS: 原生支持 多个只读分支(层)。

  • 早期 OverlayFS (Overlay): 原生只支持一个只读层 (lowerdir)。需要多层只读时,必须通过嵌套挂载实现,较为繁琐。

  • Overlay2 (现代 OverlayFS): 原生支持多个只读层 (lowerdir) (最多 128 层),与 AUFS 在多层支持能力上达到同等水平,且实现方式更直接高效

workdir作用

场景 1: 新建文件(不需要 workdir
  • ➕ 新建 file4:直接写入 upperlayer/file4

  • ✅ 操作简单,无需 workdir

场景 2: 修改文件(不需要 workdir
  • ✏️ 修改 file3 (来自 layer2):

    1. 先将 layer2/file3 复制到 upperlayer/file3 (Copy-on-Write)

    2. 修改 upperlayer/file3

  • ✅ 直接在 upperlayer 完成


场景 3: 删除文件(需要 workdir 协作)
  • ❌ 删除 file2 (来自 layer1):

    1. OverlayFS 在 upperlayer 创建 whiteout 文件.wh.file2

    2. workdir 角色:在删除过程中临时处理元数据锁定,确保操作原子性

    3. 结果:file2 在挂载点"消失"


场景 4: 重命名文件(严重依赖 workdir
  • 🔄 将 file1 重命名为 file1_new

    1. 复杂性来源

      • file1 实际数据在 layer2(因为 layer2 覆盖了 layer1)

      • 重命名需要跨层操作

    2. workdir 的关键作用

      • 在 workdir 创建临时副本(避免损坏原始数据)

      • 原子性操作步骤:

      • 最终结果

        • upperlayer 出现 file1_new(新文件)

        • upperlayer 出现 .wh.file1(标记删除原只读文件)

为什么一定要使用workdir?

  1. 原子性保证 (Atomicity)
    重命名/删除操作必须"完全成功"或"完全失败",不能出现中间状态。workdir 提供安全沙盒完成多步操作。

  2. 避免数据损坏
    直接操作 upperlayer 可能因断电/崩溃导致:

    • 新文件写入一半

    • 旧文件已删但新文件未就绪,workdir 作为缓冲降低风险。

  3. 遵守 POSIX 语义
    文件系统必须满足 rename() 系统调用的原子性要求,workdir 是实现此承诺的基础设施。

  4. 性能优化
    虽然多了一次临时复制,但避免了全局文件锁,提升了并发性能。

workdir 是 OverlayFS 为保证复杂文件操作的安全性和一致性而设计的临时工作区,尽管用户数据始终只存在于 upperlayer 和只读层中。

OverlayFS 的创新不是要改变“有一个可写层”这个联合文件系统的基本模式,而是要创建一个更符合内核标准、更简单高效、更可持续且最终功能完备的替代方案,以解决 AUFS 的历史遗留问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值