Android 10 unterstützt dynamische Partitionen , ein Userspace-Partitionierungssystem, das bei Over-the-Air-Updates (OTA) Partitionen erstellen, in der Größe ändern und zerstören kann.
Auf dieser Seite wird beschrieben, wie Sie die Größe dynamischer Partitionen während eines Updates für A/B-Geräte ändern, die mit Unterstützung für dynamische Partitionen gestartet wurden, für Geräte mit Android 9 und niedriger .
Hintergrund
Es gibt eine super
auf dem Gerät. Diese Partition hat kein Slot-Suffix. Das Blockgerät muss zusammen mit dem blk_device
Eintrag für /misc
in fstab
vorhanden sein. Wenn die fstab
Datei beispielsweise Folgendes auflistet:
/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, aber die super
Partition muss nicht in der fstab
Datei aufgeführt sein.
In der 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. Ebenso werden Partitionen als system_s
, vendor_t
usw. bezeichnet.
Vor dem Upgrade enthalten Metadaten S die Informationen für die verwendeten dynamischen Partitionen (normalerweise system_s
, vendor_s
, product_s
usw.). Das System liest während des Updates die Extents für diese Partitionen, sodass sie nicht gelöscht werden können.
Partitionen gehören zu Updategruppen . Weitere Informationen finden Sie unter Implementieren dynamischer Partitionen .
Ein Beispiel für Metadaten auf einem Gerät ist wie folgt.
- Metadaten 0
- Gruppe
foo_a
-
system_a
- Partitionieren Sie
product_services_a
. - Andere von Foo aktualisierte Partitionen
-
- Gruppe bar_a
-
vendor_a
- Partitionieren Sie
product_a
. - Andere von Bar aktualisierte Partitionen
-
- Gruppe
foo_b
(Überbleibsel vom vorherigen Upgrade) - Gruppe
bar_b
(übrig vom vorherigen Upgrade)
- Gruppe
- Metadaten 1
- Gruppe
foo_a
(übrig vom vorherigen Upgrade) - Gruppe
bar_a
(übrig vom vorherigen Upgrade) - Gruppe
foo_b
-
system_b
- Partitionieren Sie
product_services_b
. - Andere von Foo aktualisierte Partitionen
-
- Gruppe
bar_b
-
vendor_b
- Partitionieren Sie
product_b
. - Andere von Bar aktualisierte Partitionen
-
- Gruppe
Sie können das Tool lpdump
(Quellcode unter system/extras/partition_tools
) verwenden, um die Metadaten auf Ihrem Gerät zu sichern. Zum Beispiel:
lpdump --slot 0 /dev/block/bootdevice/by-name/super
lpdump --slot 1 /dev/block/bootdevice/by-name/super
Aktualisierungsablauf
- Initialisieren Sie die Metadaten der
super
.- Laden Sie die Bereiche für die dynamischen Quellpartitionen aus den Metadaten S. Seien 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_s
enthält. - Fügen Sie Zielgruppen und Partitionen entsprechend dem Feld
dynamic_partition_metadata
im Update-Manifest hinzu.
Die Größe jeder Partition finden Sie innew_partition_info
. - Schreiben Sie M in Metadaten T.
- Ordnen Sie die hinzugefügten Partitionen im Device Mapper als beschreibbar zu.
- Wenden Sie das Update auf den Blockgeräten an.
- Ordnen Sie bei Bedarf die Quellpartitionen im Geräte-Mapper als schreibgeschützt zu. Dies ist für das Querladen erforderlich, da die Quellpartitionen vor dem Update nicht zugeordnet werden.
- Wenden Sie ein vollständiges oder Delta-Update auf alle Blockgeräte im Zielsteckplatz an.
- Hängen Sie die Partitionen ein, um das Nachinstallationsskript auszuführen, und heben Sie dann die Bereitstellung der Partitionen auf.
- Heben Sie die Zuordnung der Zielpartitionen auf.
Vor und nach dem Update sollten die folgenden Systemeigenschaften die entsprechenden Werte haben:
ro.boot.dynamic_partitions=true ro.boot.dynamic_partitions_retrofit=true
Fügen Sie Gruppen und Partitionen zum Update-Manifest hinzu
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 Gruppen und Partitionen zum Update-Manifest hinzufügen. Der folgende Ausschnitt zeigt zusätzliche Informationen zum Update-Manifest zur Unterstützung dynamischer Partitionen. Eine ausführliche Dokumentation zu jedem Feld finden Sie in 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; }