Как сделать так, чтобы ссылка /sdcard указывала на внешнюю SD-карту на Android 4.4.2?

У меня есть телефон Samsung GT-I9505 с установленным Google Edition Rom. Поскольку в моем телефоне 16 ГБ встроенной памяти, я купил microSD на 32 ГБ. Однако телефон по-прежнему использует эмулированную SD-карту для хранения всех данных.

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

символическая ссылка: /sdcard -> /storage/emulated/legacy
символическая ссылка: /storage/sdcard0 -> /storage/emulated/legacy

Моя фактическая SD-карта, однако, находится на/storage/extSdCard

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

Здесь я застрял и прошу вашей помощи, чтобы мой телефон использовал правильную SD-карту.

Ответы (2)

Насколько я знаю, вы можете изменить это, отредактировав /system/etc/vold.fstab, но если в нем нет того, что вам нужно, вам, возможно, придется вмешаться init.rcвнутри boot.img.

Я не уверен, что то, что вы пытаетесь сделать, безопасно, учитывая недавний переход на fuseSD-карты.

Я редактировал vold.fstab, но после перезагрузки никаких видимых изменений.
@svz Тогда я думаю, что хранилища монтируются с помощью init. Я думаю, вы можете попробовать изменить init.rc, но сначала обязательно сделайте резервную копию Nandroid - вмешательство в ядро ​​​​это рискованное дело!
Я не вижу никаких признаков sdcardили чего-либо подобного в init.rc.
@svz Правда? Он должен быть в одном из других файлов инициализации.
@svz Подожди, кажется, я понял. Это в init.qcom.rc. Искатьexport EXTERNAL_STORAGE

Здесь несколько подходов, никто не пробовал себя, поскольку у меня никогда не было этой проблемы:

Во-первых, прежде чем вручную изменять символические ссылки, вам может потребоваться перемонтировать корневую файловую систему для чтения и записи. Тем не менее, даже если вам это удастся, вам, возможно, придется повторять действия после каждой перезагрузки — так что давайте проверим другие варианты.

Есть несколько доступных приложений , которые решают эту проблему, некоторые из них даже специфичны для устройств Samsung. Хорошим кандидатом, вероятно, является Root External 2 Internal SD , ​​который «меняет местами» две карты именно так, как вы хотите. Никакой ручной возни с init.rcили vold.fstabне требуется.

Я пробовал приложение: Root External 2 Internal SD, но это не помогло. Перемонтирование раздела /system позволило мне продвинуться немного дальше, но изменение символической ссылки /sdcard на /storage/extSdCard, похоже, не помогает. Приложения по-прежнему сохраняют данные на эмулированную SD-карту.
Вы проверили кого-либо из других кандидатов из-за первой ссылки в моем ответе?
Я просмотрел список, но то, что предлагают эти приложения, отличается от того, что я хочу. Предлагают примонтировать внешнюю SD-карту в какое-то место на внутренней, а я хочу ее полностью заменить. Возможно, я неправильно понимаю принцип работы, но на моем HTC Sensation с Cyanogenmod 11 было так: когда нет SD-карты, телефон использует эмулированную, но как только SD-карта вставлена, она переопределяет эмулированную карта. Поведение, реализованное в AOSP 4.4.2, мне кажется странным.
Похоже, изменение символических ссылок не «обманывает» использование приложений системных вызовов ( getExternalFilesDirs()и т. д.). Грустные новости. Но, может быть, изучение ссылок API на внешнее хранилище и его конфигурацию для конкретных устройств может пролить свет и дать полезные советы?
Что ж, я думаю, мы подошли к тому моменту, когда разумно спросить, стоит ли эта функция потраченного времени. Я полагаю, это вызвано требованием, чтобы каждый пользователь имел изолированное основное внешнее хранилище, что вряд ли возможно с одной SD-картой. Спасибо за помощь, буду дальше искать решение, но в "фоновом режиме", наверное.
Если у вас только одна карта (обычно это устройства без слота microSD), то она основная. Что ж, извините, я не мог быть более полезным — и удачи вам в дальнейших исследованиях! Надеюсь, кто-то еще появится и даст лучший ответ.