Android 10 prend en charge les partitions dynamiques , un système de partitionnement de l'espace utilisateur qui peut créer, redimensionner et détruire des partitions lors des mises à jour en direct (OTA).
Cette page décrit comment redimensionner les partitions dynamiques lors d'une mise à jour pour les appareils A/B lancés avec la prise en charge des partitions dynamiques, pour les appareils exécutant Android 9 et versions antérieures .
Arrière-plan
Il y a une super
partition sur l'appareil. Cette partition n'a pas de suffixe d'emplacement. Le périphérique bloc doit exister avec l'entrée blk_device
pour /misc
dans fstab
. Par exemple, si le fichier fstab
répertorie :
/dev/block/bootdevice/by-name/misc /misc # Other fields
Ensuite, le périphérique de bloc pour super
doit exister dans /dev/block/bootdevice/by-name/super
, mais la super
partition n'a pas besoin d'être répertoriée dans le fichier fstab
.
Dans la super
partition, il y a deux emplacements de métadonnées , numérotés 0 et 1, correspondant aux emplacements A/B des partitions. Dans cette page, les emplacements de métadonnées sont appelés Metadata S (source) et Metadata T (cible). De même, les partitions sont appelées system_s
, vendor_t
, etc.
Avant la mise à niveau, Metadata S contient les informations sur les partitions dynamiques utilisées (généralement, system_s
, vendor_s
, product_s
, etc.). Le système lit les extensions de ces partitions lors de la mise à jour, elles ne peuvent donc pas être supprimées.
Les partitions appartiennent à des groupes de mise à jour . Voir Implémentation de partitions dynamiques pour plus de détails.
Un exemple de métadonnées sur un appareil est le suivant.
- Métadonnées 0
- Groupe
foo_a
-
system_a
de partition_a - Partitionner
product_services_a
- Autres partitions mises à jour par Foo
-
- Barre de groupe_a
-
vendor_a
de partition_a -
product_a
de partition_a - Autres partitions mises à jour par Bar
-
- Groupe
foo_b
(reste de la mise à niveau précédente) - Groupe
bar_b
(reste de la mise à niveau précédente)
- Groupe
- Métadonnées 1
- Groupe
foo_a
(reste de la mise à jour précédente) - Groupe
bar_a
(reste de la mise à niveau précédente) - Groupe
foo_b
-
system_b
de partition_b - Partitionner
product_services_b
- Autres partitions mises à jour par Foo
-
-
bar_b
de groupe_b-
vendor_b
de partition_b -
product_b
de partition_b - Autres partitions mises à jour par Bar
-
- Groupe
Vous pouvez utiliser l'outil lpdump
(code source sous system/extras/partition_tools
) pour vider les métadonnées sur votre appareil. Par exemple:
lpdump --slot 0 /dev/block/bootdevice/by-name/super
lpdump --slot 1 /dev/block/bootdevice/by-name/super
Flux de mise à jour
- Initialisez les métadonnées de la
super
partition.- Chargez les extensions des partitions dynamiques sources à partir des métadonnées S. Soit M les métadonnées chargées.
- Supprimez les groupes cibles et les partitions (par exemple,
foo_t
,bar_t
) de M afin que M contienne uniquement les partitions et les groupes avec le suffixe_s
. - Ajoutez des groupes cibles et des partitions en fonction du champ
dynamic_partition_metadata
dans le manifeste de mise à jour.
La taille de chaque partition peut être trouvée dansnew_partition_info
. - Écrivez M dans les métadonnées T.
- Mappez les partitions ajoutées sur le mappeur de périphériques comme étant accessibles en écriture.
- Appliquez la mise à jour sur les appareils bloqués.
- Si nécessaire, mappez les partitions sources sur le mappeur de périphériques en lecture seule. Ceci est nécessaire pour le chargement latéral, car les partitions sources ne sont pas mappées avant la mise à jour.
- Appliquez une mise à jour complète ou delta à tous les périphériques bloqués sur l'emplacement cible.
- Montez les partitions pour exécuter le script de post-installation, puis démontez les partitions.
- Supprimez le mappage des partitions cibles.
Avant et après la mise à jour, les propriétés système suivantes doivent avoir les valeurs respectives :
ro.boot.dynamic_partitions=true ro.boot.dynamic_partitions_retrofit=true
Ajouter des groupes et des partitions au manifeste de mise à jour
Lorsque vous effectuez une mise à jour OTA sur un périphérique A/B avec des partitions dynamiques ou sur un périphérique A/B qui ajoute la prise en charge des partitions dynamiques, vous devez ajouter des groupes et des partitions au manifeste de mise à jour. L'extrait ci-dessous montre des informations supplémentaires sur le manifeste de mise à jour pour prendre en charge les partitions dynamiques. Voir update_metadata.proto pour une documentation détaillée sur chaque champ.
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; }