¿Por qué partición A/B?
En los sistemas embebidos, las actualizaciones fallidas pueden brickear los dispositivos. Una disposición A/B resuelve esto manteniendo dos sistemas de archivos raíz:
- Ranura A - rootfs activo
- Ranura B - rootfs en espera para la próxima actualización
Cuando una actualización tiene éxito, el gestor de arranque cambia a la nueva ranura. Si el arranque falla, se retrocede a la última versión buena conocida.
Este enfoque presupone, que la ranura A y la ranura B tienen el mismo tamaño de la partición, lo que a veces puede ser complicado en sistemas embebidos, cuando los recursos son limitados.
Otro enfoque es, crear particiones para un pequeño sistema de rescate y una partición más grande para el sistema de funcionamiento normal.
Ejemplo de disposición de particiones
| Partición | Tipo | Finalidad |
|---|---|---|
| p1 | FAT32 | /boot_A (kernel, cmdline, gestor de arranque) |
| p2 | ext4 | rootfs A |
| p3 | FAT32 | /boot_B (kernel, cmdline, gestor de arranque para el sistema de rescate) |
| p4 | ext4 | rootfs_B |
| p5 | ext4 | datos / configuración |
Ejemplo práctico
Esta configuración se demuestra en dos rpi-image-genproyectos de ejemplo:
- https://github.com/interelectronix/rpi-image-gen-projects/blob/main/deb12-cm5-rescue/README.md
- https://github.com/interelectronix/rpi-image-gen-projects/blob/main/deb12-cm5-ix-base/README.md
El primero crea el sistema de rescate y el segundo combina el sistema de rescate con otro sistema en ejecución, ajustando las etiquetas de partición en cmdline.txt y fstab.
Gestión de la actualización
Puede montar manualmente la partición inactiva del sistema para actualizar configuraciones, aplicaciones o componentes del sistema.
Para los sistemas de producción, las actualizaciones suelen gestionarse a través de SWUpdateque automatiza este proceso de forma segura.
Integración con SWUpdate
SWUpdate soporta de forma nativa estrategias de actualización de doble raíz (A/B).
Las particiones y la lógica de actualización se definen directamente en el sw-description archivo.
Este enfoque garantiza actualizaciones atómicas del sistema con seguridad de retroceso incorporada, una característica esencial para los dispositivos sin cabeza o remotos, donde la recuperación manual no es factible.
Artículos de esta serie
- Building a Production-Ready Linux for Raspberry Pi Compute Module 5
- Del sistema operativo de stock a la plataforma de producción
- Customizing Raspberry Pi OS with rpi-image-gen
- Robustez del sistema - Diseño de un sistema de archivos raíz A/B
- Provisioning — Automating First Boot with rpi-sb-provisioner
- OTA and Lifecycle — Software Updates with SWUpdate
Fuentes
- rpi-image-gen: https://github.com/raspberrypi/rpi-image-gen
- rpi-sb-provisioner: https://github.com/raspberrypi/rpi-sb-provisioner
- SWUpdate: https://github.com/sbabic/swupdate
- swugenerator: https://github.com/sbabic/swugenerator