Skip to main content

ทําไมต้องแบ่งพาร์ติชัน A/B?

ในระบบฝังตัวการอัปเดตที่ล้มเหลวอาจทําให้อุปกรณ์เสียหายได้ เค้าโครง A/B แก้ปัญหานี้โดยการรักษาระบบไฟล์รูทสองระบบ:

  • สล็อต A — rootfs ที่ใช้งานอยู่
  • สล็อต B — รูทสแตนด์บายสําหรับการอัปเดตครั้งต่อไป

เมื่อการอัปเดตสําเร็จ bootloader จะสลับไปยังสล็อตใหม่ หากการบูตล้มเหลว จะย้อนกลับไปเป็นเวอร์ชันสุดท้ายที่ทราบ

วิธีนี้สันนิษฐานไว้ก่อนว่าสล็อต A และสล็อต B มีขนาดพาร์ติชันเท่ากันซึ่งบางครั้งอาจยุ่งยากในระบบฝังตัวเมื่อทรัพยากรมี จํากัด

swupdate พร้อมระบบกู้ภัย

อีกวิธีหนึ่งคือการสร้างพาร์ติชันสําหรับระบบกู้ภัยขนาดเล็กและพาร์ติชันที่ใหญ่ขึ้นสําหรับระบบที่ทํางานตามปกติ

ตัวอย่างเค้าโครงพาร์ติชัน

เค้าโครง Raspberry Pi Compute Module 5 (CM5) ทั่วไปอาจมีลักษณะดังนี้:
วัตถุประสงค์ประเภทพาร์ทิชัน/พาร์ทิชัน/ฝากั้นพื้นที่
หน้า 1ไขมัน 32/boot_A (เคอร์เนล, cmdline, bootloader)
หน้า 2ต่อ 4รากเอฟเอส
หน้า 3ไขมัน 32/boot_B (เคอร์เนล, cmdline, bootloader สําหรับระบบกู้ภัย)
หน้า 4ต่อ 4rootfs_B
หน้า 5ต่อ 4ข้อมูล / การกําหนดค่า
bootloader สามารถใช้แฟล็ก (ตัวอย่างเช่น GPIO17=1 ใน rpi-eeprom) เพื่อกําหนดว่าจะบูตจากพาร์ติชันกู้ภัยหรือไม่

ตัวอย่างการปฏิบัติ

การตั้งค่านี้แสดงให้เห็นในโครงการตัวอย่างrpi-image-genสองโครงการ:

อันแรกสร้างระบบกู้ภัยและอันที่สองรวมระบบกู้ภัยเข้ากับระบบที่ทํางานอยู่อื่นโดยปรับป้ายกํากับพาร์ติชันใน cmdline.txt และ fstab

การจัดการการอัปเดต

คุณสามารถเมาท์พาร์ติชันระบบที่ไม่ได้ใช้งานด้วยตนเองเพื่ออัปเดตการกําหนดค่า แอปพลิเคชัน หรือส่วนประกอบของระบบ
สําหรับระบบการผลิต การอัปเดตมักจะได้รับการจัดการผ่าน SWUpdateซึ่งทําให้กระบวนการนี้เป็นไปโดยอัตโนมัติอย่างปลอดภัย

บูรณาการกับ SWUpdate

SWUpdate รองรับกลยุทธ์การอัปเดต dual-rootfs (A/B) โดยกําเนิด
พาร์ติชันและตรรกะการอัปเดตถูกกําหนดโดยตรงในไฟล์ sw-description

วิธีการนี้ช่วยให้มั่นใจได้ถึงการอัปเดตระบบอะตอมด้วยความปลอดภัยในการย้อนกลับในตัว ซึ่งเป็นคุณสมบัติที่จําเป็นสําหรับอุปกรณ์แบบไม่มีส่วนหัวหรือระยะไกล ซึ่งไม่สามารถกู้คืนด้วยตนเองได้

แหล่งที่มา