Android 10 est compatible avec les partitions dynamiques, un système de partitionnement de l'espace utilisateur qui permet de créer, redimensionner et supprimer des partitions lors des mises à jour OTA (Over-The-Air).
Cette page explique 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
L'appareil comporte une partition super. Cette partition n'est pas suffixée par un emplacement. Le périphérique de bloc doit exister avec l'entrée blk_device pour /misc dans fstab. Par exemple, si le fichier fstab liste les éléments suivants :
/dev/block/bootdevice/by-name/misc /misc # Other fields
Le périphérique de bloc pour super doit alors exister dans /dev/block/bootdevice/by-name/super, mais la partition super n'a pas besoin d'être listée dans le fichier fstab.
Dans la partition super, il existe deux emplacements de métadonnées, numérotés 0 et 1, qui correspondent aux emplacements A/B pour les partitions. Sur cette page, les emplacements de métadonnées sont appelés "Métadonnées S (source)" et "Métadonnées 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 étendues de ces partitions lors de la mise à jour. Elles ne peuvent donc pas être supprimées.
Les partitions appartiennent à des groupes de mise à jour. Pour en savoir plus, consultez Implémenter des partitions dynamiques.
Voici un exemple de métadonnées sur un appareil :
- Métadonnées 0
- Groupe
foo_a- Partition
system_a - Partition
product_services_a - Autres partitions mises à jour par Foo
- Partition
- Groupe bar_a
- Partition
vendor_a - Partition
product_a - Autres partitions mises à jour par Bard
- Partition
- Groupe
foo_b(restant de la mise à niveau précédente) - Groupe
bar_b(restant de la mise à niveau précédente)
- Groupe
- Métadonnées 1
- Groupe
foo_a(restant de la mise à niveau précédente) - Groupe
bar_a(restant de la mise à niveau précédente) - Groupe
foo_b- Partition
system_b - Partition
product_services_b - Autres partitions mises à jour par Foo
- Partition
- Groupe
bar_b- Partition
vendor_b - Partition
product_b - Autres partitions mises à jour par Bard
- Partition
- Groupe
Vous pouvez utiliser l'outil lpdump (code source sous system/extras/partition_tools) pour vider les métadonnées sur votre appareil. Exemple :
lpdump --slot 0 /dev/block/bootdevice/by-name/superlpdump --slot 1 /dev/block/bootdevice/by-name/super
Mettre à jour le flux
- Initialisez les métadonnées de la partition
super.- Chargez les étendues 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 ne contienne que des partitions et des groupes avec le suffixe_s. -
Ajoutez des groupes cibles et des partitions en fonction du champ
dynamic_partition_metadatadans le fichier manifeste de mise à jour.
La taille de chaque partition est indiquée dansnew_partition_info. - Écrire M dans les métadonnées T.
- Mappez les partitions ajoutées sur le mappeur de périphériques en tant qu'écriture.
- Appliquez la mise à jour sur les périphériques de bloc.
- Si nécessaire, mappez les partitions sources sur le mappeur de périphériques en lecture seule. Cette étape est nécessaire pour le transfert latéral, car les partitions sources ne sont pas mappées avant la mise à jour.
- Applique une mise à jour complète ou différentielle à tous les périphériques de bloc dans l'emplacement cible.
- Montez les partitions pour exécuter le script post-installation, puis démontez-les.
- Dissociez les 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 fichier manifeste de mise à jour
Lorsque vous effectuez une mise à jour OTA sur un appareil A/B avec des partitions dynamiques ou sur un appareil A/B qui ajoute la prise en charge des partitions dynamiques, vous devez ajouter des groupes et des partitions au fichier manifeste de mise à jour. L'extrait ci-dessous fournit des informations supplémentaires sur le fichier manifeste de mise à jour pour prendre en charge les partitions dynamiques. Pour obtenir une documentation détaillée sur chaque champ, consultez 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;
}