Dlaczego partycjonowanie A/B?
W systemach wbudowanych nieudane aktualizacje mogą uszkodzić urządzenia. Układ A/B rozwiązuje ten problem, utrzymując dwa główne systemy plików:
- Slot A - aktywny rootfs
- Slot B - rezerwowy rootfs do następnej aktualizacji
Gdy aktualizacja się powiedzie, bootloader przełącza się na nowy slot. Jeśli rozruch się nie powiedzie, następuje powrót do ostatniej znanej dobrej wersji.
To podejście zakłada, że slot A i slot B mają ten sam rozmiar partycji, co może być czasami trudne w systemach wbudowanych, gdy zasoby są ograniczone.
Innym podejściem jest utworzenie partycji dla małego systemu ratunkowego i większej partycji dla normalnie działającego systemu.
Przykładowy układ partycji
| Partycja | Typ | Cel |
|---|---|---|
| p1 | FAT32 | /boot_A (jądro, cmdline, bootloader) |
| p2 | ext4 | rootfs A |
| p3 | FAT32 | /boot_B (jądro, cmdline, bootloader dla systemu ratunkowego) |
| p4 | ext4 | rootfs_B |
| p5 | ext4 | dane / konfiguracja |
Praktyczny przykład
Ta konfiguracja została zademonstrowana w dwóch rpi-image-genprzykładowych projektach:
- 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
Pierwszy z nich tworzy system ratunkowy, a drugi łączy system ratunkowy z innym działającym systemem, dostosowując etykiety partycji w cmdline.txt i fstab.
Aktualizacja zarządzania
Nieaktywną partycję systemową można zamontować ręcznie, aby zaktualizować konfiguracje, aplikacje lub składniki systemu.
W przypadku systemów produkcyjnych aktualizacje są zazwyczaj zarządzane za pomocą aplikacji SWUpdatektóry bezpiecznie automatyzuje ten proces.
Integracja z SWUpdate
SWUpdate natywnie obsługuje strategie aktualizacji z dwoma rootami (A/B).
Partycje i logika aktualizacji są zdefiniowane bezpośrednio w pliku sw-description pliku.
Takie podejście zapewnia atomowe aktualizacje systemu z wbudowanym bezpieczeństwem wycofywania - niezbędna funkcja dla urządzeń bezgłowych lub zdalnych, gdzie ręczne odzyskiwanie nie jest możliwe.
Artykuły z tej serii
- Building a Production-Ready Linux for Raspberry Pi Compute Module 5
- Od standardowego systemu operacyjnego do platformy produkcyjnej
- Customizing Raspberry Pi OS with rpi-image-gen
- Wytrzymałość systemu - Projektowanie układu głównego systemu plików A/B
- Provisioning — Automating First Boot with rpi-sb-provisioner
- OTA and Lifecycle — Software Updates with SWUpdate
Źródła
- 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