какую файловую систему поддерживает андроид
Оптимальный формат для форматирования карты памяти на Android
Несмотря на большое количество внутренней памяти современных Android-устройств, практически каждый смартфон поддерживает использование миниатюрной карты памяти различного объема. Для правильного чтения SD должна быть отформатирована в один из поддерживаемых форматов. В ходе настоящей статьи мы расскажем об оптимальных вариантах типа файловой системы в зависимости от информации.
Формат для форматирования карты памяти на Android
По умолчанию Android-устройства способны считывать информацию с карты памяти лишь в нескольких форматах, в то время как другие типы файловой системы будут проигнорированы. Узнать о поддержке можно прямо во время использования стандартных средств форматирования из второго раздела статьи. При этом если флешка используется для определенных целей, обязательно стоит изучить преимущества каждого поддерживаемого формата.
Оптимальный формат при форматировании
В настоящее время телефоны на платформе Андроид способны работать с картой памяти в одном из четырех основных форматов, так же поддерживаемых большинством других устройств, включая ПК. К числу подобных типов файловой системы относится:
Каждый формат позволяет хранить практически любые файлы, но при этом имеет ряд преимуществ и ограничений.
Данный тип файловой системы является наиболее устаревшим и в настоящее время практически не используется на устройствах. В частности это связано с объемом сохраняемых файлов, ограниченных не более чем 2 ГБ, недостаточными даже для хранения графики. Поэтому, если размер флешки превышает указанное значение, у вас как минимум не получится его использовать.
Несмотря на недостатки, если накопитель имеет меньший объем нежели 2 ГБ и используется для хранения малого количества информации, можете выбрать формат FAT. Однако перед этим все же обратите внимание на следующий тип файловой системы.
FAT32
Настоящий формат является улучшенной версией предыдущего варианта и пользуется наибольшей популярностью не только среди пользователей мобильных устройств, но и как тип файловой системы для USB-накопителей. Если отформатировать флешку в данном формате, будет гарантирована поддержка как на любом смартфоне, так и на компьютерах и прочих мультимедийных устройствах.
Общий объем накопителя для доступа к формату не ограничен и может достигать более чем 100 ГБ, но при этом размер каждого обрабатываемого файла по отдельности не должен превышать 4 ГБ. Это существенный объем данных, и на телефонах такие файлы встречаются редко. Однако все же существует вероятность возникновения проблем, например, при сохранении файлов кэша или видеозаписей, каждый из которых может занимать значительно больше места в памяти.
exFAT
Предпоследним типом файловой системы, доступным на платформе Android, является exFAT, не имеющий ограничений, свойственных предыдущим форматам. Именно данный вариант стоит выбрать для карты памяти большого размера и с целью сделать флешку основным хранилищем информации, включая системный кэш и мультимедиа.
Единственная проблема, связанная с exFAT, заключается в совместимости. Этот формат может иметь ряд проблем с поддержкой некоторыми мультимедийными устройствами и старыми моделями смартфонов. При этом на современных девайсах файловая система позволит обрабатывать информацию с максимально возможной скоростью.
NTFS
Для пользователей ПК данный формат является наиболее известным, так как именно такой тип файловой системы используется на диске с Windows. Основные преимущества NTFS заключаются в отсутствии ограничений на размеры файлов, объем накопителя, скорость обработки информации и в надежности.
Как и в случае с exFAT, формат NTFS поддерживается далеко не всеми устройствами, что вполне может стать основной проблемой. Выбирать его следует только, если устройство наверняка сможет прочитать информацию с такой флешки.
Форматирование и устранение проблем
Каждое Android-устройство, как было сказано ранее, предоставляет средства для форматирования карты памяти. Это достаточно важный нюанс, так как до записи файлов на флешку лучше всего произвести изменение формата на смартфоне, а не на ПК или других устройствах. В противном случае при подключении карты памяти к смартфону может возникнуть сообщение с требованием выполнить форматирование, несмотря на наличие поддерживаемого типа файловой системы.
Какой бы тип файловой системы не был выбран, можно будет без проблем качать файлы, сохранять мультимедиа и прочую информацию. При этом единственным универсальным форматом является FAT32, когда как другие варианты подойдут лишь для некоторых устройств и конкретных целей.
Помимо этой статьи, на сайте еще 12378 инструкций.
Добавьте сайт Lumpics.ru в закладки (CTRL+D) и мы точно еще пригодимся вам.
Отблагодарите автора, поделитесь статьей в социальных сетях.
В каком формате форматировать флешку для Андроид – расширяем возможности карты памяти
Многие пользователи ошибочно считают, что форматирование флешки – это процедура удаления данных с цифрового носителя. На самом деле у этой операции более широкое назначение, которое идентично форматированию жёсткого диска. И если, как это часто бывает, не обращать на это внимания, то такая беспечность может негативно сказаться на работе карты памяти. Вот поэтому мы и решили разобрать тему, в каком формате форматировать флешку для Андроид
SD-карты имеются практически в каждом Андроид-устройстве. И это вполне объяснимо – не совсем логично хранить весь имеющийся контент на внутреннем накопителе, тем более, объём внутренней памяти, у большинства девайсов очень небольшой, а вот с помощью флешки память устройства можно увеличить от двух до 32 гигибайт и даже больше, дело только в вашем желании и финансовых возможностях.
Правда, нередки случаи, когда Android-устройство начинает некорректно работать с картой памяти из-за возникновения различных проблем, избавиться от которых можно процедурой форматирования карты памяти.
Что такое форматирование флешки
Под форматированием карты памяти нужно понимать процедуру обработки любого цифрового накопителя данных (информации). Цель этой процедуры – упорядочение или полное изменение структуры накопителя.
Как было сказано выше, форматировать можно все носители информации, будь то винчестеры, USB flash-карты или Эс-Ди карты памяти.
С другой стороны, в процессе форматирования система обнаруживает и исправляет повреждённые фрагменты структуры.
В какой формат форматировать флешку для Андроид
Существует несколько типов файловых систем, например, NTFS, FAT, FAT32, exFAT и др. Все они имеют как свои плюсы, так и минусы. Об этом давайте поподробнее.
Большинство устройств с ОС Android поддерживает FAT32. Основными достоинствами этой системы можно назвать хорошую скорость работы и совместимость. Например, в бытовом DVD-плеере, фотопринтере или медиапроигрывателе, если вставить такой накопитель, все файлы будут доступны и нормально читаться.
Ещё одна файловая система, предназначенная для flash-накопителей – exFAT. Она создана относительно недавно той же Microsoft и по-моему, это идеальный вариант и для флешек и для карт памяти, поскольку представляет собой ФС FAT32, в которой сняты ограничения. То есть, размер файлов, а так же разделов в ней может быть любых величин, а количество файлов, хранящихся в одной папке, практически не ограничено.
* Примечание : для некоторых бытовых приборов и компьютеров на Windows XP этот формат неактуален.
Современной и надёжной считается NTFS – файловая система, заменившая в современных ПК, описанную выше, FAT32. Безусловным плюсом NTFS можно назвать и обеспечение более высокого уровня безопасности информации.
На что нужно обратить внимание – это размер скачиваемых файлов. Дело в том, что, в FAT32 размер файла ограничен до 4 Гбайт, поэтому при скачивании фильма или любого приложения большего размера, система будет выдавать ошибку «Недостаточно места в памяти устройства», хотя на самом деле места ещё предостаточно:
Что нужно сделать, чтобы Андроид увидел флешку
Итак, чтобы ваш смартфон Android видел флешку, нам нужно поменять на ней формат. Для этого существует несколько способов, о которых читайте дальше.
С помощью функций ОС устройства
На некоторых телефонах есть возможность беспроблемно поменять файловую систему. Для этого, через основные «Настройки» открываем раздел «Память». Находим пункт «Настройки памяти», затем строку «Форматировать карту памяти», открываем и меняем файловую систему с FAT32 на NTFS. Теперь можно нажать «ОК» и дождаться завершения процесса.
Далеко не во всех моделях Андроид устройств есть инструмент, позволяющий изменить файловую систему. В таком случае воспользуемся инструментами ПК.
С помощью компьютера
В ОС Windows функция форматирования стандартна и особых сложностей не представляет. Итак, подключаем своё устройство Андроид к компьютеру с помощью USB-кабеля, не забываем включить отладку по USB:
Теперь на ПК нажимаем “Пуск”, далее “Компьютер” (или “Мой компьютер”). Среди отображённых дисков находим съёмный носитель своего устройства, на скриншоте это диск “Е”, я назвала его MAIN, чтобы не спутать с внутренней памятью телефона, так как, по умолчанию оба этих диска будут называться “съёмный носитель”, отличаясь лишь литерой (“Е”, “F” или как-то иначе). Щёлкаем правой кнопкой мыши по диску “Е”, в выпавшем списке действий выбираем “Форматировать”:
В открывшемся окне нажимаем стрелку в поле с текущим форматом FAT32 и выбираем формат NTFS. Затем активируем кнопку “Начать”:
Если вы выбрали для своего флеш-накопителя формат exFAT, то, руководствуясь действием, отображённым выше на снимке экрана, вместо FAT32 выберите не NTFS, а exFAT.
С помощью функции convert
Этот способ позволяет выполнить процедуру преобразования файловой системы без потери данных на флеш-накопителе. И, тем не менее, мой совет – на всякий случай позаботиться о сохранении информации. Итак.
Подключаем смартфон к ПК, как указано выше. Не забываем активировать отладку по USB. На ПК, в левом нижнем углу жмём на кнопку «Пуск», в поиске вводим «cmd», по завершении поиска программы, нажимаем клавишу «Enter»:
Теперь, в открывшемся окне командной строки вводим convert E: /fs:ntfs, где «Е» – литера съёмного диска (SD-карты), который будет подвергнут процедуре форматирования:
Поле командной строки может выглядеть иначе (в зависимости от операционной системы), что не меняет применяемые действия:
Есть и другой путь добраться до командной строки: На компьютере нажимаем «Пуск», затем «Все программы», внизу списка выбираем «Стандартные», находим пункт «Командная строка», щёлкаем по нему правой кнопкой мыши. Из появившегося списка открываем «Запуск от имени администратора». На запрос программы о внесении изменений, отвечаем утвердительно, после чего можно будет вносить изменения, как описано выше.
* Примечание :
Мы рассказали, в какой формат форматировать флешку для Андроид в целях изменения файловой системы. Но, как было сказано выше, процедуру форматирования можно применять и для очистки карты памяти. Об этом читаем здесь.
Файловые системы Android
Файловая система представляет собой своего рода структуру того или иного накопителя. Она отвечает за то, какой максимальный объем файла можно сохранить в памяти, длину их названий, а также за организацию циклов записи или чтения. Файловые системы выступают в роли посредников между программным кодом и физическим вместилищем.
Для разных операционных систем и типов устройств существуют отдельные ФС и гаджеты на ОС Android, не являются исключением. Давайте разберемся, какие файловые системы поддерживает Android и для каких целей используется каждая из них?
Файловые системы Android
1. Yaffs и Yaffs2
Создателем файловой системы Yaffs (Yet Another Flash File System) является Чарльз Мэннинг, родом из Новой Зеландии. Данная ФС предназначается для организации работы флеш-накопителей и оперативной памяти. Основным ее преимуществом является повышение сроков эксплуатации модулей памяти, так как система автоматически пропускает ячейки, предназначенный для однократной записи. Yaffs2 использовалась для организации работы внутренней памяти гаджетов Android версии 2.2 и 2.3.
2. VFAT
Vfat не является полноценной самостоятельной файловой системой, а представляет собой расширение FAT. Доработанная версия позволяет сохранять файлы с длинными именами, но по всем остальным характеристикам является морально устаревшей. Vfat может использоваться на картах памяти, а операционные системы на базе ОС Андроид полностью их поддерживают. В основном, это файловая система флешки android.
3. F2FS
F2FS (Flash Friendly File System) – файловая система, которая предназначена в первую очередь на работу с флеш-памятью и SSD-накопителями. Разработал ее сотрудник компании Samsung, Ким Чэ Гык, а после публикации исходного кода она была доработана другими инженерами компании. F2FS может использоваться на картах памяти SD/MMC, а также со множеством других типов памяти. Для полноценной кастомизации существует целый набор утилит. Из преимуществ можно отметить хорошую гибкость в настройке, высокие показатели сохранения жизненного цикла блоков памяти, а также хранение данных в виде журнала. Хорошую скорость работы обеспечивает то, что индексы данных сохраняются в оперативную память, а поддержка F2FS включена в ядро Linux, начиная с версии 3.8.
4. Ext2-Ext4
Ext2-Ext4 – основные файловые системы Android. Именно они используются для организации работы внутреннего хранилища на большинстве современных гаджетов, и если первые устройства работали под версиями Ext2, то начиная с версии Android 4, основными стали Ext3, а потом и Ext4. Основное отличие между вариациями заключается в наличие журналирования. То есть, если в процессе записи или чтения данных происходит системный сбой, например, неожиданное отключение питания, не произойдет потери или повреждения данных. Несмотря на то, что в основном ФС формата Ext используется в основном в блочных накопителях, пользователи могут установить данный тип и для карт памяти, но без сторонних утилит получить к ним доступ из операционных систем, помимо Linux, будет невозможно. Файловая система флэшки Android обычно форматируются в FAT (VFAT) или NTFS, а флеш-память — в Ext3 или Ext4.
5. UBIFS
UBIFS – файловая система, предназначенная исключительно для памяти по типу NAND (флеш-накопители, применяемые на мобильных устройствах). Ее основное преимущество — это снижение износа носителей данных. Состоит такая ФС из двух слоев — UBI (отвечает за работу и связь с физическим носителем) и UBIFS (сама файловая система). Разработчиком UBIFS является компания Nokia, но встретить подобную файловую систему можно не только на оригинальных устройствах от данного производителя, но и на других гаджетах, например, китайского изготовления.
6. Samsung RFS
Samsung RFS – разработанная корейской компанией Samsung файловая система для устройств на базе ОС Linux, а одной из разновидностей последнего является Android. Предназначается фирменная ФС для флеш-памяти NAND и используется во многих гаджетах собственного производства. Для облегчения работы с файлами используется таблица формата FAT, что позволяет максимально просто произвести запись файлов на флэш-память и их чтение. Специфика RFS учитывает особенности NAND накопителей, что позволяет увеличить длительность их эксплуатации, а также снизить вероятность потери данных при системных сбоях и случайных отключениях питания.
7. SDCardFS
Компания Google долгое время использовала в своих устройствах файловую систему FUSE, но она имела ряд недостатков, среди которых необходимо отметить малое количество памяти, выделяемой под приложения под приложения, а также большое потребление хранилища при кэшировнии данных. На замену FUSE пришла SDCardFS, которая решала эти проблемы, но представляла собой своего рода оболочку, эмулирующую FAT32. Она отправляет данные файловым системам нижнего уровня, что позволяет оптимизировать работу смартфонов, а также исправляет ошибки, связанные с передачей данных на компьютер и обратно. SDCardFS по своей сути не является классической файловой системой, но значительно сказывается на скорости работы смартфонов или планшетов на Android.
Выводы
Файловые системы Android самые разнообразные. Среди них есть как общие ФС, предназначенные для работы с ОС на базе Linux, так и специфические, которые используются в NAND-накопителях. Несмотря на такое разнообразие, производители все же прикладывают совместные усилия для продвижения и улучшения той или иной файловой системы, так как именно от работы внутренних составляющих зависит будущее рынка Android-гаджетов.
Стоит также отметить тот факт, что над улучшением различных файловых систем могут одновременно работать конкурирующие концерны, и именно такое объединение заставляет цифровые технологии развиваться, независимо от того, насколько яростна борьба на потребительском рынке. И только производители смартфонов определяют, какая файловая система на Android работает лучше при тех или иных обстоятельствах.
Выбор формата файловой системы для Android
Карты памяти используются практически в каждом устройстве на операционной системе Android. И несмотря на то что в новейших моделях наблюдается тенденция к постепенному отказу от их использования за счёт увеличения объёма внутреннего накопителя, они по-прежнему продолжают отстаиваться весьма популярными. Они занимают минимум места, позволяют многократно перезаписывать данные, а также обладают высокой скоростью обмена информации.
Верно подобранный формат при форматировании флешки повысит стабильность работы Android-устройства.
Время от времени возникает потребность форматировать флешку на вашем устройстве. Причины могут быть разными — какая-то неисправность, медленная работа, появление ошибок записи или чтения либо же просто вам нужно подготовить аксессуар для работы на новом устройстве. В этот момент у многих возникают вопросы, какая файловая система наиболее лучшим образом подойдёт вашему девайсу. Если форматировать карточку памяти прямо на устройстве, все параметры подбираются автоматически, то при форматировании через компьютер доступно четыре формата, которые можно выбрать из списка.
Давайте разберёмся, чем они отличаются друг от друга, и выясним, какой формат карты памяти является наиболее подходящим для вашего Android-устройства, ведь от правильного выбора будет зависеть стабильность работы смартфона или планшета.
Выбор файловой системы
Самый старый вариант файловой системы. Сегодня практически не используется, так как уже морально устарел. Имеет множество ограничений, например, максимальный объём носителя, который можно использовать — 2 гигабайта. Сегодня такие флешки практически никто не использует, так как на них толком ничего не запишешь. Чего говорить, если занимаемое некоторыми играми пространство может достигать 4–5 гигабайт. Поэтому сразу же отбрасываем этот вариант. Новейшие версии Windows даже не предлагают его.
FAT32
Весьма популярный в наше время формат файловой системы. Такая флэшка может использоваться во множестве устройств, включая бытовые DVD-проигрыватели, телевизионные приставки, фотопринтеры, фото- и видеокамеры, и многие другие. По большому счёту, на сегодняшний день это наиболее совместимый формат. Каковы его технические особенности?
exFAT
Самая современный формат, используемый по умолчанию в большинстве новых мобильных гаджетов. По большому счёту, объединяет в себе все лучшие стороны FAT32 — высокую скорость работы, минимальные требования к оборудованию — отсутствие ограничений на количество файлов и количество записываемых данных, а также высокую защищённости и надёжность. При использовании современного смартфона или планшета лучше отдать предпочтение именно ему.
Выводы
Выбирая между FAT32 и exFAT, ориентируйтесь на объём и класс вашей флешки, а также год выпуска девайса. Если объём карточки памяти — до 4 ГБ, можно спокойно форматировать её в FAT32. Если больше — лучше exFAT. Если вы боитесь ошибиться, форматируйте флешку прямо на девайсе Android. Этой теме посвящена вот эта статья на нашем сайте. В комментариях пишите нам о том, какой тип файловой системы вы выбираете при форматировании флешки для вашего Андроид-устройства.
Как работает Android, часть 4
Всем привет! Мы нашли время продолжить серию статей про внутреннее устройство Android. В этой статье я расскажу о процессе загрузки Android, о содержимом файловой системы, о том, как хранятся данные пользователя и приложений, о root-доступе, о переносимости сборок Android и о проблеме фрагментации.
Пакеты
Как я уже говорил раньше, архитектура Android построена вокруг приложений. Именно приложения играют ключевую роль в устройстве многих частей системы, именно для гармоничного взаимодействия приложений выстроена модель activity и intent’ов, именно на изоляции приложений основана модель безопасности Android. И если оркестрированием взаимодействия компонентов приложений занимается activity manager, то за установку, обновление и управление правами приложений отвечает package manager (пакетный менеджер — в shell его можно вызвать командой pm ).
Каждый APK при сборке должен быть подписан разработчиком с использованием цифровой подписи. Android проверяет наличие этой подписи при установке приложения, а при обновлении уже установленного приложения дополнительно сравнивает публичные ключи, которыми подписаны старая и новая версия; они должны совпадать, что гарантирует, что новая версия была создана тем же разработчиком, что и старая. (Если бы этой проверки не было, злоумышленник мог бы создать пакет с таким же именем, как и у существующего приложения, убедить пользователя установить его, «обновляя» приложение, и получить доступ к данным этого приложения.)
Само обновление пакета представляет собой установку его новой версии вместо старой с сохранением данных и полученных от пользователя разрешений. Можно и «откатывать» (downgrade) приложения до более старых версий, но при этом по умолчанию Android стирает сохранённые новой версией данные, поскольку старая версия может быть не способна работать с форматами данных, которые использует новая версия.
Как я уже говорил, обычно код каждого приложения выполняется под собственным Unix-пользователем (UID), что и обеспечивает их взаимную изоляцию. Несколько приложений могут явно попросить Android использовать для них общий UID, что позволит им получать прямой доступ к файлам друг друга и даже, при желании, запускаться в одном процессе.
Хотя обычно одному пакету соответствует один файл APK, Android поддерживает пакеты, состоящие из нескольких APK (это называется раздельными APK, или split APK). Это лежит в основе таких «магических» возможностей Android, как динамическая загрузка дополнительных модулей приложения (dynamic feature modules) и Instant Run в Android Studio (автоматическое обновление кода запущенного приложения без его полной переустановки и, во многих случаях, даже без перезапуска).
Файловая система
Устройство файловой системы — один из самых важных и интересных вопросов в архитектуре операционной системы, и устройство файловой системы в Android — не исключение.
Интерес представляет, во-первых, то, какие файловые системы используются, то есть в каком именно формате содержимое файлов сохраняется на условный диск (в случае Android это обычно flash-память и SD-карты) и как обеспечивается поддержка этого формата со стороны ядра системы. Ядро Linux, используемое в Android, в той или иной степени поддерживает большое количество самых разных файловых систем — от используемых в Windows FAT и NTFS и используемых в Darwin печально известной HFS+ и современной APFS — до сетевой 9pfs из Plan 9. Есть и много «родных» для Linux файловых систем — например, Btrfs и семейство ext.
Стандартом де-факто для Linux уже долгое время является ext4, используемая по умолчанию большинством популярных дистрибутивов Linux. Поэтому нет ничего неожиданного в том, что именно она и используется в Android. В некоторых сборках (и некоторыми энтузиастами) также используется F2FS (Flash-Friendly File System), оптимизированная специально для flash-памяти (впрочем, с её преимуществами всё не так однозначно).
Во-вторых, интерес представляет так называемый filesystem layout — расположение системных и пользовательских папок и файлов в файловой системе. Filesystem layout в «обычном Linux» заслуживает более подробного описания (которое можно найти, например, по этой ссылке); я упомяну здесь только несколько наиболее важных директорий:
Android использует похожий, но заметно отличающийся filesystem layout. Вот несколько самых важных из его частей:
Суффикс в названии папок приложений — 16 случайных байт, закодированных в Base64. Использование такого суффикса не позволяет другим приложениям «угадать» путь к приложению, о существовании которого им знать не следует. В принципе, список установленных на устройстве приложений и путей к ним не является секретом — его можно получить через стандартные API — но в некоторых случаях (а именно, для Instant apps) на доступ к этим данным накладываются ограничения.
Для хранения изменяемых данных каждому приложению выделяется папка в /data/data (например, /data/data/com.google.android.youtube для YouTube). Доступ к этой папке есть только у самого приложения — то есть только у UID, под которым запускается это приложение (если приложение использует несколько UID, или несколько приложений используют общий UID, всё может быть сложнее). В этой папке приложения сохраняют настройки, кэш (в подпапках shared_prefs и cache соответственно) и любые другие нужные им данные:
Система знает о существовании папки cache и может очищать её самостоятельно при нехватке места. При удалении приложения вся папка этого приложения полностью удаляется, и приложение не оставляет за собой следов. Альтернативно, и то, и другое пользователь может явно сделать в настройках:
Это выделяемое каждому приложению хранилище данных называется внутренним хранилищем (internal storage).
Кроме того, в Android есть и другой тип хранилища — так называемое внешнее хранилище (external storage — это название отражает изначальную задумку о том, что внешнее хранилище должно было располагаться на вставляемой в телефон внешней SD-карте). По сути, внешнее хранилище играет роль домашней папки пользователя — именно там располагаются такие папки, как Documents, Download, Music и Pictures, именно внешнее хранилище открывают файловые менеджеры в качестве папки по умолчанию, именно к содержимому внешнего хранилища Android позволяет получить доступ компьютеру при подключении по кабелю.
Как я упомянул выше, исходно предполагалось, что внешнее хранилище действительно будет располагаться на внешней SD-карте, поскольку в то время объём SD-карт значительно превышал объём встраиваемой в телефоны памяти (в том же самом HTC Dream её было лишь 256 мегабайта, из которых на раздел data выделялось порядка 90 мегабайт). С тех пор многие условия изменились; в современных телефонах часто нет слота для SD-карты, зато устанавливается огромное по мобильным меркам количество встроенной памяти (например, в Samsung Galaxy Note 9 её может быть до 512 гигабайт).
С другой стороны, у многих устройств всё-таки есть слот для SD-карты. Вставленную в Android-устройство SD-карту можно использовать как обычный внешний диск (не превращая её во внутреннее или внешнее хранилище системы) — сохранять на неё файлы, открывать хранящиеся на ней файлы, использовать её для перенесения файлов на другие устройства и т.п. Кроме того, Android позволяет «заимствовать» SD-карту и разместить внутреннее и внешнее хранилище на ней (это называется заимствованным хранилищем — adopted storage). При этом система переформатирует SD-карту и шифрует её содержимое — хранящиеся на ней данные невозможно прочесть, подключив её к другому устройству.
Подробнее почитать про всё это можно, например, вот в этом посте и в официальной документации для разработчиков приложений и для создателей сборок Android.
Загрузка
Традиционный подход к безопасности компьютерных систем ограничивается тем, чтобы защищать систему от программных атак. Считается, что если у злоумышленника есть физический доступ к компьютеру, игра уже проиграна: он может получить полный доступ к любым хранящимся на нём данным. Для этого ему достаточно, например, запустить на этом компьютере произвольную контролируемую им операционную систему, позволяющую ему обойти любые накладываемые «основной» системой ограничения прав, или напрямую подключить диск с данными к другому устройству. При желании, злоумышленник может оставить компьютер в работоспособном состоянии, но пропатчить установленную на нём систему, установить произвольные бэкдоры, кейлоггеры и т.п.
Именно на защиту от программных атак ориентирована модель ограничения прав пользователей в Unix (и основанная на ней технология app sandbox в Android); само по себе ограничение прав в Unix никак не защищает систему от пользователя, пробравшегося в серверную и получившего физический доступ к компьютеру. И если серьёзные многопользовательские сервера можно и нужно охранять от неавторизованного физического доступа, к персональным компьютерам — а тем более мобильным устройствам — такой подход просто неприменим.
Пытаться улучшать ситуацию с защитой от злоумышленника, получившего физический доступ к устройству, можно по двум направлениям:
Именно с этими двумя направлениями защиты связана модель безопасной загрузки в Android.
Verified Boot
Процесс загрузки Android построен так, что он, с одной стороны, не позволяет злоумышленникам загружать на устройстве произвольную ОС, с другой стороны, может позволять пользователям устанавливать кастомизированные сборки Android (и другие системы).
Прежде всего, Android-устройства, в отличие от «десктопных» компьютеров, обычно не позволяют пользователю (или злоумышленнику) произвести загрузку со внешнего носителя; вместо этого сразу запускается установленный на устройстве bootloader (загрузчик). Bootloader — это относительно простая программа, в задачи которой (при загрузке в обыкновенном режиме) входят:
Flashing, unlocking, fastboot и recovery
Кроме того, bootloader поддерживает дополнительную функциональность для обновления и переустановки системы.
Во-первых, это возможность загрузить вместо основной системы (Android) специальную минимальную систему, называемую recovery. Версия recovery, устанавливаемая на большинство Android-устройств по умолчанию, очень минималистична и поддерживает только установку обновлений системы в автоматическом режиме, но многие энтузиасты Android устанавливают кастомную recovery.
Это делается путём использования второй «фичи» bootloader’а, направленной на обновление и переустановку системы — поддержки перезаписи (flashing) содержимого и структуры разделов по командам с подсоединённого по кабелю компьютера. Для этого bootloader способен загружаться в ещё один специальный режим, который называют fastboot mode (или иногда просто bootloader mode), поскольку обычно для общения между компьютером и bootloader’ом в этом режиме используется протокол fastboot (и соответствующий ему инструмент fastboot из Android SDK со стороны компьютера).
Некоторые реализации bootloader’а используют другие протоколы. В основном это касается устройств, выпускаемых компанией Samsung, где специальная реализация bootloader’a (Loke) общается с компьютером по собственному проприетарному протоколу (Odin). Для работы с Odin со стороны компьютера можно использовать либо реализацию от самих Samsung (которая тоже называется Odin), либо свободную реализацию под названием Heimdall.
Конкретные детали зависят от реализации bootloader’а (то есть различаются в зависимости от производителя устройства), но во многих случаях установка recovery и сборок Android, подписанных ключом производителя устройства, просто работает без дополнительных сложностей:
Таким образом можно вручную обновлять систему; а вот установить более старую версию не получится: функция, известная как защита от отката, не позволит bootloader’у загрузить более старую версию Android, чем была загружена в прошлый раз, даже если она подписана ключом производителя, поскольку загрузка старых версий открывает дорогу к использованию опубликованных уязвимостей, которые исправлены в более новых версиях.
Кроме того, многие устройства поддерживают разблокировку bootloader’а (unlocking the bootloader, также известную как OEM unlock) — отключение проверки bootloader’ом подписи системы и recovery, что позволяет устанавливать произвольные сборки того и другого (у части производителей это аннулирует гарантию). Именно так обычно устанавливаются такие популярные дистрибутивы Android, как LineageOS (бывший CyanogenMod), Paranoid Android, AOKP, OmniROM и другие.
Поскольку разблокировка bootloader’а всё-таки позволяет загрузить на устройстве собственную версию системы, в целях безопасности при разблокировке все пользовательские данные (с раздела data) принудительно удаляются. Если систему переустанавливает сам пользователь, а не злоумышленник, после переустановки он может восстановить свои данные из бэкапа (например, из облачного бэкапа на серверах Google или из бэкапа на внешнем носителе), если злоумышленник — он получит работающую систему, но не сможет украсть данные владельца устройства.
После установки предпочитаемых сборок recovery и системы bootloader стоит заблокировать обратно, чтобы снова защитить свои данные в случае попадания устройства в руки злоумышленников.
Для разблокировки bootloader’а может также потребоваться дополнительно разрешить её из настроек системы:
Популярная сторонняя recovery, которую устанавливают большинство «флешаголиков» (flashaholics) — TWRP (Team Win Recovery Project). Она содержит тач-интерфейс и множество продвинутых «фич», в том числе возможность устанавливать части системы из сборок в виде zip-архивов, встроенную поддержку бэкапов и даже полноценный эмулятор терминала с виртуальной клавиатурой:
Шифрование диска
Современные версии Android используют пофайловое шифрование данных (file-based encryption). Этот механизм основан на встроенной в ext4 поддержке шифрования, реализованной в ядре Linux (fscrypt), и позволяет системе зашифровывать различные части файловой системы различными ключами.
По умолчанию система шифрует большинство данных пользователя, расположенных на разделе data, с помощью ключа, который создаётся на основе пароля пользователя и не сохраняется на диск (credential encrypted storage). Это означает, что при загрузке система должна попросить пользователя ввести свой пароль, чтобы вычислить с его помощью ключ для расшифровки данных. Именно поэтому первый раз после включения устройства пользователя встречает требование ввести полный пароль или графический ключ, а не просто пройти аутентификацию, приложив палец к сканеру отпечатков.
В дополнение к credential encrypted storage в Android также используется device encrypted storage — шифрование ключом на основе данных, которые хранятся на устройстве (в том числе в Trusted Execution Environment). Файлы, зашифрованные таким образом, система может расшифровать до того, как пользователь введёт пароль. Это лежит в основе функции, известной как Direct Boot: система способна загружаться в некоторое работоспособное состояние и без ввода пароля; при этом приложения могут явно попросить систему сохранить (наименее приватную) часть своих данных в device encrypted storage, что позволяет им начинать выполнять свои базовые функции, не дожидаясь полной разблокировки устройства. Например, Direct Boot позволяет будильнику срабатывать и до первого ввода пароля, что особенно полезно, если устройство непредвиденно перезагружается ночью из-за временного отключения питания или сбоя системы.
Так называемый root-доступ — это возможность выполнять код от имени «пользователя root» (UID 0, также известного как суперпользователь). Напомню, что root — это специально выделенный Unix-пользователь, которому — за несколькими интересными исключениями — разрешён полный доступ ко всему в системе, и на которого не распространяются никакие ограничения прав.
Как и большинство других современных операционных систем, Android спроектирован с расчётом на то, что обыкновенному пользователю ни для чего не требуется использовать root-доступ. В отличие от более закрытых операционных систем, пользователи которых называют разрушение наложенных на них ограничений буквально «побегом из тюрьмы», в Android прямо «из коробки», без необходимости получать root-доступ и устанавливать специальные сторонние «твики», есть возможность:
Тем не менее, бывает, что root доступен пользователю:
Зачем это может быть нужно? Конечно, root-доступ полезен для отладки и исследования работы системы. Кроме того, обладая root-доступом, можно неограниченно настраивать систему, изменяя её темы, поведение и многие другие аспекты. Можно принудительно подменять код и ресурсы приложений — например, можно удалить из приложения рекламу или разблокировать его платную или скрытую функциональность. Можно устанавливать, изменять и удалять произвольные файлы, в том числе в разделе system (хотя это почти наверняка плохая идея).
С более философской точки зрения, root-доступ позволяет пользователю полностью контролировать своё устройство и свою систему — вместо того, чтобы устройство и разработчики ПО контролировали пользователя.
Проблемы root-доступа
With great power comes great responsibility.
С большими возможностями приходит и большая ответственность, и совсем не всегда эту ответственность можно доверить пользователю и приложениям. Другими словами, с root-доступом связано большое количество проблем в области безопасности и стабильности системы.
Напомню, что пользователь почти всегда взаимодействует с устройством не напрямую, а через приложения. А это значит, что и root-доступ он будет использовать в основном через приложения, которые, можно надеяться, будут добросовестно пользоваться root-доступом для хороших целей. Но если на устройстве доступен root, это, в принципе, означает, что приложения могут воспользоваться им и для нехороших целей — навредить системе, украсть ценные данные, заразить систему вирусом, установить кейлоггер и т.п.
Как я уже говорил во второй статье серии, в отличие от традиционной модели доверия программам в классическом Unix, Android рассчитан на то, что пользователь не может доверять сторонним приложениям — поэтому их и помещают в песочницу. Тем более нельзя доверять приложениям root-доступ, надеясь, что они будут использовать его только во благо. Фактически, root-доступ разрушает аккуратно выстроенную модель безопасности Android, снимая с приложений все ограничения и открывая им права на доступ ко всему в системе.
С другой стороны, и приложения не могут доверять устройству, на котором подключен root-доступ, поскольку на таком устройстве в его работу имеют возможность непредусмотренными способами вмешиваться пользователь и остальные приложения. Например, разработчики приложения, содержащего платную функциональность, естественно, не захотят, чтобы проверку совершения покупки можно было отключить. Многие приложения, работающие с особенно ценными данными — например, Google Pay (бывший Android Pay) — явно отказываются работать на устройствах с root-доступом, считая их недостаточно безопасными.
Аналогично, онлайн-игры вроде популярной Pokémon GO тоже отказываются работать на root-ованных устройствах, опасаясь, что игрок сможет с лёгкостью нарушить правила игры.
Google Play и root-доступ
Google разрешает производителям предустанавливать Google Play Store и Google Play Services только на устройства, где root-доступ отключён, тем самым делая Android более привлекательной платформой для разработчиков, которые, естественно, предпочитают вкладывать ресурсы в разработку под платформы, не позволяющие пользователям с лёгкостью вмешиваться в работу их приложений. А поскольку Play Store — наиболее известный и популярный (как среди разработчиков приложений, так и среди пользователей) магазин приложений для Android, большинство производителей предпочитают предустанавливать его на свои устройства. (Есть и исключения — например, Amazon использует собственный дистрибутив Android под названием Fire OS для своих устройств — Echo, Fire TV, Fire Phone, Kindle Fire Tablet — и не предустанавливает никаких приложений от Google). Именно поэтому root-доступ по умолчанию отключён на большинстве популярных Android-устройств.
Несмотря на ограничение для производителей, Google разрешает пользователям сборок, в которых разрешён root-доступ, самостоятельно устанавливать Google Play (обычно это делается путём установки готовых пакетов от проекта Open GApps); при этом Google требует, чтобы после установки пользователь вручную зарегистрировал устройство на специально предназначенной для этого странице регистрации.
Device manufacturers work with Google to certify that Android devices with Google apps installed are secure and will run apps correctly. To be certified, a device must pass Android compatibility tests. If you are unable to add a Google Account on your Android device, your Android device software might not have passed Android compatibility tests, or the device manufacturer has not submitted the results to Google to seek approval. As a result, your device is uncertified. This means that your device might not be secure.
If you are a User wanting to use custom ROMs on your device, please register your device by submitting your Google Services Framework Android ID below.
Ограничение доступа к root
В «обычном» Linux, как и в других Unix-системах, для получения root-доступа (с помощью команд sudo и su ) пользователю требуется ввести пароль (или свой, или пароль Unix-пользователя root, в зависимости от настройки системы и конкретной команды) или авторизоваться другим способом (например, с помощью отпечатка пальца). В дополнение к собственно авторизации это служит подтверждением того, что пользователь доверяет этой программе и согласен предоставить ей возможность воспользоваться root-доступом.
Стандартная версия команды su из Android Open Source Project не запрашивает подтверждения пользователя явно, но она доступна только Unix-пользователю shell (и самому root), что полностью отрезает приложениям возможность получать root-права. Многие сторонние реализации su позволяют любому приложению получать права суперпользователя, что, как я объяснил выше, очень плохо в плане безопасности.
Magisk
Хотя это действительно невероятно круто, нужно осознавать, что возможность использовать приложения вроде Google Pay на root-ованных устройствах несмотря на встроенные в них проверки — это не решение связанных с root-доступом проблем с безопасностью. Приложения, которым пользователь доверил root-доступ, по-прежнему могут решить вмешаться в работу системы и украсть деньги пользователя через Google Pay. Проблемы с безопасностью остаются, нам лишь удаётся закрыть на них глаза.
Magisk поддерживает systemless-ную установку готовых системных «твиков» в виде Magisk Modules, специальных пакетов для установки с использованием Magisk. В таком виде доступны, например, известный root-фреймворк Xposed и ViPER, набор продвинутых драйверов и настроек для воспроизведения звука.
SoC, драйвера и фрагментация
Системы на кристалле
Аппаратное обеспечение традиционных настольных и серверных компьютеров построено вокруг материнской платы, на которую устанавливаются такие важнейшие компоненты «харда», как центральный процессор и оперативная память, и к которой затем подключаются дополнительные платы — например, графическая и сетевая — содержащие остальные компоненты (соответственно, графический процессор и Wi-Fi адаптер).
В отличие от такой схемы, в большинстве Android-устройств используются так называемые системы на кристалле (system on a chip, SoC). Система на кристалле представляет собой набор компонентов компьютера — центральный процессор, блок оперативной памяти, порты ввода-вывода, графический процессор, LTE-, Bluetooth- и Wi-Fi-модемы и т.п. — полностью реализованных и интегрированных в рамках одного микрочипа. Такой подход позволяет не только уменьшить физический размер устройства, чтобы оно поместилось в кармане, и повысить его производительность за счёт большей локальности и лучшей интеграции между компонентами, но и значительно снизить его энергопотребление и тепловыделение, что особенно актуально для мобильных устройств, питающихся от встроенной батарейки и не имеющих систем активного охлаждения.
Но, конечно, системы на кристалле имеют и свои недостатки. Наиболее очевидный недостаток состоит в том, что такую систему нельзя «проапгрейдить», докупив, например, дополнительной оперативной памяти, как нельзя и заменить плохо работающий компонент. Это, в принципе, выгодно компаниям-производителям, поскольку побуждает людей покупать новые устройства, когда существующие морально устаревают или выходят из строя, вместо того, чтобы их точечно обновлять или ремонтировать.
О драйверах
Другой — гораздо более важный именно в контексте Android — недостаток SoC заключается в связанных с ними сложностях с драйверами. Как и в традиционных системах, основанных на отдельных платах, каждый компонент системы на кристалле — от камеры до LTE-модема — требует для работы использования специальных драйверов. Но в отличие от традиционных систем, эти драйвера обычно разрабатываются производителями систем на кристалле и специфичны для их конкретных моделей; кроме того, исходные коды таких драйверов обычно не раскрываются, да и бинарные сборки в свободный доступ производителями выкладываются совсем не всегда.
Вместо этого производитель SoC (например, Qualcomm) отдаёт готовую сборку драйверов производителям Android-устройств (например, Sony или LG), которые включают её в свою сборку Android, основанную на коде из Android Open Source Project. Так и получается, что сборка Android, предустановленная на устройстве производителем, содержит все нужные для этого устройства драйвера, а напрямую использовать сборку для одного устройства на другом невозможно.
В результате авторам сборок Android приходится прилагать отдельные усилия для поддержки каждого семейства моделей Android-устройств. Сами производители устройств совсем не всегда заинтересованы в том, чтобы выделять ресурсы на портирование своих сборок на новые версии Android. В то же время разработчикам сторонних дистрибутивов Android приходится извлекать драйвера из сборок, предустанавливаемых производителями, что связано с дополнительными сложностями и не всегда приводит к хорошему результату. У многих сторонних дистрибутивов хватает ресурсов только для поддержки наиболее популярных моделей устройств.
Фрагментация
Это приводит к проблеме, известной как фрагментация: экосистема Android состоит из большого количества различных сборок — как официальных сборок от производителей устройств, так и версий сторонних дистрибутивов. Многие из них к тому же основаны на старых версиях Android, поскольку для многих устройств обновления сборок от производителя выходят медленно или не выходят совсем.
Конечно, медленное обновление экосистемы означает, что не все пользователи получают небольшие обновления интерфейса и другие видимые пользователю улучшения, которые приносят новые версии Android. Но оно приносит и две гораздо более серьёзные проблемы.
Во-первых, страдает безопасность. Хотя современные системы используют продвинутые механизмы защиты, в них постоянно обнаруживаются новые уязвимости. Обычно эти уязвимости оперативно исправляются разработчиками, но это не помогает пользователям, если обновления системы, содержащие исправления, до них никогда не доходят.
Во-вторых, фрагментация отрицательно сказывается на разработчиках приложений под Android — страдает так называемый developer experience (DX, по аналогии с user experience/UX). В теории, несмотря на внутренние различия в драйверах и пользовательском интерфейсе разных версий и сборок Android, используемые разработчиками приложений API — Android Framework, OpenGL/Vulkan и другие — должны быть переносимы и работать одинаково. На практике это, конечно, не всегда так, и разработчикам приходится тестировать и обеспечивать работу своих приложений на множестве версий и сборок Android — на разных устройствах, разных версиях системы, сторонних дистрибутивах и так далее.
Don’t Stop Thinking About Tomorrow
Далеко не все производители Android-устройств не считают важным своевременно выпускать обновления для своих устройств. Например, Google выпускают обновления для своих линеек Nexus и Pixel одновременно с тем, как выходит новая версия Android. У многих других производителей портирование сборок Android на его новую версию занимает месяцы, но они, тем не менее, стараются выпускать ежемесячные обновления безопасности.
Кроме того, совсем не все устройства, где используется Android, построены на основе SoC. Android вполне можно установить и на обычный «десктопный» компьютер (подойдут, например, сборки от проектов Android-x86 и RemixOS). Специальная сборка Android встроена в ChromeOS, что позволяет Chromebook’ам запускать Android-приложения наряду с Linux-приложениями и веб-приложениями. Аналогичного подхода — запуска специальной сборки Android в контейнере — придерживается проект Anbox, позволяющий использовать Android-приложения на «обыкновенных» Linux-системах. (Напомню, что Android-приложения так легко переносятся на x86-архитектуры, не требуя перекомпиляции, благодаря использованию виртуальной машины Java, о чём я рассказывал во второй статье серии.)
И тем не менее, плохая переносимость сборок Android между разными устройствами и связанная с ней фрагментация экосистемы — это серьёзная проблема, затрудняющая развитие и продвижение Android как платформы.
Наиболее прямой способ бороться с фрагментацией — это всячески убеждать производителей устройств не забрасывать поддержку своих сборок Android. Как показывает практика, это работает, но работает недостаточно хорошо. Было бы гораздо лучше, если можно было бы разработать техническое решение, повышающее переносимость сборок Android и тем самым серьёзно облегчающее задачу авторов сборок и сторонних дистрибутивов.
И такое решение уже существует. В 2017 году Google анонсировали Project Treble — новую, ещё более модульную (по сравнению с уже существующим HAL, hardware abstraction layer) архитектуру взаимодействия драйверов (и остального софта, специфичного для конкретного устройства) с остальными частями системы. Treble позволяет устанавливать основную систему и драйвера, специфичные для устройства, на разные разделы файловой системы, и обновлять — или как угодно изменять — систему отдельно от установленных драйверов.
Treble в корне меняет ситуацию с медленным выпуском обновлений и плохой переносимостью сборок. Благодаря Treble устройства от семи разных компаний (Sony, Nokia, OnePlus, Oppo, Xiaomi, Essential и Vivo — а не только от самих Google) смогли участвовать в бета-программе Android Pie. Treble позволил Essential выпустить обновление до Android Pie для своего Essential Phone прямо в день выхода Android Pie. Одну и ту же сборку Android — один и тот же бинарный файл без перекомпиляции или каких-либо изменений — теперь можно запускать на любом устройстве, поддерживающем Treble, несмотря на то, что они могут быть основаны на совершенно разных SoC.
Влияние Treble действительно сложно переоценить. Java принесла возможность «write once, run everywhere» для высокоуровневого кода — в том числе и возможность запускать Android-приложения на компьютерах с практически любой архитектурой процессора. Treble — аналогичный прорыв, позволяющий использовать однажды написанную и скомпилированную сборку Android на устройствах с совершенно разными SoC. Теперь дело за производителями, которым нужно конвертировать свои драйвера в формат, совместимый с Treble. Можно надеяться, что через несколько лет проблемы с обновлениями Android-устройств исчезнут окончательно.
В следующей статье я планирую рассказать о низкоуровневом userspace Android: о процессе init, о Zygote, Binder, сервисах и props.