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
- Partizione
- Group bar_a
- Partizione
vendor_a
- Partizione
product_a
- Altre partizioni aggiornate da Bar
- Partizione
- Gruppo
foo_b
(rimanenza dell'upgrade precedente) - Gruppo
bar_b
(rimanenza dell'upgrade precedente)
- Gruppo
- 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
- 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 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
- Inizializza i metadati della partizione
super
.- Carica le estensioni per le partizioni dinamiche di origine da Metadata S. Sia M i metadati caricati.
-
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
. -
Aggiungi gruppi di destinazione e partizioni in base al campo
dynamic_partition_metadata
nel manifest di aggiornamento.
Le dimensioni di ogni partizione sono disponibili innew_partition_info
. - Scrivi M in Metadati T.
- Mappa le partizioni aggiunte sul mapper del dispositivo come scrivibili.
- Applica l'aggiornamento sui dispositivi bloccati.
- 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.
- Applica un aggiornamento completo o delta a tutti i dispositivi a blocchi nello slot di destinazione.
- Monta le partizioni per eseguire lo script post-installazione, quindi smontale.
- 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; }