跳转到正文
Shane Blog
返回

A/B 分区:手机系统更新为什么可以边用边装

A/B 分区:手机系统更新为什么可以边用边装

早些年安卓设备升级系统,经常要经历一段”安装中,请勿关机”的漫长等待,期间手机基本没法用。现在大部分设备升级时,更新包在后台悄悄下载安装,用户几乎感觉不到,重启一次就完事了。这背后的关键设计叫 A/B 分区,这篇讲讲它具体是怎么回事。

老方案的问题:只有一份系统

传统的单分区(non-A/B)方案里,设备只有一份 system 分区。升级系统时,流程大致是:先进入一个特殊的更新模式(通常是 Recovery),把新版本的内容覆盖写入这唯一的 system 分区,写入过程中设备没法正常使用,而且如果这个过程中出现意外掉电或者中断,原来的系统内容可能已经被覆盖了一半,设备就会变砖,只能靠额外手段救援。

A/B 方案:两份完整的系统分区

A/B 分区(也叫无缝更新,Seamless Update)的思路是给关键的系统分区各准备两份,分别叫 slot A 和 slot B。设备任意时刻都只从其中一个 slot 启动运行(比如当前在用 A),另一个 slot(B)处于闲置状态。

升级时,系统会把新版本的内容写入当前没有在用的那个闲置 slot(比如把新系统写进 B),整个写入过程都在后台进行,不影响用户正在使用的 A slot,自然也就不需要中断用户操作。写入完成、校验通过之后,设备会把”下次启动应该用哪个 slot”的标记切换成 B,等下一次正常重启(比如安装完成后的那次重启,或者用户自己重启),就会自动切换到刚刚写好的新系统上运行。

出问题了怎么办

A/B 方案还带来一个额外的好处:回滚安全性。如果切换到新 slot 之后,设备在启动过程中反复失败(比如卡在开机动画,或者核心服务连续崩溃),Bootloader 层面通常会有一套计数机制,判定新 slot 启动异常后,自动把启动标记切回旧的、已知能正常工作的那个 slot,设备相当于”自动回滚”到升级前的状态,而不会因为一次升级失败就直接变砖。

两个 slot 不是完全独立的两份系统

严格来说,并不是所有分区都做了 A/B 双份处理,像用户数据分区(userdata,存放照片、App 数据这些)通常只有一份,是两个 slot 共享的。做双份的主要是系统本身相关的只读分区,比如 system、vendor、boot 这些,这也是为什么切换 slot 之后不会丢失用户数据。

代价是什么

A/B 方案不是没有成本的,最直接的代价是存储空间——设备出厂时就要为这些做了双份处理的分区预留双倍空间,哪怕其中一份大部分时间都闲置着。这也是为什么早期存储成本较高的年代,这类设计没有普及,是随着存储成本下降、用户对”升级不中断”的体验要求变高,才逐渐成为主流机型的标配。

小结

A/B 分区本质上是用空间换体验:提前准备好两份关键系统分区,新版本安装在后台闲置的那一份上,装完只需要一次切换加重启就能生效,同时天然带上了失败自动回滚的安全网。理解这套机制之后,再遇到系统更新”边用边装、几乎无感”这种体验,就知道背后靠的是哪层设计在支撑了。


分类:
标签:
分享此文章:

上一篇
刷入一个自定义 ROM,手机里到底发生了什么
下一篇
Bootloader 解锁到底在解锁什么