--- title: "Partition Updates" type: concept tags: - Operating System - Updates - Reliability - A/B Testing sources: - public-cloud-learning-sessions-eks-optimization-part-2-of-3-running-containers-w last_updated: 2026-04-24 --- # Partition Updates(分区镜像更新) 分区镜像更新是一种操作系统原子更新策略,通过 A/B 双分区设计,在线下载新版本镜像到非活动分区,重启后切换激活,确保更新过程的原子性和系统一致性。 ## 核心设计 ``` ┌─────────────────────────────────────────────┐ │ 磁盘布局 │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ 分区 A │ │ 分区 B │ │ Data Vol │ │ │ │ (活动) │ │ (备用) │ │ (数据卷) │ │ │ │ OS v1.0 │ │ OS v1.1 │ │ 容器镜像 │ │ │ │ 正在运行 │ │ 空闲 │ │ 持久数据 │ │ │ └──────────┘ └──────────┘ └──────────┘ │ └─────────────────────────────────────────────┘ ``` **更新流程:** 1. 下载新版本镜像到备用分区(分区 B) 2. 验证镜像完整性(哈希校验 + 签名验证) 3. 更新引导配置,指向新分区 4. 重启系统 5. 固件/引导加载程序从新分区启动 6. 新分区变为活动分区,旧分区变为备用分区 ## 优势 - **原子性**:更新要么完全成功,要么系统回退到原状态,不存在"半更新"状态 - **回滚能力**:如果新版本启动失败,可手动或自动回滚到旧分区 - **零停机更新**:无需停止正在运行的工作负载即可下载和准备新版本 - **一致性保证**:切换前已完成新镜像验证,确保启动后的系统状态可预测 - **适用于关键系统**:电信、金融、工业控制系统等不能容忍更新失败的业务 ## 与传统包管理更新的对比 | 维度 | 包管理更新(apt/yum) | 分区镜像更新(A/B) | |------|---------------------|-------------------| | 原子性 | 非原子(可能中断于中途) | 原子(全部成功或全部失败) | | 回滚 | 依赖包管理器功能,通常复杂 | 简单(切换回旧分区即可) | | 根文件系统一致性 | 难以保证 | 完整镜像替换,一致性保证 | | 适用场景 | 通用 Linux 服务器 | 容器宿主、嵌入式系统 | | 存储开销 | 无额外开销 | 需要双倍存储空间 | ## 在 Bottlerocket 中的实现 Bottlerocket OS 采用分区镜像更新机制: - 根分区分为 A、B 两组,每组包含 `root_a`/`root_b` 逻辑分区 - Data Volume(数据卷)独立于根分区,存储容器镜像和应用数据,更新不受影响 - Data Volume 支持快照预填充(snapshot pre-population),可在构建时就注入容器镜像,加快首次启动 - 通过 Bottlerocket API 查看当前活动分区版本和待激活版本 ## 相关技术 - [[OSTree]]:基于 Git 的操作系统更新系统,类似的原子升级理念 - [[Immutable-Root-Filesystem]]:分区更新的最终目标——确保根文件系统一致性 - [[dm-verity]]:与分区更新配合,验证新分区的完整性