Adoptable Storage

Android は常に外部ストレージ アクセサリ (SD カードなど) をサポートしてきましたが、これらのアクセサリは、予想される永続性と従来の外部ストレージに提供される最小限のデータ保護のため、歴史的には単純なファイル ストレージに限定されていました。 Android 6.0 では、外部ストレージ メディアを採用して内部ストレージのように機能する機能が導入されました。

外部ストレージ メディアを採用すると、一度に 1 台の Android デバイスのみで動作するようにフォーマットおよび暗号化されます。メディアはそれを採用した Android デバイスと強く結びついているため、アプリとすべてのユーザーのプライベート データの両方を安全に保存できます。

ユーザーが新しいストレージ メディア (SD カードなど) を採用可能な場所に挿入すると、Android はメディアをどのように使用するかを尋ねます。メディアをフォーマットして暗号化して採用することも、単純なファイル ストレージとしてそのまま使用し続けることもできます。導入を選択した場合、プラットフォームはプライマリ共有ストレージのコンテンツ (通常は/sdcardにマウントされる) を新しく採用したメディアに移行し、内部ストレージの貴重なスペースを解放することを提案します。 MBRの使用により 2 TB に制限される従来のストレージとは異なり、Adoptable ストレージはGPTを使用するため、ファイル ストレージの制限は ~9ZB です。

開発者がandroid:installLocation属性を通じてサポートを示した場合にのみ、アプリを採用されたストレージ メディアに配置できます。サポートされているアプリの新規インストールは、空き容量が最も多いストレージ デバイスに自動的に配置され、ユーザーは設定アプリでストレージ デバイス間でサポートされているアプリを移動できます。採用されたメディアに移動されたアプリは、メディアが取り出されている間も記憶され、メディアが再度挿入されると元に戻ります。

安全

プラットフォームは、採用されたデバイスごとに暗号化キーをランダムに生成し、Android デバイスの内部ストレージに保存します。これにより、採用されたメディアが内部ストレージと同様に安全になります。キーは、採用されたパーティション GUID に基づいて、採用されたデバイスに関連付けられます。

デバイスが内部ストレージでファイルベースの暗号化(FBE) を使用するように構成されている場合、Adoptable Storage は FBE とメタデータ暗号化の両方を使用します。それ以外の場合、導入可能なストレージはフルディスク暗号化(FDE) を使用します。

採用されたデバイスのディスク上のレイアウトは、SELinux ラベルなどを含む内部データ パーティションを厳密に反映しています。 Android デバイスでマルチユーザーがサポートされている場合、採用されたストレージ デバイスも内部と同じレベルの分離でマルチユーザーをサポートします。ストレージ。

採用されたストレージ デバイスの内容は、それを採用した Android デバイスに強く結びついているため、暗号化キーは親デバイスから抽出できてはならず、そのため、ストレージ デバイスを他の場所にマウントすることはできません。

デバイスが FBE を使用している場合、Adaptable Storage で FBE とメタデータ暗号化を構成する方法については、FBE ドキュメントとメタデータ暗号化ドキュメントを参照してください。

パフォーマンスと安定性

偶発的なデータの損失や破損を避けるために、バッテリ コンパートメント内のスロットや保護カバーの裏側など、安定した場所にある外部記憶メディアのみを採用を検討する必要があります。特に、携帯電話やタブレットに接続されている USB デバイスは、決して採用を考慮すべきではありません。一般的な例外の 1 つは、テレビ全体が安定した場所に設置されるのが一般的であるため、テレビ スタイルのデバイスに接続された外部 USB ドライブです。

ユーザーが新しいストレージ デバイスを採用すると、プラットフォームはベンチマークを実行し、そのパフォーマンスを内部ストレージと比較します。採用したデバイスが内部ストレージよりも大幅に遅い場合、プラットフォームはエクスペリエンスが低下する可能性があることをユーザーに警告します。このベンチマークは、人気のある Android アプリの実際の I/O 動作に基づいて作成されました。現在、AOSP の実装では、単一のしきい値を超えた場合にのみユーザーに警告しますが、デバイス メーカーは、カードが非常に遅い場合には採用を完全に拒否するなど、これをさらに適応させる可能性があります。

採用されたデバイスは、POSIX 権限と拡張属性 ( ext4f2fsなど) をサポートするファイル システムでフォーマットされている必要があります。最適なパフォーマンスを得るには、フラッシュ ベースのストレージ デバイスにはf2fsファイルシステムを推奨します。

定期的なアイドル メンテナンスを実行する場合、プラットフォームは内部ストレージの場合と同様に、採用されたメディアに対してFI_TRIMを発行します。現在の SD カード仕様はDISCARDコマンドをサポートしていません。ただし、カーネルは代わりにERASEコマンドに戻ります。SD カード ファームウェアは最適化の目的でこのコマンドを使用することを選択します。

テスト

Adoptable Storage が動作していることをテストするには、次の CTS テストを実行します。

cts-tradefed run commandAndExit cts-dev \
    -m CtsAppSecurityHostTestCases \
    -t android.appsecurity.cts.AdoptableHostTest

デバイスにスロットが組み込まれていない場合、または USB コネクタがアクティブな adb 接続に使用されている場合に、USB ドライブと SD カードの動作を確認するには、次のコマンドを使用します。

adb shell sm set-virtual-disk true