A/B System 概述
Android从7.0开始,引入了新的OTA升级方式 A/B System Updates
A/B系统是指设备上有A和B两套可以工作的系统(用户数据只有一份,为两套系统共用),我们可以理解为一套系统分区,另外一套为备份分区.其系统版本可能一样,也可能不一样;通过升级,可以将旧版本也更新为新版本.当然,设备出厂时这两套系统肯定是一样的.
Android 7.0上传统OTA方式和新的A/B系统方式都存在,编译时只能选择其中的一种OTA方式.由于A/B系统在分区上与传统OTA的分区设计不一样,二者无法兼容,所以7.0以前的系统无法通过OTA方式升级为A/B系统.
7.0以前传统的OTA方式:
设备上有一个Android主系统和一个Recovery系统,Android主系统运行时检测是否需要升级,如果需要升级,
则将升级的数据包下载并存放到cache分区,重启系统后进入Recovery系统,并用cache分区下载好的数据更新Android主系统,
更新完成后重新启动进入Android主系统。如果更新失败,设备重启后就不能正常使用了,唯一的办法就是重新升级,直到成功为止。
而A/B系统主要由运行在Android后台的update_engine和两套分区‘slot A’和‘slot B’组成。
Android系统从其中一套分区启动,在后台运行update_engine监测升级信息并下载升级数据,
然后将数据更新到另外一套分区,写入数据完成后从更新的分区启动
与传统OTA方式相比,A/B系统的变化主要有:
1、系统的分区设置
传统方式只有一套分区
A/B系统有两套分区,称为slot A和slot B
2、跟bootloader沟通的方式
传统方式bootloader通过读取misc分区信息来决定是进入Android主系统还是Recovery系统
A/B系统的bootloader通过特定的分区信息来决定从slot A还是slot B启动
3、系统的编译过程
传统方式在编译时会生成boot.img和recovery.img分别用于Android主系统和Recovery系统的ramdisk
A/B系统只有boot.img,而不再生成单独的recovery.img
4、OTA更新包的生成方式
A/B系统生成OTA包的工具和命令跟传统方式一样,但是生成内容的格式不一样了
A/B 系统更新可带来以下好处:
- OTA 更新可以在系统运行期间进行,而不会打断用户。用户可以在 OTA 期间继续使用其设备。在更新期间,唯一的一次宕机发生在设备重新启动到更新后的磁盘分区时。
- 更新后,重新启动所用的时间不会超过常规重新启动所用的时间。
- 如果 OTA 无法应用(例如,因为刷机失败),用户将不会受到影响。用户将继续运行旧的操作系统,并且客户端可以重新尝试进行更新。
- 如果 OTA 更新已应用但无法启动,设备将重新启动回旧分区,并且仍然可以使用。客户端可以重新尝试进行更新。
- 任何错误(例如 I/O 错误)都只会影响未使用的分区组,并且用户可以进行重试。由于 I/O 负载被特意控制在较低水平,以免影响用户体验,因此发生此类错误的可能性也会降低。
更新包可以流式传输到 A/B 设备,因此在安装之前不需要先下载更新包。流式更新意味着用户没有必要在 /data 或 /cache 上留出足够的可用空间来存储更新包。 - 缓存分区不再用于存储 OTA 更新包,因此无需确保缓存分区的大小要足以应对日后的更新。
- dm-verity 可保证设备将使用未损坏的启动映像。如果设备因 OTA 错误或 dm-verity问题而无法启动,则可以重新启动到旧映像。(Android 验证启动不需要 A/B 更新。)
A/B 更新对 2016 Pixel 分区大小有什么影响?
[图片上传失败...(image-89986-1566889673273)]
OTA 系统分区
在非 A/B 系统Android设备上,闪存空间通常包含以下分区:
boot
boot分区中包含了Linux内核和最小的根文件系统(会被加载到RAM中去).它装载了系统和其它分区,并且boot分区还被用来启动system分区中的运行环境.
system
system分区中包含在 Android 开源项目 (AOSP)上提供源代码的系统应用和库.在正常操作期间,此分区被装载为只读分区;其内容仅在 OTA 更新期间更改.
vendor
vendor分区中包含在 Android 开源项目 (AOSP) 上未提供源代码的系统应用和库.在正常操作期间,此分区被装载为只读分区;其内容仅在 OTA 更新期间更改.
userdata
存储由用户安装的应用所保存的数据等.OTA 更新过程通常不会触及该分区.
cache
几个应用使用的临时保留区域(访问此分区需要使用特殊的应用权限),用于存储下载的 OTA 更新包。其他程序也可使用该空间,但是此类文件可能会随时消失。安装某些 OTA 更新包可能会导致此分区被完全擦除。缓存还包含 OTA 更新的更新日志。
recovery
包含第二个完整的 Linux 系统,其中包括一个内核和特殊的恢复二进制文件(该文件可读取一个软