Hvorfor A/B-partisjonering?
I innebygde systemer kan mislykkede oppdateringer ødelegge enheter. En A/B-layout løser dette ved å opprettholde to rotfilsystemer:
- Spor A - aktiv rootfs
- Slot B - standby rootfs for neste oppdatering
Når en oppdatering lykkes, bytter bootloaderen til det nye sporet. Hvis oppstarten mislykkes, går den tilbake til den siste kjente gode versjonen.
Denne tilnærmingen forutsetter at spor A og spor B har samme størrelse på partisjonen, noe som noen ganger kan være vanskelig i innebygde systemer, når ressursene er begrensede.
En annen tilnærming er å opprette partisjoner for et lite redningssystem og en større partisjon for det normale kjøresystemet.
Eksempel på partisjonslayout
| Partisjon | Type | Formål |
|---|---|---|
| p1 | FAT32 | /boot_A (kjerne, cmdline, oppstartslaster) |
| p2 | ext4 | rootfs A |
| p3 | FAT32 | /boot_B (kjerne, cmdline, oppstartslaster for redningssystem) |
| p4 | ext4 | rootfs_B |
| p5 | ext4 | data / konfigurasjon |
Praktisk eksempel
Dette oppsettet er demonstrert i to rpi-image-geneksempelprosjekter:
- 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
Den første oppretter redningssystemet, og den andre kombinerer redningssystemet med et annet kjørende system ved å justere partisjonsetikettene i cmdline.txt og fstab.
Administrere oppdatering
Du kan montere den inaktive systempartisjonen manuelt for å oppdatere konfigurasjoner, programmer eller systemkomponenter.
For produksjonssystemer administreres oppdateringer vanligvis via SWUpdatesom automatiserer denne prosessen på en sikker måte.
Integrering med SWUpdate
SWUpdate har innebygd støtte for oppdateringsstrategier med to rotter (A/B).
Partisjoner og oppdateringslogikk defineres direkte i sw-description filen.
Denne tilnærmingen sikrer atomiske systemoppdateringer med innebygd sikkerhet for tilbakestilling - en viktig funksjon for hodeløse eller eksterne enheter, der manuell gjenoppretting ikke er mulig.
Artikler i denne serien
- Building a Production-Ready Linux for Raspberry Pi Compute Module 5
- Fra lagerbasert operativsystem til produksjonsplattform
- Customizing Raspberry Pi OS with rpi-image-gen
- Systemrobusthet - Utforming av et A/B-rotfilsystemlayout
- Provisioning — Automating First Boot with rpi-sb-provisioner
- OTA and Lifecycle — Software Updates with SWUpdate
Kilder
- 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