Как объединить SD карту с внутренней памятью в android Honor 6A
В Android Marshmallow появился компромисс под названием «Адаптируемое хранилище» — Adoptable Storage. Это попытка Google сделать так, чтобы и овцы остались целы, и солдаты удовлетворены.
Функция Adoptable Storage позволяет объединить пользовательский раздел во встроенной памяти с разделом на карточке в один логический том. Фактически она создает на карточке раздел ext4 или F2FS и добавляет его к пользовательскому разделу внутренней памяти. Это чисто логическая операция объединения, отдаленно напоминающая создание составного тома из нескольких физических дисков в Windows.

В процессе объединения с внутренней памятью карточка переформатируется. По умолчанию весь ее объем будет использован в объединенном томе. В таком случае файлы на карточке уже нельзя будет прочитать на другом устройстве — они будут зашифрованы уникальным ключом устройства, который хранится внутри доверенной среды исполнения.
В качестве альтернативы можно зарезервировать на карточке место под второй раздел с FAT32. Хранимые на нем файлы будут видны на всех устройствах, как прежде.
Способ разделения карточки задается либо через меню Adoptable Storage, либо через отладочный мост для Android (Android Debug Bridge — ADB). Последний вариант используется в тех случаях, когда производитель скрыл Adoptable Storage из меню, но не удалил эту функцию из прошивки. Например, она скрыта в Samsung Galaxy S7 и топовых смартфонах LG. В последнее время вообще появилась тенденция убирать Adoptable Storage из флагманских устройств. Она считается костылями для бюджетных смартфонов и планшетов, которые не комплектуются достаточным объемом встроенной Flash-памяти.
Впрочем, не маркетологам решать, как нам использовать свои устройства. Через ADB на компьютере с Windows функция Adoptable Storage включается следующим образом.
- Делаем бэкап всех данных на карточке — она будет переформатирована.
- Устанавливаем последнюю версию Java SE Development kit с сайта Oracle.
- Устанавливаем последнюю версию Android SDK Manager.
- Включаем на смартфоне отладку по USB.
- Запускаем SDK Manager и в командной строке пишем:
$ adb shell $ sm list-disks
- Записываем номер диска, под которым определяется карта памяти (обычно он выглядит как 179:160, 179:32 или подобным образом).
- Если хочешь добавить к внутренней памяти весь объем карточки, то пиши в командной строке:
$ sm partition disk: x:y private
где x:y — номер карты памяти.
- Если хочешь оставить часть для тома 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. Как её исправить.