Aggiornamento over-the-air (OTA) per i dispositivi A/B con partizioni dinamiche

Android 10 supporta le partizioni dinamiche, un sistema di partizionamento 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 che sono stati lanciati con il supporto delle partizioni dinamiche, per i dispositivi con Android 9 e versioni precedenti.

Sfondo

Sul dispositivo è presente una partizione super. Questa partizione non ha il 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 a blocchi per super deve esistere in /dev/block/bootdevice/by-name/super, ma la partizione super non deve essere elencata nel file fstab.

Nella partizione super sono presenti due slot di metadati, numerati 0 e 1, corrispondenti agli slot A/B per le partizioni. In questa pagina, gli slot dei metadati sono denominati Metadati S (origine) e Metadati T (destinazione). Allo stesso modo, le partizioni sono denominate system_s, vendor_t e così via.

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

Le partizioni appartengono ai 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
    • Group bar_a
      • Partizione vendor_a
      • Partizione product_a
      • Altre partizioni aggiornate da Bar
    • Gruppo foo_b (rimanenza dell'upgrade precedente)
    • Gruppo bar_b (rimanenza dell'upgrade precedente)
  • Metadati 1
    • Gruppo foo_a (rimanenza dell'upgrade precedente)
    • Gruppo bar_a (rimanenza 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 scaricare i 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 i metadati caricati.
    2. Rimuovi i gruppi target e le partizioni (ad es. foo_t, bar_t) da M in modo che M contenga solo partizioni e gruppi con il suffisso _s.
    3. Aggiungi gruppi di destinazione e partizioni in base al campo dynamic_partition_metadata nel manifest di aggiornamento.
      Le dimensioni di ogni partizione sono disponibili in new_partition_info.
    4. Scrivi M in Metadati T.
    5. Mappa le partizioni aggiunte sul mapper del dispositivo come scrivibili.
  2. Applica l'aggiornamento sui dispositivi bloccati.
    1. Se necessario, mappa le partizioni di origine sul mapper del dispositivo come di sola lettura. Questo è necessario per il sideload perché le partizioni di origine non vengono mappate prima dell'aggiornamento.
    2. Applica un aggiornamento completo o delta a tutti i dispositivi a blocchi nello slot di destinazione.
    3. Monta le partizioni per eseguire lo script post-installazione, quindi smontale.
  3. Annulla la mappatura delle 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

Aggiungere gruppi e partizioni al file 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 di seguito mostra ulteriori informazioni sul file manifest dell'aggiornamento per supportare le partizioni dinamiche. Per la documentazione dettagliata su ogni campo, consulta update_metadata.proto.

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;
}