Android 10 admite particiones dinámicas , un sistema de partición del espacio de usuario que puede crear, cambiar el tamaño y destruir particiones durante las actualizaciones inalámbricas (OTA).
Esta página describe cómo cambiar el tamaño de las particiones dinámicas durante una actualización para dispositivos A/B que se iniciaron con compatibilidad con particiones dinámicas, para dispositivos con Android 9 y versiones anteriores .
Fondo
Hay una super
partición en el dispositivo. Esta partición no tiene sufijo de ranura. El dispositivo de bloque debe existir junto con la entrada blk_device
para /misc
en fstab
. Por ejemplo, si el archivo fstab
enumera:
/dev/block/bootdevice/by-name/misc /misc # Other fields
Luego, el dispositivo de bloque para super
debe existir en /dev/block/bootdevice/by-name/super
, pero la partición super
no necesita estar listada en el archivo fstab
.
En la super
, hay dos ranuras de metadatos , numeradas 0 y 1, correspondientes a las ranuras A/B para particiones. En esta página, los espacios de metadatos se denominan Metadatos S (fuente) y Metadatos T (destino). De manera similar, las particiones se conocen como system_s
, vendor_t
, etc.
Antes de la actualización, Metadata S contiene la información de las particiones dinámicas que se utilizan (por lo general, system_s
, vendor_s
, product_s
, etc.). El sistema lee las extensiones de estas particiones durante la actualización, por lo que no se pueden eliminar.
Las particiones pertenecen a grupos de actualización . Consulte Implementación de particiones dinámicas para obtener más detalles.
Un ejemplo de metadatos en un dispositivo es el siguiente.
- Metadatos 0
- Grupo
foo_a
-
system_a
de partición_a - Partición
product_services_a
- Otras particiones actualizadas por Foo
-
- Grupo bar_a
- Partición
vendor_a
-
product_a
de partición_a - Otras particiones actualizadas por Bar
- Partición
- Grupo
foo_b
(sobras de la actualización anterior) - Grupo
bar_b
(sobras de la actualización anterior)
- Grupo
- Metadatos 1
- Grupo
foo_a
(restos de la actualización anterior) - Grupo
bar_a
(restos de la actualización anterior) - Grupo
foo_b
-
system_b
de partición_b - Partición
product_services_b
- Otras particiones actualizadas por Foo
-
- Grupo
bar_b
- Partición
vendor_b
- Partición
product_b
- Otras particiones actualizadas por Bar
- Partición
- Grupo
Puede usar la herramienta lpdump
(código fuente en system/extras/partition_tools
) para volcar los metadatos en su dispositivo. Por ejemplo:
lpdump --slot 0 /dev/block/bootdevice/by-name/super
lpdump --slot 1 /dev/block/bootdevice/by-name/super
Flujo de actualización
- Inicialice los metadatos de la
super
.- Cargue las extensiones para las particiones dinámicas de origen desde Metadata S. Sea M los metadatos cargados.
- Elimine los grupos de destino y las particiones (por ejemplo,
foo_t
,bar_t
) de M para que M contenga solo particiones y grupos con el sufijo_s
. - Agregue grupos de destino y particiones según el campo
dynamic_partition_metadata
en el manifiesto de actualización.
El tamaño de cada partición se puede encontrar ennew_partition_info
. - Escriba M en metadatos T.
- Asigne las particiones añadidas en el mapeador de dispositivos como escribibles.
- Aplicar la actualización en los dispositivos de bloque.
- Si es necesario, asigne las particiones de origen en el asignador de dispositivos como de solo lectura. Esto es necesario para la instalación de prueba porque las particiones de origen no se asignan antes de la actualización.
- Aplique una actualización completa o delta a todos los dispositivos de bloque en la ranura de destino.
- Monte las particiones para ejecutar el script posterior a la instalación y luego desmonte las particiones.
- Desasignar las particiones de destino.
Antes y después de la actualización, las siguientes propiedades del sistema deben tener los valores respectivos:
ro.boot.dynamic_partitions=true ro.boot.dynamic_partitions_retrofit=true
Agregar grupos y particiones al manifiesto de actualización
Al realizar una actualización OTA en un dispositivo A/B con particiones dinámicas, o un dispositivo A/B que agrega soporte para particiones dinámicas, debe agregar grupos y particiones al manifiesto de actualización. El fragmento a continuación muestra información adicional sobre el manifiesto de actualización para admitir particiones dinámicas. Consulte update_metadata.proto para obtener documentación detallada sobre cada campo.
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; }