Android 10 unterstützt dynamische Partitionen, ein Partitionssystem im Userspace, mit dem Partitionen bei Over-the-air-Updates (OTA) erstellt, neu formatiert und gelöscht werden können.
Auf dieser Seite wird beschrieben, wie Sie die Größe dynamischer Partitionen während eines Updates für A/B-Geräte mit Unterstützung für dynamische Partitionen auf Geräten mit Android 9 und niedriger anpassen.
Hintergrund
Auf dem Gerät befindet sich eine super
-Partition. Diese Partition hat kein Slotsuffix. Das Blockgerät muss zusammen mit dem Eintrag blk_device
für /misc
in fstab
vorhanden sein. Beispiel: In der fstab
-Datei ist Folgendes aufgeführt:
/dev/block/bootdevice/by-name/misc /misc # Other fields
In diesem Fall muss das blockorientierte Gerät für super
in /dev/block/bootdevice/by-name/super
vorhanden sein, die Partition super
muss jedoch nicht in der Datei fstab
aufgeführt sein.
In der Partition super
gibt es zwei Metadatenslots, nummeriert mit 0 und 1, die den A/B-Slots für Partitionen entsprechen. Auf dieser Seite werden die Metadatenslots als „Metadaten S“ (Quelle) und „Metadaten T“ (Ziel) bezeichnet. Partitionen werden ebenfalls als system_s
, vendor_t
usw. bezeichnet.
Vor dem Upgrade enthält Metadata S die Informationen zu den verwendeten dynamischen Partitionen (in der Regel system_s
, vendor_s
, product_s
usw.). Das System liest die Ausmaße dieser Partitionen während der Aktualisierung, damit sie nicht gelöscht werden können.
Partitionen gehören zu Aktualisierungsgruppen. Weitere Informationen finden Sie unter Dynamische Partitionen implementieren.
Hier ein Beispiel für Metadaten auf einem Gerät:
- Metadaten 0
- Gruppe
foo_a
- Partition
system_a
- Partition
product_services_a
- Andere Partitionen, die von Foo aktualisiert wurden
- Partition
- Gruppe „bar_a“
- Partition
vendor_a
- Partition
product_a
- Andere Partitionen aktualisiert durch Bar
- Partition
- Gruppe
foo_b
(überbleibsel aus vorherigem Upgrade) - Gruppe
bar_b
(überbleibsel aus vorherigem Upgrade)
- Gruppe
- Metadaten 1
- Gruppe
foo_a
(überbleibsel aus vorherigem Upgrade) - Gruppe
bar_a
(übriges Upgrade aus dem vorherigen Upgrade) - Gruppe
foo_b
- Partition
system_b
- Partition
product_services_b
- Andere Partitionen, die von Foo aktualisiert wurden
- Partition
- Gruppe
bar_b
- Partition
vendor_b
- Partition
product_b
- Andere Partitionen, die von Bar aktualisiert wurden
- Partition
- Gruppe
Mit dem lpdump
-Tool (Quellcode unter system/extras/partition_tools
) können Sie die Metadaten auf Ihr Gerät übertragen. Beispiel:
lpdump --slot 0 /dev/block/bootdevice/by-name/super
lpdump --slot 1 /dev/block/bootdevice/by-name/super
Ablauf aktualisieren
- Initialisieren Sie die
super
-Partitionsmetadaten.- Laden Sie die Extents für die dynamischen Quellpartitionen aus den Metadaten S. M sind die geladenen Metadaten.
-
Entfernen Sie Zielgruppen und Partitionen (z. B.
foo_t
,bar_t
) aus M, sodass M nur Partitionen und Gruppen mit dem Suffix_s
enthält. -
Fügen Sie Zielgruppen und Partitionen gemäß dem Feld
dynamic_partition_metadata
im Updatemanifest hinzu.
Die Größe der einzelnen Partitionen finden Sie unternew_partition_info
. - Schreibe M in das Metadaten-Feld T.
- Ordnen Sie die hinzugefügten Partitionen im Geräte-Mapper als beschreibbar zu.
- Wenden Sie das Update auf die Blockgeräte an.
- Weisen Sie die Quellpartitionen bei Bedarf dem Geräte-Mapper als schreibgeschützt zu. Dies ist für das Sideloading erforderlich, da die Quellpartitionen vor dem Update nicht zugeordnet werden.
- Vollständiges oder Delta-Update auf alle Blockgeräte am Ziel-Steckplatz anwenden
- Sie müssen die Partitionen bereitstellen, um das Skript nach der Installation auszuführen, und sie dann wieder trennen.
- Entfernen Sie die Zuordnung der Zielpartitionen.
Vor und nach der Aktualisierung sollten die folgenden Systemattribute die entsprechenden Werte haben:
ro.boot.dynamic_partitions=true ro.boot.dynamic_partitions_retrofit=true
Dem Update-Manifest Gruppen und Partitionen hinzufügen
Wenn Sie ein Over-the-air-Update auf einem A/B-Gerät mit dynamischen Partitionen oder einem A/B-Gerät ausführen, das die Unterstützung für dynamische Partitionen hinzufügt, müssen Sie dem Update-Manifest Gruppen und Partitionen hinzufügen. Das folgende Snippet enthält weitere Informationen zum Update-Manifest zur Unterstützung dynamischer Partitionen. Ausführliche Informationen zu den einzelnen Feldern finden Sie unter 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; }