A/B パーティション (シームレスアップデート) とは?

「A/B パーティション」を 3 行で解説!

  1. Android の OS アップデートの仕組みだよ
  2. 常に起動できるシステムを保持できるというメリットがあるよ
  3. アップデートによるダウンタイムを減らせるというメリットもあるよ

Android の OS アップデートの仕組みである、A/B パーティション (シームレスアップデート) について解説します。

A/B パーティションとは。どんな仕組みなのか?

A/B パーティションは、A/B アップデートシームレスアップデートとも呼ばれます。Android システムを構成するパーティション (領域) を 1 種類のパーティションにつき 2 つのパーティションを用意します。2 つ用意されたパーティションを、それぞれ A パーティション、B パーティションもしくはスロット A、スロット B と表現します。

Android は普段、2 つある内の片方のパーティションしか使用しません。では、その A/B パーティションをどのように活用されるのかというと、アップデートの時です。

新しい OS のアップデートが配信され、ダウンロードが始まると、使用していない片方のパーティションにダウンロードされます。この間、ユーザーはデバイスを使用することができます。アップデートに必要な前処理も起動中に行われ、アップデートの準備が整うと、ユーザーに再起動を促します。

再起動すると、デバイスはアップデート済の、新しいシステムが入っている方のパーティションを使用します。アップデートが配信されるたびに、パーティションを交互に切り替えて使用するのが、A/B パーティションの仕組みです。

A/B パーティションの仕組みは初代 Google Pixel ではじめて導入されました。近年の Android デバイスは、ほぼすべてが A/B パーティションを採用しています

A/B パーティションのメリット

A/B パーティションには、メリットが盛りだくさんです。従来の A/B パーティションではないアップデート方式 (ここでは、シングルパーティションと表現します) と比較しながら、解説します。

空き容量を気にしなくて良い

シングルパーティションでは、アップデートに必要なダウンロードデータを、どこかに保存する必要性があります。そのため、ストレージの空き容量が少ない場合、アップデートをダウンロードすることができず、更新できないというシチュエーションが起きがちでした。

A/B パーティションでは、直接使用していない方のパーティションにダウンロードしたデータを書き込むため、ストレージの空き容量を気にせずダウンロードすることができます。これにより、ユーザーは空き容量を気にしなくて済みます。デバイスの開発者は、ユーザーが空き容量が足りないことを理由にアップデートをサボってしまうという問題を軽減することができます。

ダウンタイムを減らせる

シングルパーティションでは、アップデートを実行する際、リカバリがアップデートに必要な処理を行っていました。つまり、アップデートの大半の処理はデバイスを再起動している最中に行われていたのです。

A/B パーティションでは、その大半の処理をデバイスの起動中に済ますことができます。再起動の際は、使用するパーティションを切り替えるだけなので、アップデートの再起動に掛かる時間は、通常の再起動に掛かる時間とほぼ変わらないくらいになり、デバイスが使用できない時間を減らすことができます。このことから、「シームレスアップデート」という名前が来ています。

単純な比較はできないけど、iPhone の iOS アップデートと比べると、段違いで再起動が速いイメージがあるよね!

失敗したときのロールバックが容易

アップデートに失敗することも考えられるでしょう。例えば、新しい OS そのものに問題があるかもしれません。もしくはアップデート中に電源が落ちてしまうかもしれません。

シングルパーティションでは、リカバリがアップデートを済ませた後は、もう新しいバージョンのシステムしかデバイスに存在しません。何かしらの不備があってシステムが起動しなくなったり、アップデートの途中で電源が落ちてシステムが破壊されるかもしれません。この場合、もうどうすることもできません。ブートローダーがアンロックされていればユーザーが直せるでしょうが、一般ユーザーにはできません。

A/B パーティションでは、新しいシステムで何らかの問題が生じた場合、自動的に、前使用していたパーティションに切り替えます。前使用していたパーティションには、アップデートする前正しく動作していたシステムがまるごと保存されているので、切り替えるだけで復旧が終わります。

A/B パーティションの進化版、「仮想 A/B」

A/B パーティションは、アップデートが速く障害にも強いという素晴らしいものでしたが、唯一のデメリットがあります。A/B パーティションを採用しないデバイスと比較して、システムに必要な領域が 2 倍になるということです。当たり前ですが、2 つパーティションがあるということは、2 倍のストレージ領域を消費します。

このデメリットを解消すべく採用されたのが、「仮想 A/B」という仕組みです。仮想 A/B では、A/B パーティションと同様の機能を持っていながらも、物理的に 2 パーティションあるわけではありません。アップデートの時は、アップデートする前のパーティションの中身と、アップデートを適用した後のパーティションの内容の差分を作成します。アップデートに成功すると、差分は実際に元のパーティションに反映され、完全に新しいシステムに変わります。

仮想 A/B の場合、必要な領域は元となるパーティションと、差分のみとなります。これにより、A/B パーティションができることを、より少ないストレージ領域で実現しています。

「仮想 A/B」は、デバイスが動的パーティションを採用している必要があります。