Что нужно знать об App2sd, и ext3, ext4 разделах

Опубликовано в Управление мобильными устройствами

Статья о том, чем отличаются ext3 и ext4, и как с ними работает App2sd. 

Источник. Автор перевода: Павел А. Сафронов.
От автора перевода: на сайте-источнике данный материал опубликован довольно давно (19 мая 2011 года), но общий смысл статьи от этого не меняется и основные моменты на 21 октября 2016 остаются актуальными.

Итак, почти у каждого, я думаю, в телефоне есть SD-карта (проще - "карта памяти"), как жесткий диск в любом компьютере, и каждый может "разделить" ее (разбить на два или более разделов из разных файловых систем). Обычно SD-карта имеет один раздел, занимающий весь ее объем, как правило с файловой системой FAT32, которая может хранить изображения, сообщения, почту и т.п.

Также, кроме карты памяти, которой может вовсе не быть, в телефоне существует собственное внутреннее хранилище, внутренняя память (ее еще называют "NAND"). Для Android характерно, что пользователь может устанавливать приложения только во внутреннее хранилище телефона, и не может устанавливать их на SD-карту. Поэтому, даже если в телефоне есть пустая SD-карта объемом 32Гб, а внутренняя память телефона объемом лишь 5Мб, то на такой телефон не удастся установить много приложений, не говоря уже, что с объемом 5Мб и вовсе ничего не установится.

Это сделано для того, чтобы защитить приложения от таких вещей, как пиратство - не так-то просто получить доступ к расположению прилжоений, установленных во внутренней памяти телефона (обычно просто невозможно без прав root (суперпользователя)), поэтому не получится купить приложение, скопировать его, затем вернуть его продавцу с возвратом денег, и установить его из сохраненной копии вновь. Не выйдет.

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

В Google придумали способ, чтобы устанавливать приложения на SD-карту. Для этого создается папка, что-то вроде ".android_secure", хранящая (хочется верить) зашифрованные данные приложений, но есть несколько нюансов:

  1. Приложения не устанавливаются в эту папку автоматически, их нужно вручную "переместить";
  2. Не все приложения могут быть перемещены, фактически многие не могут, и разработчики должны обновить эти приложения, сделав эту возможность доступной. Некоторые приложения не могут быть перемещены и не будут обновлены в плане доступности переноса на SD-карту, т.к. разработчики не хотят этого из каких-либо соображений.
  3. Не все данные приложений могут быть перемещены, большая часть из них - да, но некоторые данные все же хранятся во внутренней памяти, поэтому у неоторых людей свободное место телефона все равно закончится быстро.
  4. Вы можете "по умолчанию" настроить форсированный перенос ВСЕХ приложений в папку на карте памяти, но это может нарушить работу некоторых из них, таких как виджеты, которые могут не запуститься, пока SD-карта не будет "подготовлена".

До выхода Android Froyo некоторые особенно смышленые люди придумали "Apps2SD". Помните ранее говорилось, что стандартно SD-карта имеет один большой раздел с файловой системой FAT32? Итак, Apps2SD работает с картами, имеющими ДВЕ файловых системы: основную - FAT32 для хранения типовых данных (фото, документы и т.п.), и второстепенную - раздел с файловой системой EXT.  EXT это файловая система, такая же как FAT32 или NTFS, но эту файловую систему использует  операционная система Android. SD-карта по умолчанию форматируется в FAT32, потому что FAT32 универсальна, ее "увидит" любое устройство, в то время как файловую систему EXT "видит" только операционная система Linux. Но, это отступление от темы.

EXT имеет несколько версий. Наиболее часто встречающаяся - ext3. Основное отличие ext3 от ext2 - журналирование. Проще говоря, если операция (копирование, чтение, запись) будет неожиданно прервана (скажем, выключился телефон), то не должно произойти потери или повреждения данных. Когда мы включаем телефон, часто видим надпись - "Подготовка SD-карты". Подготовка занимает несколько минут, но что происходит в это время - проверка файловой системы на наличие повреждений, в то время, как файловая система FAT (без 32) не "умеет" журналировать. Если вернуться во времена, когда использовалась операционная система Windows 98, вспоминается прекрасный синий экран утилиты "Scandisk", запускавшейся каждый раз, когда работа компьютера не была завершена корректно. Здесь такая же ситуация. Затем на смену пришли ОС Windows 2000/XP с файловой системой NTFS, также с функцией журналирования, уменьшающей вероятность потери данных. Но, я вновь ушел от темы.

Итак, предположим у вас есть карта памяти с файловыми системами EXT и FAT32. В общем не имеет значения, будет EXT версией ext3 или ext4, в данном случае здесь не будет реального преимущества ext4 над ext3. Apps2SD просто запускает специальный скрипт на телефоне, который создает символьные ссылки папок, хранящихся во внутренней памяти телефона, на раздел EXT карты памяти. Символьная ссылка - это как ярлык для папки, невидимый для операционной системы. Другими словами, Android не "знает", что, устанавливая приложение во внутреннюю память телефона, оно на самом деле сохраняется на SD-карту. Это значительно расширяет внутреннюю память телефона от начальных 5Мб, приводимых в примере ранее, до того значения, каоторое було установлено для раздела EXT при форматировании карты памяти (часто 512Мб или 1Гб, зависит от того, сколько программ планируется установить).

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

Загвоздка с Apps2SD в том, что сколько бы ни занимал раздел EXT, он будет заимствоваться от SD-карты. Если у вас карта памяти объемом 4 ГБ (где-то около 3,5Гб реально доступного места) и вы сделаете на ней раздел EXT объемом 512Мб, то фактически досутпный объем SD-карты уменьшится до 3Гб. Свободное место на самом деле не потеряно, а используется файловой системой EXT. Если вы отформатируете карту вновь, то снова получите первоначальные 4 (фактические 3,5) Гб.

Наконец, есть разница между "Apps2SD" и "Apps2SD+". Помните, мы говорили, что приложения хранятся в папке на внутренней памяти телефона? Ну, я немного приврал. На самом деле они хранятся в ДВУХ местах. Существует еще одно место - так называемый Dalvik Cache (Далвик Кэш). Вам не стоит беспокоиться о том, для чего он нужен (он создается средой выполнения Java и используется для запуска приложений). Все, что вам нужно знать - приложения используют его, чтобы хранить данные, которые также занимают внутреннюю память телефона. Apps2SD+ умеет перемещать Dalvik Cache в раздел EXT SD-карты, освобождая больше места во внутренней памяти телефона. Некоторые верят, что это может быть в ущерб производительности, т.к. внутренняя память NAND должна быть быстрее, чем память SD-карты (вы могли встречать людей, споривших о том, какой "класс" SD-карты лучше для Apps2SD - смысл в том, что с более быстрой SD-картой будут меньшие потери после переноса данных), но правда такова, что приложения в любом случае запускаются из внутренней памяти, перенос не сильно влияет на производительность. Поскольку многие приложения занимают всего несколько сотен килобай в памяти или пару мегабайт, то это не проблема.

Наонец, любая актуальная версия Apps2SD/Apps2SD+ будет работать с SD-картами которые имеют, либо не имеют файловую систему EXT. При запуске происходит провека на наличие раздела с файловой системой EXT, и, в случае его отсутствия, будет использовано внутреннее хранилище телефона.

Наличие у карты памяти раздела с файловой системой EXT, но БЕЗ использования Apps2SD+ также не вызовет проблем, вы сможете отформатировать карту в любое время, когда захотите, чтобы вернуть первоначальный объем.

Заключение:

  • Apps2SD "имитирует" внутреннюю память вашего телефона и сохраняет данные в скрытый раздел на карте памяти;
  • Apps2SD+ сохраняет больше данных, освобождая больше места во внутренней памяти телефона;
  • "Froyo" Apps2SD имеет разные ограничения, отсутствующие в "старых" apps2SD , но он значитено проще в использовании, т.к. не связан ни с каким делением на разделы.