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
- Partizione
- Raggruppa bar_a
- Partizione
vendor_a
- Partizione
product_a
- Altre partizioni aggiornate da Bar
- Partizione
- Gruppo
foo_b
(rimanente dell'upgrade precedente) - Gruppo
bar_b
(rimanente dell'upgrade precedente)
- Gruppo
- 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
- Partizione
- Gruppo
bar_b
- Partizione
vendor_b
- Partizione
product_b
- Altre partizioni aggiornate da Bar
- Partizione
- Gruppo
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
- Inizializza i metadati della partizione
super
.- Carica le estensioni per le partizioni dinamiche di origine da Metadata S. Sia M il set di metadati caricato.
-
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
. -
Aggiungi gruppi e partizioni di destinazione in base al
campo
dynamic_partition_metadata
nel manifest dell'aggiornamento.
Le dimensioni di ogni partizione sono riportate innew_partition_info
. - Scrivi M in Metadata T.
- Mappa le partizioni aggiunte sul mapping dei dispositivi come scrivibili.
- Applica l'aggiornamento ai dispositivi di blocco.
- 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.
- Applica un aggiornamento completo o delta a tutti i dispositivi di blocco nello slot di destinazione.
- Monta le partizioni per eseguire lo script di post-installazione, quindi smontale.
- 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; }