Warum A/B-Partitionierung?
In eingebetteten Systemen können fehlgeschlagene Updates die Geräte lahmlegen. Ein A/B-Layout löst dieses Problem, indem es zwei Root-Dateisysteme unterhält:
- Slot A - aktives Rootfs
- Slot B - Standby-Rootfs für die nächste Aktualisierung
Wenn eine Aktualisierung erfolgreich ist, wechselt der Bootloader zum neuen Slot. Wenn der Bootvorgang fehlschlägt, wird auf die letzte bekannte gute Version zurückgesetzt.
Dieser Ansatz setzt voraus, dass Slot A und Slot B die gleiche Größe der Partition haben, was in eingebetteten Systemen, in denen die Ressourcen begrenzt sind, manchmal schwierig sein kann.
Ein anderer Ansatz ist, Partitionen für ein kleines Rettungssystem und eine größere Partition für das normal laufende System zu erstellen.
Beispiel Partitionslayout
| Partition | Typ | Zweck |
|---|---|---|
| p1 | FAT32 | /boot_A (Kernel, cmdline, Bootloader) |
| p2 | ext4 | rootfs A |
| p3 | FAT32 | /boot_B (Kernel, cmdline, Bootloader für Rettungssystem) |
| p4 | ext4 | rootfs_B |
| p5 | ext4 | Daten / Konfiguration |
Praktisches Beispiel
Dieses Setup wird in zwei Beispielprojekten demonstriert rpi-image-genBeispielprojekten demonstriert:
- 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
Die erste erstellt das Rettungssystem und die zweite kombiniert das Rettungssystem mit einem anderen laufenden System, wobei die Partitionsbezeichnungen in cmdline.txt und fstab.
Update verwalten
Sie können die inaktive Systempartition manuell mounten, um Konfigurationen, Anwendungen oder Systemkomponenten zu aktualisieren.
Bei Produktionssystemen werden die Aktualisierungen normalerweise über SWUpdateverwaltet, wodurch dieser Prozess sicher automatisiert wird.
Integration mit SWUpdate
SWUpdate unterstützt von Haus aus Dual-Rootfs (A/B) Aktualisierungsstrategien.
Partitionen und Aktualisierungslogik werden direkt in der sw-description Datei definiert.
Dieser Ansatz gewährleistet atomare Systemaktualisierungen mit eingebauter Rollback-Sicherheit - eine wichtige Funktion für Headless- oder Remote-Geräte, bei denen eine manuelle Wiederherstellung nicht möglich ist.
Artikel in dieser Serie
- Building a Production-Ready Linux for Raspberry Pi Compute Module 5
- Vom Stock OS zur Produktionsplattform
- Customizing Raspberry Pi OS with rpi-image-gen
- Systemrobustheit - Entwurf eines A/B Root-Dateisystem-Layouts
- Provisioning — Automating First Boot with rpi-sb-provisioner
- OTA and Lifecycle — Software Updates with SWUpdate
Quellen
- 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