왜 A/B 파티셔닝을 해야 하나요?
임베디드 시스템에서는 업데이트 실패로 인해 디바이스가 중단될 수 있습니다. A/B 레이아웃은 두 개의 루트 파일시스템을 유지함으로써 이 문제를 해결합니다:
- 슬롯 A - 활성 루트fs
- 슬롯 B - 다음 업데이트를 위한 대기 루트fs
업데이트가 성공하면 부트로더가 새 슬롯으로 전환됩니다. 부팅에 실패하면 마지막으로 알려진 정상 버전으로 롤백됩니다.
이 접근 방식은 슬롯 A와 슬롯 B의 파티션 크기가 동일하다는 것을 전제로 하는데, 리소스가 제한되어 있는 임베디드 시스템에서는 때때로 까다로울 수 있습니다.
또 다른 접근 방식은 작은 구조 시스템용 파티션을 만들고 일반 실행 시스템용 파티션을 더 크게 만드는 것입니다.
파티션 레이아웃 예시
| 파티션 | 유형 | 목적 |
|---|---|---|
| p1 | FAT32 | /boot_A(커널, cmdline, 부트로더) |
| 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 는 기본적으로 듀얼 루트프(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