Google is committed to advancing racial equity for Black communities. See how.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Удобное хранилище

Android всегда поддерживал внешние устройства хранения данных (например, SD-карты), но эти аксессуары исторически ограничивались простыми файловыми хранилищами из-за их ожидаемой непостоянства и минимальной защиты данных, предлагаемой традиционным внешним хранилищам . В Android 6.0 появилась возможность использовать внешние носители в качестве внутреннего хранилища.

Когда используется внешний носитель, он форматируется и зашифровывается, чтобы работать одновременно с одним устройством Android. Поскольку носитель сильно привязан к устройству Android, на котором он был принят, он может безопасно хранить как приложения, так и личные данные для всех пользователей.

Когда пользователи вставляют новый носитель (например, SD-карту) в подходящее место, Android спрашивает их, как они хотят использовать носитель. Они могут выбрать носитель, форматировать и зашифровать его, или они могут продолжать использовать его как есть для простого хранения файлов. Если они решат принять, платформа предложит перенести основное содержимое общего хранилища (обычно монтируемое на /sdcard ) на недавно принятый носитель, освобождая ценное пространство во внутренней памяти. В отличие от традиционного хранилища, размер которого ограничен 2 ТБ из-за использования MBR , адаптируемое хранилище использует GPT и, следовательно, имеет ограничение для хранения файлов ~ 9 ЗБ.

Приложения могут быть размещены на android:installLocation носителях только в том случае, если разработчик указал поддержку через атрибут android:installLocation . Новые установки поддерживаемых приложений автоматически помещаются на запоминающее устройство с максимальным объемом свободного места, и пользователи могут перемещать поддерживаемые приложения между устройствами хранения в приложении « Настройки» . Приложения, перемещенные на принятый носитель, запоминаются при извлечении носителя и возвращаются при повторной установке носителя.

Безопасность

Платформа случайным образом генерирует ключи шифрования для каждого принятого устройства и сохраняет их во внутренней памяти устройства Android. Это фактически делает принятые носители такими же безопасными, как и внутреннее хранилище. Ключи связаны с принятыми устройствами на основе принятого GUID раздела.

Если устройство настроено на использование файлового шифрования (FBE) во внутренней памяти, то адаптируемое хранилище использует как FBE, так и шифрование метаданных . В противном случае адаптируемое хранилище использует шифрование всего диска (FDE).

Расположение на диске принятого устройства полностью соответствует внутреннему разделу данных, включая метки SELinux и т.д. место хранения.

Поскольку содержимое принятого устройства хранения сильно привязано к устройству Android, которое его адаптировало, ключи шифрования не должны извлекаться из родительского устройства, и, следовательно, устройство хранения не может быть смонтировано в другом месте.

Если ваше устройство использует FBE, см. Документацию FBE и документацию по шифрованию метаданных, чтобы узнать, как настроить FBE и шифрование метаданных в доступном хранилище.

Производительность и стабильность

Только внешние носители данных в устойчивых местах, таких как слот внутри аккумуляторного отсека или за защитной крышкой, следует рассматривать для принятия, чтобы избежать случайной потери или повреждения данных. В частности, никогда не следует рассматривать USB-устройства, подключенные к телефону или планшету. Одним из распространенных исключений является внешний USB-накопитель, подключенный к устройству в стиле телевизора, поскольку весь телевизор обычно устанавливается в стабильном месте.

Когда пользователь использует новое устройство хранения, платформа запускает тест и сравнивает его производительность с внутренним хранилищем. Если адаптированное устройство работает значительно медленнее, чем внутреннее хранилище, платформа предупреждает пользователя о возможном ухудшении работы. Этот тест был основан на фактическом поведении ввода-вывода популярных приложений Android. В настоящее время реализация AOSP будет предупреждать пользователей только о превышении одного порогового значения, но производители устройств могут адаптировать это дальше, например, полностью отклонить принятие, если карта работает очень медленно.

Принятые устройства должны быть отформатированы с файловой системой, которая поддерживает разрешения POSIX и расширенные атрибуты, такие как ext4 или f2fs . Для оптимальной производительности f2fs система f2fs рекомендуется для устройств хранения на основе флэш-памяти.

При выполнении периодического обслуживания в состоянии простоя платформа выдает FI_TRIM на принятые носители, как и на внутреннее хранилище. Текущая спецификация SD-карты не поддерживает команду DISCARD ; но ядро ​​вместо этого возвращается к команде ERASE , которую микропрограмма SD-карты может выбрать для использования в целях оптимизации.

Тестирование

Чтобы проверить работоспособность адаптируемого хранилища, запустите этот тест CTS:

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

Чтобы проверить поведение USB-накопителей и SD-карт, когда устройство не имеет встроенного слота или когда USB-разъем используется для активного подключения adb, используйте:

adb shell sm set-virtual-disk true