当前位置: 华文世界 > 手机

Android搞机进阶知识——A/B分区

2023-12-18手机

声明:由于作者水平有限,内容并不会很深,甚至可能有错误,但对刷机来说这些理论基础是够用的。

不知道大家有没有注意到,在较老的机型(多为2019年之前的机型)进行系统更新时,要经过漫长的重启,而较新的机型则不需要。

这个跟A/B 系统更新(也称为无缝更新)有关。上回说到, 在非A/B分区的机型升级系统时,设备会先重新启动进入recovery模式,在recovery分区中存储的独立的Linux系统来完成系统更新(https://www.toutiao.com/item/7313214484439745036/ )。而A/B系统更新是直接在系统内完成的,重启只是从旧的系统切换到了新系统。

那么,这种无缝更新是如何完成的呢?很简单,做两套系统分区,后缀分别是_a和_b。(如下图所示)

A/B分区

这样做的好处除了上面所说的可以「无感知」更新以外,如果系统更新发生错误,可以回退到之前的系统。

不过,目前的新机使用的多是虚拟A/B分区(Virtual A/B,简称V AB)。

(在出厂搭载 Android 11 及更高版本的设备上,谷歌强制要求厂商使用虚拟 A/B 分区。 )

虚拟A/B分区就是将system、vendor、product(也支持system_ext和o dm分区)融合成super分区,super分区会在内部处理 A/B 槽位,因此不需要单独的 super_a和 super_b分区。 这样的好处是可以大幅节省存储空间。

对刷机的影响:

1.部分机型没有独立的recovery分区,recovery需要刷到boot里面(不一定是直接刷,请参考第三方rec作者的说明)。

2.boot有A和B,可以在系统更新后重启之前进行操作来保留root。

3.bootloader模式无法理解动态分区,因此无法对其进行刷写(但可以直接刷写super分区)。如果需要单独刷写system、vendor、product、system_ext和o dm等分区(包括colorOS的各种my_xxxxx分区),需要在fastbootd模式下进行。

最后,感谢你读到这里,搞机相关内容是我最初创作时的大方向,但无奈流量不高,所以鸽了好久,如果你对这方面话题感兴趣,请在相关文章的评论区留言。