Tại sao phân vùng A/B?
Trong các hệ thống nhúng, cập nhật không thành công có thể làm hỏng thiết bị. Bố cục A/B giải quyết vấn đề này bằng cách duy trì hai hệ thống tệp gốc:
- Khe A — rootfs hoạt động
- Khe B — rootf dự phòng cho bản cập nhật tiếp theo
Khi cập nhật thành công, bộ nạp khởi động sẽ chuyển sang vị trí mới. Nếu khởi động không thành công, nó sẽ quay trở lại phiên bản tốt cuối cùng đã biết.
Cách tiếp cận này giả định rằng khe A và khe B có cùng kích thước của phân vùng, điều này đôi khi có thể phức tạp trong các hệ thống nhúng, khi tài nguyên bị hạn chế.
Một cách tiếp cận khác là tạo phân vùng cho một hệ thống cứu hộ nhỏ và một phân vùng lớn hơn cho hệ thống chạy bình thường.
Ví dụ về bố cục phân vùng
| Mục đích | loại | phân vùng |
|---|---|---|
| trang 1 | FAT32 | /boot_A (hạt nhân, cmdline, bộ nạp khởi động) |
| trang 2 | máy lẻ 4 | rootfs A |
| trang 3 | FAT32 | /boot_B (nhân, cmdline, bộ nạp khởi động cho hệ thống cứu hộ) |
| trang 4 | máy lẻ 4 | rootfs_B |
| trang 5 | máy lẻ 4 | Dữ liệu / Cấu hình |
Ví dụ thực tế
Thiết lập này được minh họa trong hai rpi-image-gendự án ví dụ:
- 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
Cái đầu tiên tạo ra hệ thống cứu hộ và cái thứ hai kết hợp hệ thống cứu hộ với một hệ thống chạy khác, điều chỉnh nhãn phân vùng theo cmdline.txt và fstab.
Quản lý cập nhật
Bạn có thể gắn phân vùng hệ thống không hoạt động theo cách thủ công để cập nhật cấu hình, ứng dụng hoặc thành phần hệ thống.
Đối với các hệ thống sản xuất, các bản cập nhật thường được quản lý thông qua SWUpdate, tự động hóa quy trình này một cách an toàn.
Tích hợp với SWUpdate
SWUpdate hỗ trợ các chiến lược cập nhật gốc kép (A/B).
Phân vùng và logic cập nhật được xác định trực tiếp trong tệp sw-description .
Cách tiếp cận này đảm bảo cập nhật hệ thống nguyên tử với tính năng an toàn khôi phục tích hợp — một tính năng thiết yếu cho các thiết bị không có đầu hoặc từ xa, nơi không thể khôi phục thủ công.
Các bài viết trong loạt bài này
- Xây dựng một Linux sẵn sàng sản xuất cho Raspberry Pi Compute Module 5
- Từ hệ điều hành chứng khoán đến nền tảng sản xuất
- Tùy chỉnh Raspberry Pi OS với rpi-image-gen
- Tính mạnh mẽ của hệ thống — Thiết kế bố cục hệ thống tệp gốc A / B
- Provisioning — Tự động hóa lần khởi động đầu tiên với rpi-sb-provisioner
- OTA và Lifecycle — Cập nhật phần mềm với SWUpdate
Nguồn
- 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