Android 10 est compatible avec 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 Over The Air (OTA).
Cette page explique comment redimensionner des 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 ou version antérieure.
Arrière-plan
Une partition super
est présente sur l'appareil. Cette partition n'est pas suffixée par un emplacement. L'appareil 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, correspondant aux emplacements A/B des 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, les métadonnées S contiennent 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 mises à jour. Pour en savoir plus, consultez la page 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 Bar
- Partition
- Groupe
foo_b
(restant d'une mise à niveau précédente) - Groupe
bar_b
(restant d'une mise à niveau précédente)
- Groupe
- Métadonnées 1
- Groupe
foo_a
(reste de la mise à niveau précédente) - Groupe
bar_a
(restant d'une 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 Bar
- 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/super
lpdump --slot 1 /dev/block/bootdevice/by-name/super
Mettre à jour le flux
- Initialisez les métadonnées de partition
super
.- Chargez les extensions des partitions dynamiques sources à partir de Metadata S. Soit M les métadonnées chargées.
-
Supprimez les groupes et les partitions cibles (par exemple,
foo_t
,bar_t
) de M afin que M ne contienne que les partitions et les groupes avec le suffixe_s
. -
Ajoutez des groupes et des partitions cibles en fonction du champ
dynamic_partition_metadata
dans le fichier manifeste de mise à jour.
La taille de chaque partition se trouve dansnew_partition_info
. - Écrire M dans Métadonnées T.
- Mappez les partitions ajoutées sur le mappeur d'appareil en tant qu'entrées accessibles en écriture.
- Appliquez la mise à jour sur les appareils de stockage en mode bloc.
- Si nécessaire, mappez les partitions sources sur le mappeur d'appareils en lecture seule. Cela est nécessaire pour le téléchargement parallèle, car les partitions sources ne sont pas mappées avant la mise à jour.
- Appliquez une mise à jour complète ou delta à tous les appareils de blocage à l'emplacement cible.
- Installez les partitions pour exécuter le script post-installation, puis désinstallez-les.
- Désallouez 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 un appareil A/B qui prend en charge les partitions dynamiques, vous devez ajouter des groupes et des partitions au fichier manifeste de mise à jour. L'extrait ci-dessous présente des informations supplémentaires sur le fichier manifeste de mise à jour pour prendre en charge les partitions dynamiques. Pour en savoir plus 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; }