Как объединить SD карту с внутренней памятью в android Honor 6A

В Android Marshmallow появился компромисс под названием «Адаптируемое хранилище» — Adoptable Storage. Это попытка Google сделать так, чтобы и овцы остались целы, и солдаты удовлетворены.

Функция Adoptable Storage позволяет объединить пользовательский раздел во встроенной памяти с разделом на карточке в один логический том. Фактически она создает на карточке раздел ext4 или F2FS и добавляет его к пользовательскому разделу внутренней памяти. Это чисто логическая операция объединения, отдаленно напоминающая создание составного тома из нескольких физических дисков в Windows.

Меню включения Adoptable Storage

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

В качестве альтернативы можно зарезервировать на карточке место под второй раздел с FAT32. Хранимые на нем файлы будут видны на всех устройствах, как прежде.

Способ разделения карточки задается либо через меню Adoptable Storage, либо через отладочный мост для Android (Android Debug Bridge — ADB). Последний вариант используется в тех случаях, когда производитель скрыл Adoptable Storage из меню, но не удалил эту функцию из прошивки. Например, она скрыта в Samsung Galaxy S7 и топовых смартфонах LG. В последнее время вообще появилась тенденция убирать Adoptable Storage из флагманских устройств. Она считается костылями для бюджетных смартфонов и планшетов, которые не комплектуются достаточным объемом встроенной Flash-памяти.

Впрочем, не маркетологам решать, как нам использовать свои устройства. Через ADB на компьютере с Windows функция Adoptable Storage включается следующим образом.

  1. Делаем бэкап всех данных на карточке — она будет переформатирована.
  2. Устанавливаем последнюю версию Java SE Development kit с сайта Oracle.
  3. Устанавливаем последнюю версию Android SDK Manager.
  4. Включаем на смартфоне отладку по USB.
  5. Запускаем SDK Manager и в командной строке пишем:
    $ adb shell
    $ sm list-disks
  6. Записываем номер диска, под которым определяется карта памяти (обычно он выглядит как 179:160, 179:32 или подобным образом).
  7. Если хочешь добавить к внутренней памяти весь объем карточки, то пиши в командной строке:
    $ sm partition disk: x:y private

    где x:y — номер карты памяти.

  8. Если хочешь оставить часть для тома FAT32, то измени команду из п. 7 на такую:
    $ sm partition disk:x:y mixed nn

    где nn — остаток объема в процентах для тома FAT32.

Например, команда sm partition disk:179:32 mixed 20 добавит к встроенной памяти 80% объема карточки и оставит на ней том FAT32 в 1/5 ее объема.

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

Некоторые смартфоны не имеют слота для карты памяти (например, серия Nexus), но поддерживают подключение USB-Flash-носителей в режиме OTG. В таком случае флешку также можно использовать для расширения объема встроенной памяти. Делается это следующей командой:

$ adb shell sm set-force-adoptable true

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

Если с добавлением объема сменного носителя или его разбиением на разделы возникают проблемы, то сначала удали с него всю информацию о прежней логической разметке. Надежно это можно сделать с помощью линуксовой утилиты gparted, которая на компьютере с Windows запускается с загрузочного диска или в виртуальной машине.

Согласно официальной политике Google приложения могут сразу быть установлены в адаптируемое хранилище или перенесены в него, если разработчик указал это в атрибуте android:installLocation. Ирония в том, что далеко не все собственные приложения Google пока позволяют это делать. Каких-то практических лимитов у «адаптированного хранилища» в Android нет. Теоретический предел для Adoptable Storage составляет девять зеттабайт. Столько нет даже в дата-центрах, а уж карты памяти большего объема тем более не появятся в ближайшие годы.

Сама процедура шифрования при создании адаптированного хранилища выполняется с помощью dm-crypt — того же модуля ядра Linux, которым производится полнодисковое шифрование встроенной памяти смартфона . Используется алгоритм AES в режиме сцепления блоков шифртекста (CBC). Для каждого сектора генерируется отдельный вектор инициализации с солью (ESSIV). Длина свертки хеш-функции SHA составляет 256 бит, а самого ключа — 128 бит.

Такая реализация, хотя и уступает в надежности AES-XTS-256, работает гораздо быстрее и считается достаточно надежной для пользовательских устройств. Любопытный сосед вряд ли вскроет зашифрованное адаптированное хранилище за разумное время, а вот спецслужбы давно научились использовать недостатки схемы CBC. К тому же реально не все 128 бит ключа оказываются совершенно случайными. Невольное или намеренное ослабление встроенного генератора псевдослучайных чисел — самая часто встречающаяся проблема криптографии. Она затрагивает не столько гаджеты с Android, сколько все потребительские устройства в целом. Поэтому самый надежный способ обеспечения приватности — вообще не хранить конфиденциальные данные на смартфоне.

Драйверы для Honor 6A установились с приложением HiSuite.

adb shell
sm list-disks (получаем ID диска где у нас карта памяти)
sm partition disk:179:160 (если целиком) или
sm partition disk:179:160 (если целиком) или mixed XX, где XX процент от карты памяти, который забираем под память

И вот если мы идем по пути целого диска, то было до

shell@p1:/ $ sm list-disks
disk:179,64
shell@p1:/ $ sm list-volumes all
private mounted null
public:179,65 mounted 9F29-15FD
emulated mounted null

Стало после

shell@p1:/ $ sm set-force-adoptable false
shell@p1:/ $ sm list-volumes all
private:179,66 mounted 0ef3b40b-103f-4331-b0ce-92f105f8xxxx
private mounted null
emulated mounted null
emulated:179,66 unmounted null

 

Смартфоны с Android Oreo

Недавние обновления для Android немного изменили правила, но по-прежнему можно использовать этот метод с ADB. Просто начните работу с ADB по методу выше, но после ввода shell adb вам будет предложено установить определенные значения.

Введите следующие строки, чтобы разблокировать возможность форматирования карт microSD в качестве внутреннего хранилища на вашем телефоне:

G8141:/ $ sm set-force-adoptable true
G8141:/ $ sm list-disks
—  disk:179,0
G8141:/ $ sm partition disk:179,0 private
G8141:/ $ sm set-force-adoptable false
G8141:/ $ exit

При первом подключении может возникнуть ошибка Android ADB: device unauthorized. Как её исправить.