Android 10 unterstützt dynamische Partitionen, ein Partitionierungssystem im Userspace, mit dem Partitionen während Over-the-Air-Updates (OTA) erstellt, in der Größe geändert 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 für Geräte mit Android 9 und niedrigeren Versionen.
Hintergrund
Auf dem Gerät gibt es eine super-Partition. Diese
Partition hat kein Slot-Suffix. Das Blockgerät muss zusammen
mit dem blk_device Eintrag für /misc in
fstab vorhanden sein. Wenn in der Datei fstab beispielsweise Folgendes aufgeführt ist:
/dev/block/bootdevice/by-name/misc /misc # Other fields
Dann muss das Blockgerät für super in /dev/block/bootdevice/by-name/super vorhanden sein. Die super-Partition muss jedoch nicht in der Datei fstab aufgeführt sein.
In der super-Partition 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
„Metadaten S (Quelle)“ und „Metadaten T (Ziel)“ bezeichnet. Ebenso werden
Partitionen als system_s,
vendor_t usw. bezeichnet.
Vor dem Upgrade enthält „Metadaten S“ die Informationen für die
verwendeten dynamischen Partitionen (in der Regel system_s,
vendor_s, product_s, usw.). Das System
liest die Extents für diese Partitionen während des Updates, daher können sie
nicht gelöscht werden.
Partitionen gehören zu Update-Gruppen. Weitere Informationen finden Sie unter Dynamische Partitionen implementieren.
Ein Beispiel für Metadaten auf einem Gerät sieht so aus:
- Metadaten 0
- Gruppe
foo_a- Partition
system_a - Partition
product_services_a - Andere von Foo aktualisierte Partitionen
- Partition
- Gruppe bar_a
- Partition
vendor_a - Partition
product_a - Andere von Bar aktualisierte Partitionen
- 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(Überbleibsel aus vorherigem Upgrade) - Gruppe
foo_b- Partition
system_b - Partition
product_services_b - Andere von Foo aktualisierte Partitionen
- 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
Update-Ablauf
- Metadaten der
superPartition initialisieren- Laden Sie die Extents für die dynamischen Quellpartitionen aus „Metadaten 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_sSuffix enthält. -
Fügen Sie Zielgruppen und -partitionen gemäß dem
dynamic_partition_metadataFeld im Update Manifest hinzu.
Die Größe der einzelnen Partitionen finden Sie unternew_partition_info. - Schreiben Sie M in „Metadaten T“.
- Ordnen Sie die hinzugefügten Partitionen dem Device Mapper als beschreibbar zu.
- Update auf die Blockgeräte anwenden
- Ordnen Sie die Quellpartitionen gegebenenfalls dem Device Mapper als Lesezugriff zu. Dies ist für das Sideloading erforderlich, da die Quell Partitionen vor dem Update nicht zugeordnet werden.
- Wenden Sie ein vollständiges oder ein 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.
- Zuordnung der 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 zum Update-Manifest hinzufügen
Wenn Sie ein OTA-Update auf einem A/B-Gerät mit dynamischen Partitionen, oder einem A/B-Gerät durchführen, das Unterstützung für dynamische Partitionen hinzufügt, müssen Sie dem Update-Manifest Gruppen und Partitionen hinzufügen. Der folgende Codeblock 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;
}