ブロックベースの OTA

Android 5.0 を搭載する新しいデバイスでは、ブロックベースの無線(OTA)アップデートを有効にできます。OTA とは、OEM がリモートでデバイスの system パーティションをアップデートするメカニズムです。

  • Android 5.0 以降のバージョンはブロック OTA アップデートを使用して、各デバイスが完全に同じパーティションを使用するようにします。個々のファイルを比較してバイナリパッチを算出する代わりに、ブロック OTA はパーティション全体を 1 つのファイルとして処理して 1 つのバイナリパッチを算出し、結果としてパーティションに完全に意図したとおりのデータを含むようにします。これにより、fastboot や OTA を使用してデバイスのシステム イメージを同じ状態にできます。
  • Android 4.4 以前のバージョンではファイル OTA アップデートを使用していました。これにより、デバイスに同様のファイル内容、権限、モードが含まれますが、タイムスタンプや基盤となるストレージのレイアウトなどのメタデータをアップデート メソッドに基いてデバイス間で変えることが可能でした。

ブロック OTA では各デバイスが同じパーティションを使用するため、dm-verity を使用して system パーティションに暗号署名をすることができます。 dm-verity の詳細については、確認付きブートをご覧ください。

注: dm-verity を使用する前に、稼働中のブロック OTA システムが必要です。

推奨事項

Android 5.0 以降でリリースするデバイスの場合は、工場出荷時の ROM でブロック OTA アップデートを使用します。後続の更新でブロックベース OTA を生成するには、--block オプションを ota_from_target_files に渡します。

Android 4.4 以前でリリースしたデバイスの場合は、ファイル OTA アップデートを使用します。Android 5.0 以降のフルブロック OTA を送信することでデバイスを移行することも可能ですが、増分 OTA よりも大幅に大きいフル OTA を送信する必要があるため、行わないようにしてください。

dm-verity は、Android 5.0 以降で出荷される新しいデバイスでのみサポートされるブートローダーが必要なため、既存のデバイスでは dm-verity を有効にできません

リカバリ イメージと OTA を生成するスクリプトである Android OTA システムを開発しているデベロッパーは、android-ota@googlegroups.com のメーリング リストに登録して、変更についての最新情報をチェックできます。

ファイル OTA とブロック OTA

ファイルベースの OTA では、Android はファイル システム レイヤの system パーティションの内容をファイルごとに変更しようとします。アップデートでは、ファイルを一貫した順序で書き込むことや、最終更新時刻やスーパーブロックを一貫して保つこと、ブロック デバイスの同じ場所にブロックを配置することもできません。このため、dm-verity を有効にしたデバイスではファイルベースの OTA が失敗します。OTA の試行後、デバイスは起動しません。

ブロックベースの OTA の際に、Android はデバイスに、2 つのファイルセットではなく 2 つのブロック イメージの差分を配信します。この更新では、ファイル システムの下にあるブロックレベルの対応するビルドサーバーに対して、次のいずれかの方法でデバイスビルドをチェックします。

  • フル アップデート。システム イメージ全体を簡単にコピーできるため、パッチを簡単に作成できます。ただし生成されるイメージが大きくなり、パッチの適用にコストが掛かります。
  • 増分アップデート。バイナリ差分ツールを使用すると、イメージが小さくなり、パッチ適用が簡単になりますが、パッチ自体を生成するときにメモリが大量に消費されます。

注:adb fastboot フル OTA とまったく同じビットをデバイスに配置します。したがって、フラッシュはブロック OTA と互換性があります。

未修正のシステムのアップデート

未修正の system パーティションがあり Android 5.0 を実行しているデバイスの場合、ブロック OTA のダウンロードとインストールのプロセスは、ファイル OTA の場合と同じです。ただし、OTA アップデート自体には、次のような相違点があります。

  • ダウンロード サイズ。フルブロック OTA アップデートは、フルファイル OTA アップデートとほぼ同じサイズで、増分アップデートはわずか数メガバイト大きいだけです。

    OTA サイズの比較

    図 1. Android 5.0 リリースと Android 5.1 リリース間での Nexus 6 OTA サイズの比較(ターゲット ビルドの変更により変化)

    通常、増分ブロック OTA アップデートは、増分ファイル OTA アップデートよりも大きくなります。

    • データの保存。ブロックベース OTA は、ファイルベース OTA よりも多くのデータ(ファイル メタデータ、dm-verity データ、ext4 レイアウトなど)を保持します。
    • 計算アルゴリズムの違い。ファイル OTA アップデートでは、ファイルパスが両方のビルドで同一である場合、OTA パッケージにはそのファイルのデータは含まれません。ブロック OTA アップデートでは、パッチの計算アルゴリズムの品質と、ソースシステムとターゲット システムの両方でのファイルデータのレイアウトによって、ファイルの変更はほとんどしないか、まったく行わないかを判断します。
  • フラッシュ メモリと RAM の欠陥に対する感度。ファイルが破損している場合、ファイル OTA は破損したファイルにはアクセスしない限り成功しますが、ブロック OTA は system パーティション内に破損を検出すると失敗します。

修正済みシステムのアップデート

修正済みの system パーティションがあり、Android 5.0 を実行しているデバイスの場合、次のようになります。

  • 増分ブロック OTA アップデートが失敗する。system パーティションは、adb remount または不正なソフトウェアが原因で修正される可能性があります。ファイル OTA は、ソースビルドやターゲット ビルドに含まれないファイルの追加など、パーティションへの変更を許容します。ただし、ブロック OTA はパーティションへの追加を許容しないため、フル OTA をインストールして system パーティションの変更を上書きするか、新しいシステム イメージをフラッシュして将来の OTA を有効にします。
  • 修正済みファイルを変更しようとしまたが失敗する。ファイル OTA アップデートとブロック OTA アップデートの両方で、OTA が修正済みファイルを変更しようとすると、OTA アップデートは失敗します。
  • 修正済みファイルにアクセスしようとするとエラーが発生する (dm-verity のみ)。ファイル OTA アップデートとブロック OTA アップデートの両方で、dm-verity が有効な場合に、OTA がシステムのファイル システムの修正部分にアクセスしようとすると、OTA はエラーを生成します。