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 soporte para 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 el 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 no es necesario que la super
aparezca en el archivo fstab
.
En la super
, hay dos ranuras de metadatos , numeradas 0 y 1, que corresponden a las ranuras A/B para particiones. En esta página, las ranuras de metadatos se denominan Metadatos S (fuente) y Metadatos T (destino). De manera similar, las particiones se denominan system_s
, vendor_t
, etc.
Antes de la actualización, Metadata S contiene la información de las particiones dinámicas que se utilizan (normalmente, 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
-
vendor_a
de partición_a - Partición
product_a
- Otras particiones actualizadas por Bar
-
- Grupo
foo_b
(restante de la actualización anterior) - Grupo
bar_b
(restante de la actualización anterior)
- Grupo
- Metadatos 1
- Grupo
foo_a
(restante de la actualización anterior) - Grupo
bar_a
(restante 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
-
vendor_b
de partición_b - Partición
product_b
- Otras particiones actualizadas por Bar
-
- Grupo
Puede utilizar 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 de 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 de acuerdo con el
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 agregadas en el asignador de dispositivos como escribibles.
- Aplique la actualización en los dispositivos bloqueados.
- Si es necesario, asigne las particiones de origen en el asignador de dispositivos como de solo lectura. Esto es necesario para la descarga porque las particiones de origen no están asignadas 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 en un dispositivo A/B que agrega soporte para particiones dinámicas, debe agregar grupos y particiones al manifiesto de actualización. El siguiente fragmento 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; }