OTA per dispositivi A/B con partizioni dinamiche

Android 10 supporta le partizioni dinamiche, un sistema di partizione dello spazio utente che può creare, ridimensionare ed eliminare le partizioni durante gli aggiornamenti over-the-air (OTA).

Questa pagina descrive come ridimensionare le partizioni dinamiche durante un aggiornamento per i dispositivi A/B lanciati con il supporto delle partizioni dinamiche, per i dispositivi con Android 9 e versioni precedenti.

Background

Sul dispositivo è presente una partizione super. Questa partizione non ha suffisso dello slot. Il dispositivo di blocco deve esistere insieme alla voce blk_device per /misc in fstab. Ad esempio, se il file fstab elenca:

/dev/block/bootdevice/by-name/misc    /misc    # Other fields

Il dispositivo di blocco per super deve esistere in /dev/block/bootdevice/by-name/super, ma la partition super non deve essere elencata nel file fstab.

Nella partizione super sono presenti due slot per i metadati, numerati 0 e 1, corrispondenti agli slot A/B per le partizioni. In questa pagina, gli slot dei metadati sono chiamati Metadata S (sorgente) e Metadata T (destinazione). Analogamente, le partizioni sono indicate come system_s, vendor_t e così via.

Prima dell'upgrade, Metadata S contiene le informazioni relative alle partizioni dinamiche in uso (in genere system_s, vendor_s, product_s e così via). Il sistema legge le estensioni di queste partizioni durante l'aggiornamento, pertanto non possono essere eliminate.

Le partizioni appartengono a gruppi di aggiornamento. Per informazioni dettagliate, consulta Implementazione delle partizioni dinamiche.

Di seguito è riportato un esempio di metadati su un dispositivo.

  • Metadati 0
    • Gruppo foo_a
      • Partizione system_a
      • Partizione product_services_a
      • Altre partizioni aggiornate da Foo
    • Raggruppa bar_a
      • Partizione vendor_a
      • Partizione product_a
      • Altre partizioni aggiornate da Bar
    • Gruppo foo_b (rimanente dell'upgrade precedente)
    • Gruppo bar_b (rimanente dell'upgrade precedente)
  • Metadati 1
    • Gruppo foo_a (rimanente dell'upgrade precedente)
    • Gruppo bar_a (rimanente dell'upgrade precedente)
    • Gruppo foo_b
      • Partizione system_b
      • Partizione product_services_b
      • Altre partizioni aggiornate da Foo
    • Gruppo bar_b
      • Partizione vendor_b
      • Partizione product_b
      • Altre partizioni aggiornate da Bar

Puoi utilizzare lo strumento lpdump (codice sorgente in system/extras/partition_tools) per eseguire il dump dei metadati sul tuo dispositivo. Ad esempio:

lpdump --slot 0 /dev/block/bootdevice/by-name/super
lpdump --slot 1 /dev/block/bootdevice/by-name/super

Aggiorna flusso

  1. Inizializza i metadati della partizione super.
    1. Carica le estensioni per le partizioni dinamiche di origine da Metadata S. Sia M il set di metadati caricato.
    2. Rimuovi i gruppi e le partizioni di destinazione (ad es. foo_t, bar_t) da M in modo che M contenga solo partizioni e gruppi con il suffisso _s.
    3. Aggiungi gruppi e partizioni di destinazione in base al campo dynamic_partition_metadata nel manifest dell'aggiornamento.
      Le dimensioni di ogni partizione sono riportate in new_partition_info.
    4. Scrivi M in Metadata T.
    5. Mappa le partizioni aggiunte sul mapping dei dispositivi come scrivibili.
  2. Applica l'aggiornamento ai dispositivi di blocco.
    1. Se necessario, mappa le partizioni di origine nel mappatore dei dispositivi come di sola lettura. Questo è necessario per il sideload perché le partizioni di origine non sono mappate prima dell'aggiornamento.
    2. Applica un aggiornamento completo o delta a tutti i dispositivi di blocco nello slot di destinazione.
    3. Monta le partizioni per eseguire lo script di post-installazione, quindi smontale.
  3. Scollega le partizioni di destinazione.

Prima e dopo l'aggiornamento, le seguenti proprietà di sistema devono avere i rispettivi valori:

ro.boot.dynamic_partitions=true
ro.boot.dynamic_partitions_retrofit=true

Aggiungi gruppi e partizioni al manifest di aggiornamento

Quando esegui un aggiornamento OTA su un dispositivo A/B con partizioni dinamiche o su un dispositivo A/B che aggiunge il supporto per le partizioni dinamiche, devi aggiungere gruppi e partizioni al manifest dell'aggiornamento. Lo snippet riportato di seguito mostra ulteriori informazioni sul manifest dell'aggiornamento per supportare le partizioni dinamiche. Consulta update_metadata.proto per la documentazione dettagliata su ciascun campo.

message DeltaArchiveManifest {
    optional DynamicPartitionMetadata dynamic_partition_metadata;
}

message DynamicPartitionMetadata {
    repeated DynamicPartitionGroup groups;
}

message DynamicPartitionGroup {
    required string name;
    optional uint64 size; // maximum size of group
    repeated string partition_names;
}