файловая система Android

всё относительно мобильных гаджетов и приложений

Модераторы: Olej, adminn, vikos

Правила форума
Все сообщения не по теме форума будут, без каких либо уведомлений, удаляться, а их авторы - убираться из регистрации.
Язык сообщений - исключительно русский.
Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

файловая система Android

Непрочитанное сообщение Olej » 28 фев 2017, 23:09

Файловая система ОС Android
В Linux подключаемые накопители далеко не всегда монтируются автоматически. Android же ближе к пользователю, поэтому подключаемые карты памяти или USB накопители, чаще всего монтирует автоматически, но вот адрес монтирования может отличаться. Монтирование - процесс подключения раздела (части накопителя) с имеющейся на нём файловой системой в корневую файловую систему Android (или любой другой ОС на базе ядра Linux) для использования его операционной системой. В Android есть много своих разделов и разделов унаследованных от Linux. Основные разделы, которые нам нужно знать это /Boot и /system. Если вы обновляете прошивку или меняете её на неофициальную, меняются именно это разделы, в них содержится вся операционная система Android. Также существует раздел /data, который используется только после запуска ОС Андроид, в нём хранятся данные приложений. Адрес монтирования этих разделов на всех Android устройствах одинаковый. Но есть ещё один раздел, без которого было бы нельзя пользоваться Android, это раздел с точкой монтирования /sdcard. Как вы читали выше, в Android-устройстве есть физически одна микросхема ПЗУ, это наш встроенный накопитель, который поделен на разделы. Объём раздела не бесконечен, поэтому когда-нибудь свободное место в разделе может закончиться, тогда и появляются проблемы. На заре развития в Android встроенные накопители стоили намного дороже чем сегодня, поэтому в Android-устройства вставляли накопители значительно меньше по ёмкости. Названия разделов и точки их монтирования с первых версий Android не изменились. Чтобы решить проблему с нехваткой свободного места на встроенном накопителе в Android устройства добавили карту памяти, которая монтировалась как раздел /sdcard. По сути она дополняла раздел /data, чтобы можно было использовать приложения, которые занимали много места, например игры с объёмным кешем. Сегодня же встроенный накопитель имеет внушительные размеры, поэтому раздел /sdcard стали размещать на встроенном накопителе, поэтому обязательное наличие карты памяти в телефоне для работы Android не требуется. Поэтому название раздела /sdcard, сегодня не имеет ничего общего с картой памяти. Почему же вовсе не избавиться от раздела /sdcard и не оставить один раздел /data? Раздел /sdcard оставлен для совместимости, не переписывать же всю операционную систему и приложения, которые рассчитаны на использование этого раздела. Как же тогда зайти на карту памяти, какой у неё теперь адрес? Точный адрес монтирования для карты памяти не установлен, поэтому каждый производитель делает по-своему. Адрес монтирования может быть следующим sdcard, sd-ext, sdcard0, sdcard1 и другие. Почти все сторонние программы автоматически находят адрес монтирования карты памяти. Самому же можно найти любой подключённый внешний накопитель по адресу /mnt.

Многие раздел sdcard называют виртуальной картой памяти, это неправильно, физически это всего лишь ещё один раздел встроенного накопителя, исторически сохранилось название и функциональность. Термин виртуальная карта памяти только осложняет понимание и без того очень сложного вопроса. Обратите внимание, что Android умеет работать только с разделом sdcard, то есть данные сторонних приложений могут писаться только в него. Карта памяти же может использоваться только вами, для записи только ваших данных. С карты памяти сторонним приложениям разрешено только считывать файлы изменять данные они не могут, начиная с Android версии 4.4, отсюда и проблемы и не только отсюда. Сделано это в целях безопасности ваших данных. В большинстве случаев проблема нехватки места в разделе sdcard решается путём замены адреса монтирования карты памяти и раздела sdcard, естественно нужно наличие прав root пользователя, и это не всегда простая процедура. Почему же не сделать как в Windows, где все данные находятся в одном разделе? В Android вы всегда можете обновить систему, поэтому что все файлы ОС находятся в отдельном разделе system и его обновление никак не повлияет на пользовательские данные. Вы всегда можете удалить все пользовательские данные просто отформатировав раздел data, при этом система не тронется. В общих словах всё, переваривайте.

Обратите внимание внимание, что в некоторых Android устройствах объём между разделами /Data и /sdcard делится динамически, То есть если в /sdcard свободно 4 Гб, то и в дата будет 4гб, если же вы записали 2 гб, то и в каждом из разделов также записалось 2 ГБ, физически есть только один раздел /data, а раздел /sdcard является ссылкой в него. Это позволяет более эффективно использовать объём встроенного накопителя устройства. Если же вы подключаете USB-накопитель, то адрес монтирования у него скорее всего будет /mnt/usbdisk. Чтобы получить доступ к чтению разделов, к примеру внесение изменений в раздел /system необходимы права root пользователя.

Обратите внимание, что в ОС Linux файлом может быть и драйвер, и диск, и процесс, что Linux всё воспринимает как файлы, даже файловые системы. Например, если вы наберёте в эмуляторе терминала команду mount, увидите такой тип файловой системы как VFS – это виртуальная файловая система. На самом деле это обычный драйвер файловой системы, который выглядит как файл. Аналогично вы можете найти файлы блочных устройств (драйвера файловых систем встроенных, подключаемых разделов, и прочего) по адресу /dev/block.

Что делать если, у меня закончилось свободное место в разделе /data на встроенном накопителе?
Часто проблема с ошибкой типа «нет места» связана не с тем, что реально физически закончилось место, а с какой-нибудь системной ошибкой, часто проблемы с Google Play. В некоторых устройствах часто накапливается мусор, например временные файлы системной программы могут весить 500 мегабайт. Этот мусор можно удалить, для этого нужны права root пользователя. Если же раздел /data и /sdcard объединены в один, то в первую очередь нужно перенести раздел /sdcard на карту памяти В крайних случаях, когда раздел /data на устройстве меньше 2 гигабайт или даже меньше 128 мегабайт, для расширения раздела /data нужно создавать дополнительный раздел ext на карте памяти и скидывать в него частично данные из раздела sdcard, но этот метод трудно выполним и в большинстве случаев приводит к сильным глюкам.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: файловая система Android

Непрочитанное сообщение Olej » 28 фев 2017, 23:13

Файловая система Android
C другой стороны можно заметить директории, которых в Linux вообще нет. Среди них нас интересуют /data, /system, /cache, /init, /init.rc Давайте рассмотрим их назначение поподробнее.
/system Это главная директория, где хранятся неизменяемые компоненты Android системы. Если проводить аналогию, то эта папка похожа на папку C:\windows\, доступную только для чтения. Т.е. изменять данные в этой директории мы не можем. Как раз здесь можно найти директории /bin и /lib, где хранятся различные исполняемые файлы и shared libraries. Кроме того, здесь же лежат системные приложения, которые встроены в операционку и которые, по умолчанию, нельзя удалить. Содержимое этой директории формируется во время компиляции операционной системы.
/data Т.к. /system у нас доступна только для чтения, то должна быть директория где хранятся изменяемые данные. /data как раз ею и является. Например, в эту директорию в /data/app сохраняются apk файлы устанавливаемых приложений, а в /data/data хранятся их данные (эту директорию мы подробно рассматривали в прошлой статье).
/cache Это просто временное хранилище. Также в эту директорию сохраняются, а потом из неё запускаются системные обновления.

Чтобы понять, что такое /init файл и для чего нужны непонятные файлы с расширением *.rc, рассмотрим процесс загрузки системы.
...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: файловая система Android

Непрочитанное сообщение Olej » 01 мар 2017, 00:39

Как это выглядит на Bravis NB75, Android 5.1:

Код: Выделить всё

shell@elink8321_emmc:/ $ ls -l / | grep ^d                                     
lstat '//nvdata' failed: Permission denied
lstat '//protect_f' failed: Permission denied
lstat '//protect_s' failed: Permission denied
drwxr-xr-x root     root              2017-02-26 21:06 acct
drwxrwx--- system   cache             2017-02-20 17:51 cache
dr-x------ root     root              2017-02-26 21:06 config
drwxr-xr-x root     root              2017-02-26 21:06 custom
drwxrwx--x system   system            2017-02-26 21:08 data
drwxr-xr-x root     root              2017-02-26 21:07 dev
drwxrwxr-x root     system            2017-02-26 21:06 mnt
drwxrwx--x system   system            2017-02-26 21:06 persist
dr-xr-xr-x root     root              1970-01-01 02:00 proc
drwx------ root     root              2015-12-26 06:12 root
drwxr-x--- root     root              1970-01-01 02:00 sbin
drwxr-x--x root     sdcard_r          2017-02-26 21:06 storage
dr-xr-xr-x root     root              2017-02-26 21:06 sys
drwxr-xr-x root     root              1970-01-01 02:00 system

Код: Выделить всё

shell@elink8321_emmc:/ $ df
Filesystem               Size     Used     Free   Blksize
/dev                   481.0M    76.0K   480.9M   4096
/sys/fs/cgroup         481.0M    12.0K   480.9M   4096
/mnt/asec              481.0M     0.0K   481.0M   4096
/mnt/obb               481.0M     0.0K   481.0M   4096
/mnt/media_rw          481.0M     0.0K   481.0M   4096
/storage/usbotg        481.0M     0.0K   481.0M   4096
/storage/emulated      481.0M     0.0K   481.0M   4096
/system                  1.7G     1.3G   412.7M   4096
/data                    4.7G     3.2G     1.5G   4096
/cache                 387.4M   708.0K   386.8M   4096
/protect_f               5.8M    56.0K     5.8M   4096
/protect_s               5.8M    52.0K     5.8M   4096
/nvdata                 27.5M     1.2M    26.3M   4096
/mnt/cd-rom              1.2M     1.2M     0.0K   2048
/mnt/shell/emulated      4.7G     3.2G     1.5G   4096
/mnt/media_rw/sdcard1     3.8G     1.0G     2.7G   32768
/storage/sdcard1         3.8G     1.0G     2.7G   32768

Код: Выделить всё

shell@elink8321_emmc:/ $ ls -l /mnt
drwxr-xr-x root     system            2017-02-26 21:06 asec
dr-xr-xr-x root     root              2012-03-12 09:30 cd-rom
drwxr-xr-x system   system            2017-02-26 21:06 media_rw
drwxr-xr-x root     system            2017-02-26 21:06 obb
lrwxrwxrwx root     root              2017-02-26 21:06 sdcard -> /storage/emulated/legacy
lrwxrwxrwx root     root              2017-02-26 21:06 sdcard2 -> /storage/sdcard1
drwx------ root     root              2017-02-26 21:06 secure
drwxr-x--- shell    sdcard_r          2017-02-26 21:06 shell

Код: Выделить всё

shell@elink8321_emmc:/ $ mount | grep /dev/block                               
/dev/block/platform/mtk-msdc.0/by-name/system /system ext4 ro,seclabel,relatime,data=ordered 0 0
/dev/block/platform/mtk-msdc.0/by-name/userdata /data ext4 rw,seclabel,nosuid,nodev,noatime,discard,noauto_da_alloc,resuid=10010,data=ordered 0 0
/dev/block/platform/mtk-msdc.0/by-name/cache /cache ext4 rw,seclabel,nosuid,nodev,noatime,discard,noauto_da_alloc,data=ordered 0 0
/dev/block/platform/mtk-msdc.0/by-name/protect1 /protect_f ext4 rw,seclabel,nosuid,nodev,noatime,nodelalloc,noauto_da_alloc,commit=1,data=ordered 0 0
/dev/block/platform/mtk-msdc.0/by-name/protect2 /protect_s ext4 rw,seclabel,nosuid,nodev,noatime,nodelalloc,noauto_da_alloc,commit=1,data=ordered 0 0
/dev/block/platform/mtk-msdc.0/by-name/nvdata /nvdata ext4 rw,seclabel,nosuid,nodev,noatime,discard,noauto_da_alloc,data=ordered 0 0
/dev/block/loop0 /mnt/cd-rom iso9660 ro,relatime 0 0
/dev/block/vold/179:129 /mnt/media_rw/sdcard1 vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1023,gid=1023,fmask=0007,dmask=0007,allow_utime=0020,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0

Ответить

Вернуться в «Android»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя