Android中的A/B分区

Android中的A/B分区系统是在Android 7.0(Nougat)中首次引入的,目的是为了实现无缝更新。A/B分区意味着设备上有两套可以工作的系统分区,通常称为slot A和slot B。一个分区用于当前正在运行的系统(活动分区),而另一个分区则可用于后台更新而不干扰用户的使用。

升级步骤

以下是使用A/B分区进行系统升级的大致步骤:

  1. 下载更新包:当有新的系统更新时,设备会自动在后台下载更新包。

  2. 安装到非活动分区:更新包会被安装到当前非活动的分区(例如,如果slot A是活动分区,则更新会被安装到slot B)。这个过程不会影响用户当前的操作,因为它是发生在非活动分区上。

  3. 验证更新:一旦更新完成,系统会对新安装的分区进行验证以确保没有错误。

  4. 重启到新系统:如果一切正常,下一次设备重启时,bootloader将切换到更新过的分区(在这个例子中是从slot A切换到slot B)。这通常被称为无缝更新,因为它最小化了用户等待系统更新的时间,并减少了更新失败导致设备不可用的风险。

  5. 标记旧分区为可更新:如果新的系统版本工作正常,旧的分区(原来的活动分区)将被标记为可用于未来的更新。这意味着它可以在下一次更新周期中接收更新。

  6. 清理:如果经过一段时间确认新系统稳定,旧分区的数据可能会被清理,为未来的更新腾出空间。

值得注意的是,尽管A/B分区系统提供了很多优点,但并非所有制造商都立即采用了这一机制。一些厂商可能由于硬件限制或者其他考虑而选择不启用A/B分区。然而,随着Google对Android 13的要求,更多设备开始强制支持基于虚拟A/B分区的无缝更新体验,从而进一步推广了这种更新机制。

验证

在Android设备中,当新的系统映像被安装到非活动的A/B分区(例如slot B)后,系统会进行一系列验证步骤以确保新分区可以正常工作。以下是验证过程的主要步骤:

  1. 完整性检查:在安装过程中,OTA(Over-The-Air)更新包会被解压并写入到非活动的分区。在这个阶段,通常会对每个文件进行哈希校验,以确保文件未损坏且与服务器端提供的哈希值匹配。

  2. dm-verity 验证:Android使用了一种名为dm-verity的技术来确保系统的完整性和真实性。这是一种内核级别的特性,它通过在启动时验证每个数据块的哈希值来保证分区没有被篡改。如果发现任何不匹配的数据块,系统将拒绝加载该分区。

  3. Slot Marking:在尝试启动新分区之前,系统会将目标槽位标记为“正在尝试”(unbootabletrying)。这意味着如果启动失败,系统可以安全地回退到之前的分区(即另一个槽位),因为当前尝试启动的分区尚未被标记为成功。

  4. Bootloader Verification:引导加载程序(bootloader)会在尝试启动新分区前执行最后一次检查,确保所有必要的条件都满足,包括但不限于正确的签名和dm-verity树的有效性。

  5. Post-boot Verification:一旦新分区成功启动,并且设备进入了操作系统,系统可能会进一步执行一些自检操作,以确认一切运行正常。如果用户正常使用一段时间而没有出现问题,系统会将新分区标记为“成功”(successful),这意味着它可以作为未来的默认启动槽位。

  6. Revert Mechanism:如果新分区未能成功启动,Android的A/B更新机制设计了一个回退策略,允许设备自动切换回旧分区(通常是slot A),从而避免了因更新失败导致的设备无法使用的风险。

这些步骤共同作用,确保只有经过验证的新系统映像才能真正成为设备的活跃系统,同时提供了一种机制来恢复到已知良好的状态以防万一。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容