メインコンテンツに移動

なぜA/Bパーティショニング?

組み込みシステムでは、アップデートに失敗するとデバイスがブリックしてしまいます。A/Bレイアウトは、2つのルートファイルシステムを維持することでこれを解決します:

  • スロット A - アクティブ rootfs
  • スロットB - 次の更新のためのスタンバイrootfs

アップデートが成功すると、ブートローダは新しいスロットに切り替わります。ブートが失敗すると、最後の既知の良いバージョンにロールバックします。

このアプローチは、スロットAとスロットBが同じパーティションサイズであることを前提としています。

swupdateレスキューシステム付き

もう一つのアプローチは、小さなレスキューシステム用にパーティションを作成し、通常の実行システム用に大きなパーティションを作成することです。

パーティションレイアウト例

典型的な Raspberry Pi Compute Module 5(CM5)のレイアウトは次のようになります:
パーティションタイプ目的
p1FAT32/boot_A (カーネル、コマンドライン、ブートローダー)
p2ext4ルートファイルA
p3FAT32/boot_B (カーネル、cmdline、レスキューシステム用ブートローダ)
p4ext4rootfs_B
p5ext4データ/構成
ブートローダは、フラグ(例えば、rpi-eepromのGPIO17=1)を使って、レスキューパーティションからブートするかどうかを決定することができます。

実例

この設定は rpi-image-genつのプロジェクト例で示します:

最初のものはレスキューシステムを作成し、2番目のものはレスキューシステムを別の実行中のシステムと結合します。 cmdline.txtそして fstab.

更新の管理

非アクティブなシステムパーティションを手動でマウントして、設定、アプリケーション、またはシステムコンポーネントを更新できます。
本番システムでは、アップデートは通常 SWUpdateで管理されます。

との統合 SWUpdate

SWUpdateは、デュアルルート (A/B) 更新ストラテジーをネイティブにサポートします。
パーティションと更新ロジックは sw-descriptionファイルで直接定義されます。

このアプローチにより、ビルトインのロールバックセーフティを備えたアトミックなシステムアップデートが保証されます。