Android中的A/B分區(qū)系統(tǒng)是在Android 7.0(Nougat)中首次引入的,目的是為了實(shí)現(xiàn)無縫更新。A/B分區(qū)意味著設(shè)備上有兩套可以工作的系統(tǒng)分區(qū),通常稱為slot A和slot B。一個(gè)分區(qū)用于當(dāng)前正在運(yùn)行的系統(tǒng)(活動(dòng)分區(qū)),而另一個(gè)分區(qū)則可用于后臺(tái)更新而不干擾用戶的使用。
升級(jí)步驟
以下是使用A/B分區(qū)進(jìn)行系統(tǒng)升級(jí)的大致步驟:
下載更新包:當(dāng)有新的系統(tǒng)更新時(shí),設(shè)備會(huì)自動(dòng)在后臺(tái)下載更新包。
安裝到非活動(dòng)分區(qū):更新包會(huì)被安裝到當(dāng)前非活動(dòng)的分區(qū)(例如,如果slot A是活動(dòng)分區(qū),則更新會(huì)被安裝到slot B)。這個(gè)過程不會(huì)影響用戶當(dāng)前的操作,因?yàn)樗前l(fā)生在非活動(dòng)分區(qū)上。
驗(yàn)證更新:一旦更新完成,系統(tǒng)會(huì)對(duì)新安裝的分區(qū)進(jìn)行驗(yàn)證以確保沒有錯(cuò)誤。
重啟到新系統(tǒng):如果一切正常,下一次設(shè)備重啟時(shí),bootloader將切換到更新過的分區(qū)(在這個(gè)例子中是從slot A切換到slot B)。這通常被稱為無縫更新,因?yàn)樗钚』擞脩舻却到y(tǒng)更新的時(shí)間,并減少了更新失敗導(dǎo)致設(shè)備不可用的風(fēng)險(xiǎn)。
標(biāo)記舊分區(qū)為可更新:如果新的系統(tǒng)版本工作正常,舊的分區(qū)(原來的活動(dòng)分區(qū))將被標(biāo)記為可用于未來的更新。這意味著它可以在下一次更新周期中接收更新。
清理:如果經(jīng)過一段時(shí)間確認(rèn)新系統(tǒng)穩(wěn)定,舊分區(qū)的數(shù)據(jù)可能會(huì)被清理,為未來的更新騰出空間。
值得注意的是,盡管A/B分區(qū)系統(tǒng)提供了很多優(yōu)點(diǎn),但并非所有制造商都立即采用了這一機(jī)制。一些廠商可能由于硬件限制或者其他考慮而選擇不啟用A/B分區(qū)。然而,隨著Google對(duì)Android 13的要求,更多設(shè)備開始強(qiáng)制支持基于虛擬A/B分區(qū)的無縫更新體驗(yàn),從而進(jìn)一步推廣了這種更新機(jī)制。
驗(yàn)證
在Android設(shè)備中,當(dāng)新的系統(tǒng)映像被安裝到非活動(dòng)的A/B分區(qū)(例如slot B)后,系統(tǒng)會(huì)進(jìn)行一系列驗(yàn)證步驟以確保新分區(qū)可以正常工作。以下是驗(yàn)證過程的主要步驟:
完整性檢查:在安裝過程中,OTA(Over-The-Air)更新包會(huì)被解壓并寫入到非活動(dòng)的分區(qū)。在這個(gè)階段,通常會(huì)對(duì)每個(gè)文件進(jìn)行哈希校驗(yàn),以確保文件未損壞且與服務(wù)器端提供的哈希值匹配。
dm-verity 驗(yàn)證:Android使用了一種名為dm-verity的技術(shù)來確保系統(tǒng)的完整性和真實(shí)性。這是一種內(nèi)核級(jí)別的特性,它通過在啟動(dòng)時(shí)驗(yàn)證每個(gè)數(shù)據(jù)塊的哈希值來保證分區(qū)沒有被篡改。如果發(fā)現(xiàn)任何不匹配的數(shù)據(jù)塊,系統(tǒng)將拒絕加載該分區(qū)。
Slot Marking:在嘗試啟動(dòng)新分區(qū)之前,系統(tǒng)會(huì)將目標(biāo)槽位標(biāo)記為“正在嘗試”(
unbootable或trying)。這意味著如果啟動(dòng)失敗,系統(tǒng)可以安全地回退到之前的分區(qū)(即另一個(gè)槽位),因?yàn)楫?dāng)前嘗試啟動(dòng)的分區(qū)尚未被標(biāo)記為成功。Bootloader Verification:引導(dǎo)加載程序(bootloader)會(huì)在嘗試啟動(dòng)新分區(qū)前執(zhí)行最后一次檢查,確保所有必要的條件都滿足,包括但不限于正確的簽名和dm-verity樹的有效性。
Post-boot Verification:一旦新分區(qū)成功啟動(dòng),并且設(shè)備進(jìn)入了操作系統(tǒng),系統(tǒng)可能會(huì)進(jìn)一步執(zhí)行一些自檢操作,以確認(rèn)一切運(yùn)行正常。如果用戶正常使用一段時(shí)間而沒有出現(xiàn)問題,系統(tǒng)會(huì)將新分區(qū)標(biāo)記為“成功”(
successful),這意味著它可以作為未來的默認(rèn)啟動(dòng)槽位。Revert Mechanism:如果新分區(qū)未能成功啟動(dòng),Android的A/B更新機(jī)制設(shè)計(jì)了一個(gè)回退策略,允許設(shè)備自動(dòng)切換回舊分區(qū)(通常是slot A),從而避免了因更新失敗導(dǎo)致的設(shè)備無法使用的風(fēng)險(xiǎn)。
這些步驟共同作用,確保只有經(jīng)過驗(yàn)證的新系統(tǒng)映像才能真正成為設(shè)備的活躍系統(tǒng),同時(shí)提供了一種機(jī)制來恢復(fù)到已知良好的狀態(tài)以防萬一。