Hvorfor A/B-opdeling?
I indlejrede systemer kan mislykkede opdateringer ødelægge enheder. Et A/B-layout løser dette ved at opretholde to rodfilsystemer:
- Slot A - aktiv rootfs
- Slot B - standby rootfs til næste opdatering
Når en opdatering lykkes, skifter bootloaderen til det nye slot. Hvis opstarten mislykkes, rulles der tilbage til den sidst kendte gode version.
Denne tilgang forudsætter, at slot A og slot B har samme størrelse på partitionen, hvilket kan være vanskeligt i indlejrede systemer, hvor ressourcerne er begrænsede.
En anden tilgang er at oprette partitioner til et lille redningssystem og en større partition til det normalt kørende system.
Eksempel på partitionslayout
| Partition | Type | Formål |
|---|---|---|
| p1 | FAT32 | /boot_A (kerne, cmdline, bootloader) |
| p2 | ext4 | rootfs A |
| p3 | FAT32 | /boot_B (kerne, cmdline, bootloader til redningssystem) |
| p4 | ext4 | rootfs_B |
| p5 | ext4 | data/konfiguration |
Praktisk eksempel
Denne opsætning er demonstreret i to rpi-image-geneksempelprojekter:
- 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 opretter redningssystemet, og den anden kombinerer redningssystemet med et andet kørende system ved at justere partitionsetiketterne i cmdline.txt og fstab.
Styring af opdatering
Du kan montere den inaktive systempartition manuelt for at opdatere konfigurationer, programmer eller systemkomponenter.
For produktionssystemer styres opdateringer typisk via SWUpdatesom automatiserer denne proces på en sikker måde.
Integration med SWUpdate
SWUpdate understøtter naturligt opdateringsstrategier med to rodfrugter (A/B).
Partitioner og opdateringslogik defineres direkte i filen sw-description filen.
Denne tilgang sikrer atomare systemopdateringer med indbygget rollback-sikkerhed - en vigtig funktion for hovedløse eller fjerntliggende enheder, hvor manuel gendannelse ikke er mulig.
Artikler i denne serie
- Building a Production-Ready Linux for Raspberry Pi Compute Module 5
- Fra lager-OS til produktionsplatform
- Customizing Raspberry Pi OS with rpi-image-gen
- Systemrobusthed - Design af et A/B-rodfilsystemlayout
- 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