Смущает множество мест виртуальной / SDCard /

46

Некоторые устройства (например, мой Nexus 4) не имеют внешнего слота для SD-карты. Вместо этого есть корневая папка, /sdcard/которая называется так же. Но я также нахожу другие пути, которые все указывают на одни и те же файлы - должны быть какие-то редиректы (я думаю, это называется символическими ссылками в Linux).

Все эти пути содержат одинаковые файлы:

/sdcard/
/storage/sdcard0/
/storage/emulated/0/
/storage/emulated/legacy/

Какой путь является «актуальным»? А как насчет других путей? Для чего они используются, почему они существуют?

Торбен Гундтофте-Бруун
источник

Ответы:

38

Рекомендуемая лекция: почему / sdcard / превратился в / sdcard / 0 / с 4.2? ,

Вкратце: это связано с многопользовательской функциональностью, представленной в Jelly Bean:

  • /storage/emulated/0/Насколько мне известно, это относится к «эмулируемой MMC» («часть владельца»). Обычно это внутренний. Здесь «0» означает пользователя, «0» - первый пользователь, известный как владелец устройства. Если вы создадите дополнительных пользователей, это число будет увеличиваться для каждого.
  • /storage/emulated/legacy/как и прежде, но указывает на часть текущего работающего пользователя (для владельца это будет символическая ссылка на /storage/emulated/0/). Так что этот путь должен привести каждого пользователя к своей «части».
  • /sdcard/: Согласно комментарию Shywim , это символическая ссылка на ...
    • /mnt/sdcard (Android <4.0)
    • /storage/sdcard0 (Android 4.0+)
  • /storage/sdcard0/: Поскольку здесь нет legacyкулона (см. Комментарии ниже), «0» в этом случае скорее идентифицирует само устройство (карту). Можно было бы, в конце концов, соединить кард-ридер с другой SDCard через OTG, который затем стал бы /storage/sdcard1(никаких доказательств тому, только предположение - но я бы сказал, хорошее)

Хотя можно прийти к выводу, что должно быть /storage/sdcard/legacyи то, чего не существует (см. Комментарии) - что вполне логично, если предположить, что числа здесь не связаны с пользователем, а скорее с несколькими карточками: " 0 "всегда будет тем, что находится в слоте карты устройства, поэтому здесь нет необходимости использовать" устаревшую символическую ссылку ".

Иззи
источник
Спасибо! И нет, /storage/sdcard/legacyпути нет .
Торбен Гундтофте-Брюн
2
Странный. Но это может быть связано с тем фактом, что на реальной SD-карте вряд ли есть какие-либо разрешения (из-за того, что файловая система FAT их не поддерживает). Отмечая разницу (по /sdcard0/сравнению с /emulated/0), здесь «0» может быть предназначен для случая, когда тогда подключается несколько SDC-карт через кард-ридер и режим USB-хоста. Просто предположение, не сложный факт - но я бы сказал, хороший.
Иззи
Ответ обновлен соответственно :)
Иззи
2
/sdcard/просто символическая ссылка на /storage/sdcard0/. На более старой версии, чем 4.0.0, это так /mnt/sdcard/.
Матье Харле
И я предполагаю, что на Android 4.0+ /mnt/sdcard/есть символическая ссылка на /storage/sdcard0/? Так как оба доступны для навигации на моем Nexus 4.
MrWhite
2

Да, немного запутанно, но это альтернативные пути для макета памяти

/ mnt / sdcard0 / (Внутренняя виртуальная SD-карта)

и Иззи правильно, если подключено больше устройств, но наименование может отличаться в зависимости от устройства.

ех. / mnt / sdcard1 / (физическая SD-карта в слоте SD)

но другие устройства, такие как USB-флешка, подключенная к адаптеру, могут называться

/ mnt / media_rw / usbdisk (android kitkat 4.4 и выше?) или / mnt / usbdisk (jellybean 4.1 - 4.2)

XDarkMario
источник
1
Да, наименование может зависеть от устройства / производителя / ПЗУ. Но, как правило, /mnt/*во всех этих случаях это только символическая ссылка с «настоящими монтировками», расположенными ниже /storage:)
Иззи
Ну, у меня тоже есть папка оболочки под mnt . Я часто переключаю ПЗУ устройства, и, таким образом, для тех дисков, которые делают внешнюю SD-карту памятью по умолчанию, папка оболочки работает как моя внутренняя память, а для других дисков, которые не заменяют SD-карту как внутреннюю память, оболочка даже не приходит в картину. Он просто остается там в папке со всеми нетронутыми данными, но не доступен для локального файлового менеджера. Хотел узнать, что именно.
Ali_Waris