Varför A/B-partitionering?
I inbyggda system kan misslyckade uppdateringar leda till att enheter slås ut. En A/B-layout löser detta genom att upprätthålla två rotfilsystem:
- Plats A - aktiv rootfs
- Plats B - standby rootfs för nästa uppdatering
När en uppdatering lyckas växlar starthanteraren till den nya kortplatsen. Om uppstarten misslyckas återgår den till den senast kända bra versionen.
Detta tillvägagångssätt förutsätter, att slot A och slot B har samma storlek på partitionen, vilket ibland kan vara knepigt i inbäddade system, när resurserna är begränsade.
Ett annat tillvägagångssätt är att skapa partitioner för ett litet räddningssystem och en större partition för det normala körsystemet.
Exempel på partitioneringslayout
| Partition | typ | Syfte |
|---|---|---|
| p1 | FAT32 | /boot_A (kärna, cmdline, startladdare) |
| p2 | ext4 | rootfs A |
| p3 | FAT32 | /boot_B (kärna, cmdline, bootloader för räddningssystem) |
| p4 | ext4 | rootfs_B |
| p5 | ext4 | data / konfiguration |
Praktiskt exempel
Denna inställning demonstreras i två rpi-image-genexempelprojekt:
- 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örsta skapar räddningssystemet och den andra kombinerar räddningssystemet med ett annat körsystem och justerar partitionsetiketter i cmdline.txt och fstab.
Uppdatering av hantering
Du kan montera den inaktiva systempartitionen manuellt för att uppdatera konfigurationer, program eller systemkomponenter.
För produktionssystem hanteras uppdateringar vanligtvis via SWUpdatesom automatiserar denna process på ett säkert sätt.
Integration med SWUpdate
SWUpdate har inbyggt stöd för uppdateringsstrategier med dubbla rotar (A/B).
Partitioner och uppdateringslogik definieras direkt i filen sw-description filen.
Detta tillvägagångssätt säkerställer atomära systemuppdateringar med inbyggd rollback-säkerhet - en viktig funktion för huvudlösa enheter eller fjärrenheter, där manuell återställning inte är möjlig.
Artiklar i denna serie
- Building a Production-Ready Linux for Raspberry Pi Compute Module 5
- Från lager-OS till produktionsplattform
- Customizing Raspberry Pi OS with rpi-image-gen
- Systemets robusthet - Utformning av en A/B-rotfilsystemlayout
- Provisioning — Automating First Boot with rpi-sb-provisioner
- OTA and Lifecycle — Software Updates with SWUpdate
Källor
- 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