Android 10 supporta le partizioni dinamiche , un sistema di partizionamento dello spazio utente in grado di creare, ridimensionare e distruggere 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 avviati con il supporto delle partizioni dinamiche, per i dispositivi con Android 9 e versioni precedenti .
Sfondo
C'è una super
partizione sul dispositivo. Questa partizione non ha il suffisso slot. Il dispositivo a blocchi 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
Quindi il dispositivo a blocchi per super
deve esistere in /dev/block/bootdevice/by-name/super
, ma non è necessario che la partizione super
sia elencata nel file fstab
.
Nella super
partizione 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 chiamati Metadata S (sorgente) e Metadata T (destinazione). Allo stesso modo, le partizioni vengono chiamate system_s
, vendor_t
e così via.
Prima dell'aggiornamento, 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 i dettagli vedere Implementazione delle partizioni dinamiche .
Un esempio di metadati su un dispositivo è il seguente.
- Metadati 0
- Gruppo
foo_a
-
system_a
di partizione_a - Partizione
product_services_a
- Altre partizioni aggiornate da Foo
-
- Gruppo bar_a
-
vendor_a
della partizione_a -
product_a
partizione_a - Altre partizioni aggiornate da Bar
-
- Gruppo
foo_b
(rimanente dell'aggiornamento precedente) - Gruppo
bar_b
(rimanente dall'aggiornamento precedente)
- Gruppo
- Metadati 1
- Gruppo
foo_a
(rimanente dell'aggiornamento precedente) - Gruppo
bar_a
(rimanente dall'aggiornamento precedente) - Gruppo
foo_b
-
system_b
di partizione_b - Partizione
product_services_b
- Altre partizioni aggiornate da Foo
-
-
bar_b
del gruppo_b-
vendor_b
della partizione_b -
product_b
partizione_b - Altre partizioni aggiornate da Bar
-
- Gruppo
Puoi utilizzare lo strumento lpdump
(codice sorgente in system/extras/partition_tools
) per scaricare i metadati sul tuo dispositivo. Per esempio:
lpdump --slot 0 /dev/block/bootdevice/by-name/super
lpdump --slot 1 /dev/block/bootdevice/by-name/super
Flusso di aggiornamento
- Inizializza i metadati della
super
partizione.- Caricare le estensioni per le partizioni dinamiche di origine da Metadata S. Sia M i metadati caricati.
- Rimuovere i gruppi e le partizioni di destinazione (ad esempio,
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 dell'aggiornamento.
La dimensione di ciascuna partizione può essere trovata innew_partition_info
. - Scrivi M nei metadati T.
- Mappare le partizioni aggiunte sul mappatore del dispositivo come scrivibili.
- Applicare l'aggiornamento sui dispositivi a blocchi.
- Se necessario, mappare le partizioni di origine sul mappatore del dispositivo come di sola lettura. Ciò è 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.
- Montare le partizioni per eseguire lo script post-installazione, quindi smontare le partizioni.
- Annulla la mappatura delle partizioni di destinazione.
Prima e dopo l'aggiornamento, le seguenti proprietà di sistema dovrebbero avere i rispettivi valori:
ro.boot.dynamic_partitions=true ro.boot.dynamic_partitions_retrofit=true
Aggiungi gruppi e partizioni al manifesto dell'aggiornamento
Quando si esegue 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, è necessario aggiungere gruppi e partizioni al manifesto dell'aggiornamento. Lo snippet seguente mostra informazioni aggiuntive sul manifesto dell'aggiornamento per supportare le partizioni dinamiche. Vedi 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; }