Android 10 unterstützt dynamische Partitionen, ein Partitionierungssystem für den Nutzerbereich, mit dem Partitionen während OTA-Updates (Over-the-Air) erstellt, in der Größe angepasst 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 anpassen, die mit Unterstützung für dynamische Partitionen eingeführt wurden und auf denen Android 9 und niedriger ausgeführt wird.
Hintergrund
Auf dem Gerät ist eine super-Partition vorhanden. Diese Partition hat kein Slot-Suffix. Das Blockgerät muss zusammen mit dem blk_device-Eintrag für /misc in fstab vorhanden sein. Beispiel: In der Datei fstab sind folgende Einträge aufgeführt:
/dev/block/bootdevice/by-name/misc /misc # Other fields
Das Blockgerät für super muss dann 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 Metadaten-Slots mit den Nummern 0 und 1, die den A/B-Slots für Partitionen entsprechen. Auf dieser Seite werden die Metadaten-Slots als „Metadata S“ (Quelle) und „Metadata T“ (Ziel) bezeichnet. Entsprechend werden Partitionen als system_s, vendor_t usw. bezeichnet.
Vor dem Upgrade enthält „Metadata S“ die Informationen für die verwendeten dynamischen Partitionen (in der Regel system_s, vendor_s, product_s usw.). Das System liest die Bereiche für diese Partitionen während des Updates, daher können sie nicht gelöscht werden.
Partitionen gehören zu Aktualisierungsgruppen. Weitere Informationen finden Sie unter Dynamische Partitionen implementieren.
Hier ist 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 von Bar aktualisierte Partitionen
- Partition
- Gruppe
foo_b(Überbleibsel aus dem vorherigen Upgrade) - Gruppe
bar_b(Überbleibsel aus dem vorherigen Upgrade)
- Gruppe
- Metadaten 1
- Gruppe
foo_a(Überbleibsel aus dem vorherigen Upgrade) - Gruppe
bar_a(Überbleibsel 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 von Bar aktualisierte Partitionen
- Partition
- Gruppe
Mit dem lpdump-Tool (Quellcode unter system/extras/partition_tools) können Sie die Metadaten auf Ihrem Gerät sichern. Beispiel:
lpdump --slot 0 /dev/block/bootdevice/by-name/superlpdump --slot 1 /dev/block/bootdevice/by-name/super
Aktualisierungsablauf
- Partitionsmetadaten für
superinitialisieren:- Laden Sie die Bereiche für die dynamischen Quellpartitionen aus Metadata S. Sei M 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_senthält. -
Fügen Sie Zielgruppen und Partitionen gemäß dem Feld
dynamic_partition_metadataim Aktualisierungsmanifest hinzu.
Die Größe der einzelnen Partitionen finden Sie unternew_partition_info. - Schreibe M in Metadaten T.
- Die hinzugefügten Partitionen im Gerätezurordner als beschreibbar zuordnen.
- Wenden Sie das Update auf die Blockgeräte an.
- Ordnen Sie die Quellpartitionen bei Bedarf dem Device Mapper als schreibgeschützt zu. Das ist für das Sideloading erforderlich, da die Quellpartitionen vor dem Update nicht zugeordnet werden.
- Wendet ein vollständiges oder Delta-Update auf alle Blockgeräte im Ziel-Slot an.
- Hängen Sie die Partitionen ein, um das Post-Install-Skript auszuführen, und hängen Sie sie dann wieder aus.
- Zielpartitionen aufheben
Vor und nach dem Update sollten die folgenden Systemeigenschaften die entsprechenden Werte haben:
ro.boot.dynamic_partitions=true ro.boot.dynamic_partitions_retrofit=true
Gruppen und Partitionen dem Aktualisierungsmanifest hinzufügen
Wenn Sie ein OTA-Update auf einem A/B-Gerät mit dynamischen Partitionen oder einem A/B-Gerät durchführen, auf dem Unterstützung für dynamische Partitionen hinzugefügt wird, müssen Sie dem Update-Manifest Gruppen und Partitionen hinzufügen. Das Snippet unten enthält zusätzliche Informationen zum Update-Manifest zur Unterstützung dynamischer Partitionen. Eine detaillierte Dokumentation 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;
}