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

71 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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]]:与分区更新配合,验证新分区的完整性