воскресенье, 13 октября 2013 г.

Android: куда делась системная память?

Пользователи android часто сталкиваются с тем, что через некоторое время после после начала использования куда то девается "системная" память. Это касается и пользователей бюджетных версий смартфонов и середнячков. Редко касается только пользователей флагманов, хотя и им не помешает прочитать эту заметку. Тем более, что бюджетных аппаратов "на руках" всё-же большинство.
Когда покупаешь смартфон на android первые, не понятно, много памяти или мало для реального пользования, той что указана в спецификациях. Мой первый смартфон на android был Samsung Galaxy Gio GT-S5660. В нём 178 мегабайт "встроенной памяти". Мысли при покупке:
- Так, основные приложения уже установлены. Докупаю ещё карту памяти для мультимедии, файлов и остальных прог. А те что не смогут стать на карту, то для них и 178 метров с головой.
А через некоторое время приходит прозрение и разочарование. Но давайте обо всём по порядку. Попробуем разобраться с основными понятиями в файловой системе и как "лечить" проблему на минимальном уровне. Я сильно упрощаю материал, поэтому не ищите "неточностей" с точки зрения Computer Sense.

Операционная система android основана на Linux. Если посмотреть на неё с корня то увидим примерно следующую картину:
То-есть примерно то что и в любом линуксе. Я не буду описывать все папки, если вам это нужно - почитайте соответствующую литературу. Сейчас нас интересует "встроенная память" и "системная". Где это и что?

Сама операционная система android проинсталлирована в системную память. Это все эти файлы и папки, которые вы видите на скриншоте, за исключением пары. Про эту память производители не пишут нигде и никогда (я не видел, вы видели - покажите). Ни в одном прессрелизе или "спеках" вы не увидите "Системной памяти ХХХ МБ". Здесь находятся все системные файлы, которые мало интересуют обычного пользователя. Используя специальные утилиты её таки можно посмотреть. В Galaxy Gio её 206 мегабайт. Из всей системной памяти нас интересует одна папка /system/app.
Именно в эту папку и установлены все "предустановленные" приложения. Здесь располагаются и те программы, без которых смартфон не может нормально функционировать, например "звонилка", и всякие "синхронизаторы", и те, которые инсталлировал вендор (производитель телефона) по умолчанию. Например Youtube, какой-нибудь офис или "операторский" софт.

Теперь, где же у нас находится та самая "встроенная память" или "память пользователя". Говоря простым языком она находится в каталоге /data. Если говорить грамотно, то участок внутренней энергонезависимой памяти, доступный пользователю смонтирован в файловой системе как каталог /data, но я буду всё упрощать.
Что находится в этом каталоге? Начинающий пользователь думает что он пуст, и ему предоставлено всё пространство (в моём случае 178 МБ) в полное распоряжение.

А как бы не так! Эта папка уже после первого старта забита  каталогами с файлами.  Я опять не буду останавливаться на всех каталогах, а расскажу лишь об основных "пожирателях" места.
Первая папка это dalvik-cache. Часть android, это Dalvik Virtual Machine, собственная реализация Google виртуальной java-машины, в которой запускаются все приложения. Dalvik-кэш - это промежуточный буфер с быстрым доступом. Простым языком - сюда android cкладывает предварительно скомпилированный код программ для того, чтобы при запуске программы запустить её как можно быстрее. Причём это не зависит от расположения самой программы, хоть системная, хоть в памяти пользователя, хоть на карте памяти - dalvik-cache в одном месте в /data. На примере Galaxy Gio эта папка после первого старта занимает порядка 100-110 мегабайт. Ну и 178 мегабайт памяти для пользователя неожиданно превращаются в 60-70. Грусть-печаль. Совсем без этого кэша нельзя. В сети есть ряд инструкций, которые позволяют перенести этот кэш на внешнюю карту памяти. Конечно это немного сказывается на быстродействии, да и глюки бывают. Я этот приём описывать не буду. (Если у вас есть собственное описание этого метода, стучитесь - обменяемся ссылками)

Смотрим дальше. Папка /data/app. В неё и инсталлируются все пользовательские программы, которые не могут быть перенесены на карту памяти по каким-то причинам. Причины обычно две. Первая - виджет, программы с виджетом - не могут быть перенесены на карту по ограничениям андроида. Вторая - разработчик забил на пользователей бюджетных смартфонов.

И теперь самый главный сюрприз, из-за которого я и начал писать этот пост. Когда обновляется программа, которая была "системной", например Youtube, её apk тоже помещается в /data/app. И у нас получается следующее: В /system/app лежит, никуда не девшись старая версия программы, а в /data/app - новая. Конечно "части" программы лежат ещё и в dalvik-cache и в других кэшах и местах, но это как-бы обычно, а вот такое задвоение нам не кстати. Получается, даже если вы не ставили ни одной программы сами, через некоторое время память пользователя (/data/app) "уйдёт" на обновление "системных" программ (конечно если обновляете). Android не переместит сам этот apk в /system/app никогда.

Что делать?
Во первых нужно получить root, иначе система не позволит вам ничего записать в /system/app.
Как получить root для вашего конкретного устройства предлагаю поискать в интернете самим или полистать эту тему на 4PDA.
Рут-права - это не страшно. Зачастую пользователи конкурирующих систем представляют это как какое-то страшное злодейство, позволяющее делать неизвестно что. Например "пиратить" как с JailBreak на iOS. Для"пиратства" на андроиде всё это не нужно:) Смартфон с включенными root-правами всего лишь позволяет некоторым программам, перечень которых контролируется, всегда или временно получать право записи в системные каталоги. И всё. Как sudo на linux или "Выполнить от имени администратора" на windows. Страшно? Нет. Сейчас на некоторых прошивках-телефонах рут включается просто переключателем в настройках.
Вторым пунктом нам потребуется программа SystemCleanup
Программа "донатовая". То есть она при каждом запуске просит купить Inteks Donation Key, который идёт к нескольким программам автора, примерно за 3 доллара, но функциональности это не отнимает. Вообще программа позволяет много чего: "одексировать" программы (возможно расскажу об этом позже) на самом устройстве, чистить кеш, удалять системные приложения, делать резервные копии, и многое другое.
Рассмотрим только восстановление вселенской справедливости перенос обновлённых системных программ на своё место.

Запускаем программу и переключаемся на вкладку Apps.
 Здесь вы видите перечень установленных приложений с дополнительной информацией. Ищем приложения под которыми красным написано system+data. Это и есть наши "штрафники". Разовым тапом по строке будет показана дополнительная информация о месте, занимаемом данным приложением в разных "местах памяти". Делаем долгий тап и выбираем "Update system app" и соглашаемся с действием в дополнительном диалоговом окне. Обычно, после всех перемещений, требуется перезагрузка устройства, что программа и предложит сделать.

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

Вообще программа может делать довольно много полезных действий. Повторюсь. Например можно удалить предустановленные системные приложения, которые вам не нужны. Причём под большинством приложений есть подпись, безопасно ли его удалять. Можно перенести приложение из основной памяти на карту памяти с полных сохранением работоспособности (только если это не виджет). А можно некоторые приложения сделать "системными". Например вы освободили в системной памяти несколько мегабайт занятых ненужным операторским софтом, и при этом поставили стороннюю "звонилку". Переносить на карту памяти её не целесообразно из-за скорости или отказоустойчивости, а место во "встроенной памяти" она занимает. Долгий тап и выбираем Move app to /system/app, и ваша программа переместилась в папку /system/app, то есть стала системной (с точки зрения андроида).

На этом сегодня всё. Ещё раз: у программы есть ещё много полезных функций - изучите сами или может быть я когда-нибудь опишу. Есть более радикальные методы "расширения" пользовательской памяти, связанной с перемонтированием далвик-кэша или вообще папки  /data на карту памяти. Но они связаны с определённым риском и другими неудобствами.

А цель этого поста достигнута. Желаю удачи и держите память в тонусе:)

И посетите 2 классных ресурса:

Рулетка скинов CS GO
Уникальный сервер Майнкрафт

78 комментариев:

  1. А еще лучше перепрошить на кастомную прошивку, изначально очищенную от всяческой скверны и ереси ))))

    З.Ы. Ужасно бесят все эти маркетинговые заморочки, когда, например, размер винчестера приводят к 1000, а не 1024. Для ТБ это уже потеря почти 10% от указанной емкости!
    Когда память телефона пишут 16 Гб , хотя реально доступно только 10-12 в лучшем случае..
    И терпят же! Хотя это попахивает в лучшем случае "Введение потребителя в заблуждение" а в худшем тянет на "Обман" или "Жульничество" и требует применения соответствующих мер

    ОтветитьУдалить
    Ответы
    1. У меня сейчас на Galaxy Gio GT-S5660 стоит CM 10.1 (ну 4.2.2 андроид всё же получше стокового 2.3.6). Очень "чисто", по сравнению с тачвизом. Тем не менее сношу плеер "аполо", родную клавиатуру, почту, и часы с виджетом экрана разблокировки. А ещё всякие анимированные обои. Эта программа очень выручает.

      Удалить
    2. Это не маректинговые заморочки, а банальное невежество. 1 ТБ = 1000 ГБ. Это называется десятичная система, как 1 Кг = 1000 г, а не 1024. Для двоичной системы есть теби, гиби, меби, киби и т.д. То есть 1 ТиБ = 1024 ГиБ. Просто в РФ забили на эту проблему и не заморачиваются, считая что эти системы равнозначны.

      Удалить
    3. >>Тогда 1 байт = 10 бит?
      Откуда же вы лезете?
      Разговор идёт о приставках.

      Удалить
    4. 1 байт = 8 бит.
      какие теби гиби меби?? откуда вы лезите какие приставки ты о чем пишешь

      Удалить
  2. являюсь обладателем смартфона с размером раздела /data всего в 150 мб, так что борьба идёт за каждый мегабайт :)
    добавлю, что только перенос обновлений в /system/app мало что даёт, лучше интегрировать туда же dalvik cache всех системных приложений, так файлы /data/dalvik-cache/*.dex становятся /system/app/*.odex
    сделать можно при помощи Titanium Backup. конечно для этого нужно больше свободного места в системной памяти. плюс, обновления обычно имеют больший размер, чем оригинальные приложения.
    как справедливо замечено в конце, монтировать целиком /data на карточку может быть опасно, поэтому также пользуюсь Link2SD - можно ссылать отдельные apk, dex или so-файлы (библиотеки). рекомендую

    ОтветитьУдалить
    Ответы
    1. Да, я писал, что можно этой программой и одексировать, но это вышло за объёмы этого поста. Думаю, что напишу про одекс отдельно. Не просто как одексировать, а с ликбезом.

      Удалить
    2. Михаил, а как пользоваться программой? Можно ли там еще что нибудь переместить или очистить? Потому как, я перенес почти все приложения c system на data, кроме тех которые подписаны красным dontRemove и все равно памяти как то особо не прибавилось! Может можно еще что-то предпринять?

      Удалить
    3. Этот комментарий был удален автором.

      Удалить
    4. Наоборот нужно освобождать data, перекидыванием в system, или, если возможно - ещё лучше на карту памяти.

      Удалить
    5. Да, спасибо, Михаил, я уже разобрался! Еще такой вопросик, после перемещения не все программы работают, это не исправимо, или можно как-то исправить?

      Удалить
    6. Не работают с карты памяти программы с виджетами, любые. И большинство с автозапуском. Выше был коммент про Link2SD. Нужно смотреть в ту сторону. Может на НГ будет немного времени - постараюсь написать сам.

      Удалить
    7. Я удалила эту и др.папки когда чистила тел. И не могу теперь найти папку с рабочего окна(((что делать? они есть но как будто скрыты

      Удалить
  3. Ответы
    1. Файл-менеджер, которым вы смотрите содержимое данной папки, не обладает root-правами. Она не пуста, просто вы не видите.

      Удалить
  4. если отформатировать внутреннюю память очистится ли системная?

    ОтветитьУдалить
    Ответы
    1. До первой перезагрузки. Потом система опять заполнит далвик-кеш для всех программ.

      Удалить
  5. Повторил на Lenovo A830. Теперь сыплются ошибки в LenovoLauncher, в ContactManager.Видимо убил прошивку

    ОтветитьУдалить
    Ответы
    1. Вообщем не всё можно переносить. Тот же ContactManager так и должен быть system+data.
      Для чайников нужны подробности!

      Удалить
    2. Да, у меня клавиатура Perfect keyboard отказывается работать в "системе" только в "дата". Бывают ньюансы.

      Удалить
  6. Благодарю за пост, реально помог, прога классная! (ZTE Blade - 160 внутренней...)

    ОтветитьУдалить
  7. Бля помогите у меня на планшета android 4.2 после заброса даных встроенный накопитель пропал и вся память с него стала сестемной помогите игры некоторые не устанавливаются

    ОтветитьУдалить
    Ответы
    1. Можно подробнее, что за планшет?

      Удалить
    2. У меня пишет системная память 0.00 б свободно планшет : explay squad 9.72 3g

      Удалить
    3. Комменты с матом, по хорошему, надо удалять без суда и следствия.

      Удалить
  8. Здравствуйте. А обязательно так заморачиваться? С Root-правами, программой, переносом и тд....? Кстати по поводу переноса: у меня особенность в Samsung Galaxy S-2 Plus(!), в отличии от чуть более ранней модели S-2 (без Plus) нет возможности переноса на карту памяти (что очень странно учитывая, что более функциональная модель. а ещё внутреняя память урезана). Есть другой способ? Кстати(!): телефон почему-то не может загрузить (опять же из-за недостатка памяти) приложение в 21 Кб, хотя я удалил приложений уже на 30-50 МБ!!!!! ПОМОГИТЕ ПОЖАЛУЙСТА!!! УЖЕ КРИК ДУШИ!!!!!!!

    ОтветитьУдалить
    Ответы
    1. По-моему это простейший способ. Есть ещё программа Link2SD, но там по сложности ровно тоже самое. В чём сложность с получением рут?

      Удалить
    2. В том и дело. Из-за отсутствия памяти (хотя я удалил очень много приложений, фото, видео) я не могу установить эту программу. А ещё читая всё это у меня мозги на бекрень :)) У меня в телефоне осталось настолько мало программ и фото, что смысл использования телефона как смартфона теряется почти полностью. Ну не удалять же мне такие основные приложения как контакт или одноклассники?!!!!!

      Удалить
    3. Этот комментарий был удален автором.

      Удалить
    4. Та же беда. Все снесла. А эта прога не устанавливается, Как раз таки из-за отсутствия памяти. Подскажите как быть

      Удалить
    5. Удалить пока чтото другое, поставить системклинапп, поработать с ним, потом поставить те проги, что удалили.

      Удалить
  9. Здравствуйте!!!Я вот читаю...и ничего не понимаю..у меня есть рут права...глючит лаунчер частенько...и память пишет свободно (внутренней) 101мб...а нифига уже не установишь или обновишь...посоветуйте хоть что-то...телефон леново А820

    ОтветитьУдалить
  10. P.S:скачала Link2cd - дышать стало легче) Вопрос в том - что такое второй раздел SD? И как ее разделить(формат) ???

    ОтветитьУдалить
    Ответы
    1. Этот раздел прикидывается внутренней памятью.

      Удалить
    2. А как так сделать??? Эта же прога может разделять??

      Удалить
  11. Может ли в системной памяти быть место занятое файлами от прошлой прошивки и её приложений?

    ОтветитьУдалить
    Ответы
    1. Перед установкой новой прошивки обычно делается вайп этой области памяти, то-есть - полное удаление.

      Удалить
  12. Как проще всего отформатировать системный раздел? Через Gparted?

    ОтветитьУдалить
  13. телефон нокия 306 требует память,но телефон пуст и не однократно прошивался в салоне. помогло только на полгода... потом старая песня с памятью... что делать? для прошивки не подключается к компьютеру.

    ОтветитьУдалить
  14. Ребята, помогите пожалуйста!

    Уже замучался в конец... Прошиваюсь на новую прошивку, тупо с нуля. Даже карту чищу (прошивка Carbon) и у меня почему то занято 1.3 гига на internal storage.
    В чем может быть проблема? Гапсы я не ставил вообще, телефон Xperia SL. Смотрел в папку data - там тоже нет ничего, что могло бы занимать сходу целый гиг.
    Буду очень признателен за помощь!

    ОтветитьУдалить
    Ответы
    1. Ну во первых вы в дату с рутом смотрите или без? Если без, тогда конечно вам ничего не покажут. Ну и а сколько должна по-вашему занимать эта прошивка?

      Удалить
  15. Михаил, спасибо за полезную инфу. У меня такой же телефон Gio как и у вас, пожалуйста расскажите по подробней как вы получили рут. И вообще сейчас работает рут, а то на форуме последние пишут, что лавочку как то прикрыли.

    ОтветитьУдалить
  16. Не вразумительный совет.
    Вы пишите "Делаем долгий тап и выбираем "Update system app". При этом прилагаете скрин окошка, где надо осуществить выбор. Но ни у меня в программе ни на вашей картинке такого пункта нет. Нет и ничего похожего.
    Дайте разъяснения на этот счет.

    ОтветитьУдалить
    Ответы
    1. Ответ прост: Программа обновилась, русифицировалась... Время идёт. Жмите на "Обновить системные приложения".... И учите английский.

      Удалить
    2. нет ни одного пункта связанного с обновлением. ни на английском, ни на русском языке.
      "Жмите на "Обновить системные приложения"" - этот пункт где-то в другом меню? не для конкретного приложения, а для всех сразу?

      Удалить
  17. Благодарю, позновательно!

    Но вот не хватает у вас главного для меня пожирателя места!!!

    Нашёл тут способ найти , что место занимает. Программа Storage Analyser
    http://elims.org.ua/blog/android-osvobozhdenie-diskovogo-prostranstva/

    Вcё дело в папке дата\lost+found , судя по названию "потерянные" какие-то.
    там их тьма-тьмущая.

    По запросу "дата\lost+found" выдаёт только инглиш. по первой ссылке на андроидфорумс почитал на кривом транслейте
    и
    Если я правильно понял, эта папка хранит какие-то куски прошлых файлов, что бы "если что" как-то что-то восстановить.
    Парень там пишет, что удалил и всё ништяк. Попробую тоже всё удалить.

    ОтветитьУдалить
    Ответы
    1. Андроид этож линукс. \lost+found - стандартная папка для всяких файлов, которые потеряли точку монтирования в файловой системе. Ну примерно так. Вот в винде, если аварийно ребутнулся (в старых), она чекдиском в корне диска делает файлы вида file0001.chk, file0002.chk... или постарше папку FOUND.000 а в ней файлы. Обычно это мусор, который можно смело удалять, если вы не собираетесь смотрить в двоичном виде файлы и понимать что там такое было. В линуксе тоже самое. Обычно всё это можно смело удалять. Но у меня эта папка на смартфонах обычно пустая.

      Удалить
    2. удалил из этой папки 500мб.
      доволен, как слон)

      Удалить
  18. Этот комментарий был удален автором.

    ОтветитьУдалить
  19. Очень странный способ! Для того чтоб установить все сопутствующие приложения я очистил гараздо больше места вручную чем с помощью этих прог... Не могу понять как удалять старую версию программы. Телефон thl w100s. С 2 гигов встроенной памяти - доступно 18 МБ. На телефоне установленной не больше дюжины приложений с плей маркета . - все что можно было - перенесены на СД карту

    ОтветитьУдалить
    Ответы
    1. Остальное - далвик-кеш. Хоть само приложение и на карте.

      Удалить
    2. Добрый день,Михаил!У меня samsung Galaxy S Advance gt-i9070.И всегда забита внутреня память,на на Sd-карте занято почти 100 МБ как мне увеличить память и скачивать игры на Sd-карту

      Удалить
    3. Забыл написать fndroid 4.1.2

      Удалить
    4. Этот способ не подходит?

      Удалить
    5. проблема в том,что я даже не могу скачать это предложение памяти нет

      Удалить
    6. Максимально почистить кэш штатными средствами. Возможно - удалить пару "нужных" приложений. Может они и не нужны вообще. Или с тем, что-бы поставить их назад после.

      Удалить
    7. А вы знаите где находяться все кеши с рание установленых игр?

      Удалить
    8. Обычно 2 места, или внутренняя память, папка /android/data/ и дальше папка программы типа /com.coolgame.lenovo и в ней что-то типа /cashe или /files или такая же точно, но на карте памяти.

      Удалить
  20. У меня такая проблема.Планшет у меня Pixus,версия андроида 4.2.2.Ну просто не знаю что делать,играл у меня мой младший брат в игры,но тут планшет полностью разрядился и долго не включался,но потом через минут 15 включился,но все игры и программы которые я скачивала пропали и нигде их нету,не видно.И память планшета занята что я не могу даже маленькую игру скачать.Помогите мне пожалуйста,не знаю что делать,перезагружать пробывала..

    ОтветитьУдалить
    Ответы
    1. Скорее всего у вас проблема физическая с памятью. Вам дорога в сервисцентр. Если у них есть что-то на такую модель.

      Удалить
  21. > Вот таким нехитрым способом можно освободить несколько десятков мегабайт ценной пользовательской памяти, занятой клонами.

    у меня стало только хуже, было свободных 101 Мб, а стало 84Мб
    хорошо перед этим сделал полный бэкап CWM Recovery

    ОтветитьУдалить
  22. Странно но там нет команды "Update system app" и на вшаем скриншоте по разделу apps тоде нет такой команды. Есть только удаление

    ОтветитьУдалить
  23. может кому помогу, я освободил при помощи easy uninstall (рут не требует), удалил приложение ВК и сразу освободилось 200мб, тут же всплыло окошко от easy uninstall где писало что от проги остались следы размером 1,9 Гб(!!!) я их удалил, вк переустановил и вуаля, 2гб освободил

    ОтветитьУдалить
  24. Здавствуйте!После прошивки телефона HTC a510e до андроида 4.2.2 встроенной памяти телефона осталось всего 150 мб а было намного больше до прошивки!Что делать?Куда она делась?

    ОтветитьУдалить
  25. Просто ОГРОМНОЕ человеческое спасибо. Это работает.

    ОтветитьУдалить
  26. помогите пожалуйста,на телефоне zte blade x3 пропала(исчезла) внутренняя память,теперь без неё фотки и видео не сохраняются.незнаю что делать.

    ОтветитьУдалить
  27. Привет михайл подскажите как востоновить память на андроид?вообще ничего не качает захожу в проводник а он пустой...

    ОтветитьУдалить
  28. Рут есть и busybox тоже.... Апарат леново таб2 а7 30-нс

    ОтветитьУдалить
  29. Рут есть и busybox тоже.... Апарат леново таб2 а7 30-нс

    ОтветитьУдалить
  30. Этот комментарий был удален администратором блога.

    ОтветитьУдалить