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 actualizaciones inalámbricas (OTA).
En esta página, se describe cómo cambiar el tamaño de las particiones dinámicas durante una actualización para dispositivos A/B que se lanzaron con compatibilidad con particiones dinámicas, para dispositivos que ejecutan Android 9 y versiones anteriores.
Segundo plano
Hay una partición super
en el dispositivo. Esta partición no tiene sufijo de ranura. El dispositivo de bloques debe existir junto con la entrada blk_device
para /misc
en fstab
. Por ejemplo, si el archivo fstab
enumera lo siguiente:
/dev/block/bootdevice/by-name/misc /misc # Other fields
Luego, el dispositivo de almacenamiento en bloques para super
debe existir en /dev/block/bootdevice/by-name/super
, pero la partición super
no es necesario que aparezca en el archivo fstab
.
En la partición super
, hay dos ranuras de metadatos, numeradas 0 y 1, que corresponden a las ranuras A/B para las particiones. En esta página, los espacios de metadatos se llaman Metadata S (fuente) y Metadata T (destino). Del mismo modo, las particiones se denominan system_s
, vendor_t
, y así sucesivamente.
Antes de la actualización, Metadata S contiene la información de las particiones dinámicas que se usan (por lo general, system_s
, vendor_s
, product_s
, etcétera). El sistema lee los límites de estas particiones durante la actualización, por lo que no se pueden borrar.
Las particiones pertenecen a grupos de actualización. Consulta Cómo implementar particiones dinámicas para obtener más información.
El siguiente es un ejemplo de metadatos en un dispositivo.
- Metadatos 0
- Grupo
foo_a
- Partición
system_a
- Partición
product_services_a
- Otras particiones actualizadas por Foo
- Partición
- Agrupa bar_a
- Partición
vendor_a
- Partición
product_a
- Otras particiones actualizadas por Bar
- Partición
- Grupo
foo_b
(remanente de la actualización anterior) - Grupo
bar_b
(que resta de la actualización anterior)
- Grupo
- Metadatos 1
- Grupo
foo_a
(remanente de la actualización anterior) - Grupo
bar_a
(remanente de la actualización anterior) - Grupo
foo_b
- Partición
system_b
- Partición
product_services_b
- Otras particiones actualizadas por Foo
- Partición
- Grupo
bar_b
- Partición
vendor_b
- Partición
product_b
- Otras particiones actualizadas por Bar
- Partición
- Grupo
Puedes usar la herramienta lpdump
(código fuente en system/extras/partition_tools
) para volcar los metadatos en tu dispositivo. Por ejemplo:
lpdump --slot 0 /dev/block/bootdevice/by-name/super
lpdump --slot 1 /dev/block/bootdevice/by-name/super
Actualiza el flujo
- Inicializa los metadatos de la partición
super
.- Carga los límites de las particiones dinámicas de origen desde los metadatos S. Sea M los metadatos cargados.
-
Quita grupos y particiones de destino (por ejemplo,
foo_t
,bar_t
) de M para que M solo contenga particiones y grupos con el sufijo_s
. -
Agrega particiones y grupos de destino según el campo
dynamic_partition_metadata
del manifiesto de actualización.
El tamaño de cada partición se puede encontrar ennew_partition_info
. - Escribir M en Metadata T.
- Asigna las particiones agregadas en el asignador de dispositivos como que admiten escritura.
- Aplica la actualización en los dispositivos de almacenamiento en bloques.
- Si es necesario, asigna las particiones de origen en el asignador de dispositivos como de solo lectura. Esto es necesario para el sideloading, ya que las particiones de origen no se asignan antes de la actualización.
- Aplica una actualización completa o delta a todos los dispositivos de almacenamiento en el espacio objetivo.
- Activa las particiones para ejecutar la secuencia de comandos posterior a la instalación y, luego, desactiva las particiones.
- Desasignar las particiones de destino
Antes y después de la actualización, las siguientes propiedades del sistema deben tener los valores correspondientes:
ro.boot.dynamic_partitions=true ro.boot.dynamic_partitions_retrofit=true
Agrega grupos y particiones al manifiesto de actualización
Cuando realices una actualización OTA en un dispositivo A/B con particiones dinámicas o un dispositivo A/B que agregue compatibilidad con particiones dinámicas, debes agregar grupos y particiones al manifiesto de actualización. En el siguiente fragmento, se muestra información adicional sobre el manifiesto de actualización para admitir particiones dinámicas. Consulta 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; }