Files
nexus/wiki/concepts/Partition-Updates.md

3.5 KiB
Raw Blame History

title, type, tags, sources, last_updated
title type tags sources last_updated
Partition Updates concept
Operating System
Updates
Reliability
A/B Testing
public-cloud-learning-sessions-eks-optimization-part-2-of-3-running-containers-w
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:与分区更新配合,验证新分区的完整性