Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る
このページは Cloud Translation API によって翻訳されました。
Switch to English

仮想A / Bの概要

Androidには、A / B(シームレス)アップデートと非A / Bアップデートの2つのアップデートメカニズムがあります。コードの複雑さを軽減し、更新可能性を高めるために、Android11は2つのメカニズムを統合しています。新しい更新メカニズムである仮想A / Bは、ストレージのコストを最小限に抑えながら、すべてのデバイスにシームレスな更新をもたらすことで、両方の前任者の利点を組み合わせています。

  • 仮想A / B更新は、A / B更新のようにシームレスです。仮想A / Bの更新により、デバイスがオフラインで使用できなくなる時間を最小限に抑えることができます。
  • 仮想A / Bの更新はロールバックできます。新しいOSの起動に失敗した場合、デバイスは自動的に前のバージョンにロールバックします。
  • 仮想A / B更新は、ブートローダーによって使用されるパーティションのみを複製することにより、最小限の余分なスペースを使用します。他の更新可能なパーティションはスナップショットが作成されます。

バックグラウンド

このセクションでは、仮想A / Bをサポートするいくつかの用語とテクノロジーについて説明します。

デバイスマッパー

デバイスマッパーは、Androidでよく使用されるLinux仮想ブロックレイヤーです。動的パーティションでは、 /systemようなパーティションは階層化されたデバイスのスタックです。

  • スタックの一番下には、物理スーパーパーティションがあります(たとえば、 /dev/block/by-name/super )。
  • 真ん中にはdm-linearデバイスがあり、スーパーパーティション内のどのブロックが特定のパーティションを形成するかを指定します。これは、A / Bデバイスでは/dev/block/mapper/system_[a|b]として、非A / Bデバイスでは/dev/block/mapper/systemとして表示されます。
  • 最後に、検証済みパーティション用にdm-verityデバイスが作成されます。このデバイスは、 dm-linearデバイスのブロックが正しく署名されていることを確認します。これは/dev/block/mapper/system-verityとして表示され、 /systemマウントポイントのソースです。

これは、 /systemマウントポイントの下のスタックの図です。

システムの下のParititionスタッキング

1./systemマウントポイントの下のスタック

dm-スナップショットの概要

仮想A / Bは、ストレージデバイスの状態をスナップショットするためのデバイスマッパーモジュールであるdm-snapshot依存しています。 dm-snaphotを使用する場合、次の4つのデバイスが使用されます。

  • ベースデバイスは、スナップショットが作成されるデバイスです。このページでは、ベースデバイスは常にシステムやベンダーなどの動的パーティションです。
  • コピーオンライト(COW)デバイスは、ベースデバイスへの変更をログに記録するために使用されます。サイズは任意ですが、ベースデバイスへのすべての変更に対応できる十分な大きさである必要があります。
  • スナップショットデバイスは、 snapshotターゲットを使用して作成されます。スナップショットデバイスへの書き込みは、COWデバイスに書き込まれます。スナップショットデバイスからの読み取りアクセスされているデータがスナップショットによって変更されているかどうかに応じて、ベースデバイスまたはCOWデバイスのいずれかから読み取られます。
  • オリジンデバイスは、 snapshot-originターゲットを使用して作成されます。ベースデバイスから直接読み取ったオリジンデバイスに読み取ります。オリジンデバイスへの書き込みはベースデバイスへの直接書き込みですが、元のデータはCOWデバイスへの書き込みによってバックアップされます。

dm-snapshotのデバイスマッピング

2.dm-snapshotのデバイスマッピング