Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

虛擬A / B概述

Android具有兩種更新機制:A / B(無縫)更新和非A / B更新。為了降低代碼複雜性並增強可更新性,Android 11統一了這兩種機制。新的更新機制虛擬A / B通過為所有設備帶來無縫更新,同時最大程度地降低了存儲成本,結合了兩個前輩的優勢。

  • 虛擬A / B更新與A / B更新一樣是無縫的。虛擬A / B更新可最大程度地減少設備離線和不可用的時間。
  • 虛擬A / B更新可以回滾。如果新操作系統無法啟動,則設備會自動回滾到以前的版本。
  • 虛擬A / B更新通過僅複製引導加載程序使用的分區來使用最少的額外空間。其他可更新分區已快照。

背景

本節介紹一些支持虛擬A / B的術語和技術。

設備映射器

設備映射器是Android中經常使用的Linux虛擬塊層。對於動態分區/system類的分區是分層設備的堆棧:

  • 堆棧的底部是物理超級分區(例如, /dev/block/by-name/super )。
  • 中間是dm-linear設備,用於指定超級分區中的哪些塊形成給定分區。這表現為/dev/block/mapper/system_[a|b]的A / B設備上,或/dev/block/mapper/system的非A / B設備上。
  • 最後,為驗證的分區創建dm-verity設備。該設備驗證dm-linear設備上的塊是否正確簽名。它顯示為/dev/block/mapper/system-verity並且是/system掛載點的來源。

這是/system掛載點下的堆棧圖。

系統下方的堆疊

圖1. / system掛載點下的堆棧

dm快照概述

虛擬A / B依賴於dm-snapshot ,這是一個用於映射存儲設備狀態的設備映射器模塊。使用dm-snaphot ,有四個設備正在播放:

  • 基本設備是被快照的設備。在此頁面上,基本設備始終是動態分區,例如係統或供應商。
  • 寫入時復制(COW)設備用於將更改記錄到基本設備上。它可以是任何大小,但必須足夠大以容納對基本設備的所有更改。
  • 快照設備是使用snapshot目標創建的。寫入快照設備將寫入COW設備。從快照設備讀取是從基本設備​​讀取還是從COW設備讀取,具體取決於快照是否更改了所訪問的數據。
  • 使用snapshot-origin目標創建原始設備。讀取直接從基本設備​​讀取的原始設備。寫入原始設備直接寫入基本設備,但是通過寫入COW設備備份原始數據。

dm快照的設備映射

圖2. dm快照的設備映射