ทําไมต้องแบ่งพาร์ติชัน A/B?
ในระบบฝังตัวการอัปเดตที่ล้มเหลวอาจทําให้อุปกรณ์เสียหายได้ เค้าโครง A/B แก้ปัญหานี้โดยการรักษาระบบไฟล์รูทสองระบบ:
- สล็อต A — rootfs ที่ใช้งานอยู่
- สล็อต B — รูทสแตนด์บายสําหรับการอัปเดตครั้งต่อไป
เมื่อการอัปเดตสําเร็จ bootloader จะสลับไปยังสล็อตใหม่ หากการบูตล้มเหลว จะย้อนกลับไปเป็นเวอร์ชันสุดท้ายที่ทราบ
วิธีนี้สันนิษฐานไว้ก่อนว่าสล็อต A และสล็อต B มีขนาดพาร์ติชันเท่ากันซึ่งบางครั้งอาจยุ่งยากในระบบฝังตัวเมื่อทรัพยากรมี จํากัด
อีกวิธีหนึ่งคือการสร้างพาร์ติชันสําหรับระบบกู้ภัยขนาดเล็กและพาร์ติชันที่ใหญ่ขึ้นสําหรับระบบที่ทํางานตามปกติ
ตัวอย่างเค้าโครงพาร์ติชัน
| วัตถุประสงค์ | ประเภท | พาร์ทิชัน/พาร์ทิชัน/ฝากั้นพื้นที่ |
|---|---|---|
| หน้า 1 | ไขมัน 32 | /boot_A (เคอร์เนล, cmdline, bootloader) |
| หน้า 2 | ต่อ 4 | รากเอฟเอส |
| หน้า 3 | ไขมัน 32 | /boot_B (เคอร์เนล, cmdline, bootloader สําหรับระบบกู้ภัย) |
| หน้า 4 | ต่อ 4 | rootfs_B |
| หน้า 5 | ต่อ 4 | ข้อมูล / การกําหนดค่า |
ตัวอย่างการปฏิบัติ
การตั้งค่านี้แสดงให้เห็นในโครงการตัวอย่างrpi-image-genสองโครงการ:
- <a href="https://github.com/อินเตอร์อิเล็กทรอนิกซ์ /rpi-image-gen-projects / blob / main / deb12-cm5-rescue / README.md "target = "_blank">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
วิธีการนี้ช่วยให้มั่นใจได้ถึงการอัปเดตระบบอะตอมด้วยความปลอดภัยในการย้อนกลับในตัว ซึ่งเป็นคุณสมบัติที่จําเป็นสําหรับอุปกรณ์แบบไม่มีส่วนหัวหรือระยะไกล ซึ่งไม่สามารถกู้คืนด้วยตนเองได้
บทความในชุดนี้
- การสร้างLinuxที่พร้อมใช้งานจริงสําหรับ Raspberry Pi Compute Module 5
- จากสต็อกระบบปฏิบัติการสู่แพลตฟอร์มการผลิต
- การปรับแต่งRaspberry Pi OSด้วย rpi-image-gen
- ความแข็งแกร่งของระบบ — การออกแบบเค้าโครงระบบไฟล์ราก A/B
- Provisioning — การบูตครั้งแรกโดยอัตโนมัติด้วย rpi-sb-provisioner
- OTA และวงจรชีวิต — การอัปเดตซอฟต์แวร์ด้วย SWUpdate
แหล่งที่มา
- 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
- <a href="https://github.com/sbabic/swugenerator: swugenerator" เป้าหมาย="_blank">https://github.com/sbabic/swugenerator