Каталог /sdcard и другие соглашения о каталогах: как устроена файловая система Android?

Я использую команду «adb shell» для доступа к LG P690 (устройство A) или Samsung Galaxy SIII (устройство B). В устройстве A также подключена карта microSD на 32 ГБ, а в устройстве B — нет. Когда из оболочки я получаю приглашение cd /sdcardи делаю, dfя получаю:

  • На устройстве A: /sdcardРазмер 14G Blksize 8192
  • На устройстве B: /sdcardРазмер 12G Blksize 4096

Это относится к внутренней памяти? На устройстве B также есть /storageкаталог, содержащий 0 байтов (что это?).

Кроме того, у обоих есть /dataкаталог, в котором, как я знаю, находятся установленные приложения. Это тоже во внутренней памяти? Как узнать, /dataна внутренней или внешней SD?

Я не понимаю, почему вызываемый каталог /sdcardбудет относиться к внутренней, а не к внешней памяти. Разве для файловой системы Android нет стандарта FHS, как для Linux?

Ответы (1)

Это две разные вещи, по крайней мере, первая зависит от а) версии Android, б) производителя и в) иногда даже рассматриваемого устройства:

  • до Android 4.0 /sdcardобычно была внешняя SD -карта , которую можно было найти
  • начиная с Android 4.0 (или даже 3.x?), это изменилось для большинства устройств и обычно становилось местом так называемой внутренней SDCard .
  • где внешняя SDCard находится с последней группой, сильно отличается. Известные мне места включают:
    • /sdcard_ext
    • /sdcard/external_sd

Что действительно где находится, вы можете проверить с помощью таких команд, как mountили df. Хотя mountбудут перечислены все смонтированные файловые системы (включая «виртуальные», такие как, например , /procи /sys), вместе с подробностями о том, откуда они были смонтированы и какие параметры были использованы, это может немного сбить с толку (по крайней мере, для новичков). Таким образом, вы, возможно, захотите использовать df, который привязан к «настоящим файловым системам»: он не показывает, откуда они монтируются, а вместо этого показывает их общее/используемое/свободное пространство, что может быть еще полезнее, чтобы выяснить, что лучше всего подходит.

Что касается /data: Да, обычно это находится во внутренней памяти, но также может зависеть от реализации. В Android 4.x «внутренняя память» и «внутренняя SDCard» часто являются «унифицированными» (т. е. «внутренняя SDCard» часто представляет собой не что иное, как каталог во внутренней памяти). Это было сделано для того, чтобы избавиться от проблемы заполненного внутреннего хранилища (теперь оно может «расширяться» во внутреннюю область SD), или полной внутренней SDCard и большого количества места на внутреннем хранилище (может «расширять» другие и наоборот -- ведь это все тот же "драйв").

Тем не менее, на устройстве B команда df показывает /data и /storage/sdcard0 как разные разделы, хотя оба имеют одинаковую емкость и показывают одинаковый объем используемого пространства. На этом устройстве /storage/sdcard0 и /storage/extSdCard, вероятно, являются внутренней и внешней SD-картами.
Мне кажется правильным. Что касается внутренней памяти/внутренней SDCard: как я уже писал, это очень сильно зависит от реализации. Рекомендуется использовать «унифицированное хранилище» (см. этот блог и расшифровку этой сессии ), но это никоим образом не применяется.