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