למה חלוקת A/B?
במערכות משובצות, עדכונים שנכשלו עלולים להרוס את המכשירים. פריסת A/B פותרת זאת על ידי שמירה על שתי מערכות קבצים שורש:
- חריץ A — שורשים פעילים
- חריץ B — rootfs המתנה לעדכון הבא
כאשר עדכון מצליח, האתחול עובר לחריץ החדש. אם האתחול נכשל, הוא חוזר לגרסה הטובה האחרונה הידועה.
גישה זו מניחה שחריץ A וחריץ B הם בעלי אותו גודל של המחיצה, מה שיכול להיות לעיתים מסובך במערכות משובצות, כאשר המשאבים מוגבלים.
גישה נוספת היא ליצור מחיצות למערכת הצלה קטנה ומחיצה גדולה יותר למערכת הרגילה שרצה.
דוגמה לפריסת מחיצות
| מטרת | סוג | המחיצה |
|---|---|---|
| P1 | FAT32 | /boot_A (קרנל, cmdline, bootloader) |
| p2 | ext4 | rootfs A |
| P3 | FAT32 | /boot_B (קרנל, cmdline, אתחול למערכת חילוץ) |
| p4 | ext4 | rootfs_B |
| p5 | ext4 | נתונים / קונפיגורציה |
דוגמה מעשית
הגדרה זו מוצגת בשני פרויקטים rpi-image-genלדוגמה:
- 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
הראשון יוצר את מערכת ההצלה והשני משלב את מערכת ההצלה עם מערכת אחרת שרצה, ומתאים את תוויות המחיצה ב-cmdline.txt ו-fstab.
עדכון ניהול
אפשר להרכיב ידנית את מחיצת המערכת הלא פעילה כדי לעדכן תצורות, יישומים או רכיבי מערכת.
במערכות ייצור, העדכונים מנוהלים בדרך כלל באמצעות SWUpdate, שמבצע אוטומציה של תהליך זה בצורה בטוחה.
אינטגרציה עם SWUpdate
SWUpdate תומך באופן טבעי באסטרטגיות עדכון dual-rootfs (A/B).
מחיצות ולוגיקת עדכון מוגדרות ישירות בקובץ sw-description .
גישה זו מבטיחה עדכוני מערכת אטומית עם בטיחות גלגול מובנית — תכונה חיונית למכשירים ללא ראש או מרוחקים, שבהם שחזור ידני אינו אפשרי.
מאמרים בסדרה זו
מקורות
- 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