Zakaj razdelitev A/B?
V vgrajenih sistemih lahko neuspešne posodobitve poškodujejo naprave. Postavitev A/B to rešuje z vzdrževanjem dveh korenskih datotečnih sistemov:
- Slot A - aktivni korenski sistem rootfs
- reža B - rezervni korenski sistem za naslednjo posodobitev
Ko posodobitev uspe, se zagonski program preklopi na novo režo. Če zagon ni uspešen, se vrne na zadnjo znano dobro različico.
Ta pristop predpostavlja, da imata reža A in reža B enako velikost particije, kar je v vgrajenih sistemih, kjer so viri omejeni, včasih težavno.
Drug pristop je ustvarjanje razdelkov za majhen reševalni sistem in večji razdelek za običajni delujoči sistem.
Primer razporeditve razdelkov
| Razdelek | Vrsta | Namen |
|---|---|---|
| p1 | FAT32 | /boot_A (jedro, cmdline, bootloader) |
| p2 | ext4 | rootfs A |
| p3 | FAT32 | /boot_B (jedro, cmdline, bootloader za reševalni sistem) |
| p4 | ext4 | rootfs_B |
| p5 | ext4 | podatki / konfiguracija |
Praktični primer
Ta nastavitev je prikazana v dveh primerih rpi-image-genprojektih:
- 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
Prvi ustvari reševalni sistem, drugi pa združi reševalni sistem z drugim delujočim sistemom, pri čemer prilagodi oznake razdelkov v cmdline.txt in fstab.
Upravljanje posodobitev
Neaktivno sistemsko particijo lahko namestite ročno, da posodobite konfiguracije, aplikacije ali sistemske komponente.
Pri produkcijskih sistemih se posodobitve običajno upravljajo prek SWUpdate, ki ta postopek varno avtomatizira.
Integracija z SWUpdate
SWUpdate nativno podpira strategije posodabljanja z dvema korenskima enotama (A/B).
Razdelki in logika posodabljanja so opredeljeni neposredno v sw-description datoteki.
Ta pristop zagotavlja atomične posodobitve sistema z vgrajeno varnostjo povratka - bistvena lastnost za naprave brez glave ali oddaljene naprave, kjer ročna obnovitev ni izvedljiva.
Članki v tej seriji
- Building a Production-Ready Linux for Raspberry Pi Compute Module 5
- Od operacijskega sistema na zalogi do proizvodne platforme
- Customizing Raspberry Pi OS with rpi-image-gen
- Robustnost sistema - Oblikovanje postavitve korenskega datotečnega sistema A/B
- Provisioning — Automating First Boot with rpi-sb-provisioner
- OTA and Lifecycle — Software Updates with SWUpdate
Viri
- 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