Как смонтировать внешнюю SD-карту по фиксированному пути в CM13?

В Marshmallow (и, следовательно, в CM13) внешняя SD-карта монтируется по пути, который содержит ее серийный номер. У меня есть куча задач Tasker, случайный скрипт и множество приложений, настроенных на определенный путь к внешней SD-карте (в моем случае /external_sd, потому что именно там он был в CM12).

Могу ли я что-нибудь разумное сделать с этим изменением в Marshmallow? Исправление путей везде только потому, что я обновился до более быстрой/большой SD-карты (у которой другой серийный номер), не будет весело.

Как мне сделать внешнюю SD-карту доступной в «/external_sd» на CM13/Marshmallow?

Ответы (2)

Я нашел довольно простой способ сделать что-то достаточно близкое: просто установить серийный номер тома на что-то фиксированное. Это достаточно просто для SD-карт в формате FAT32: просто используйте Sysinternals VolumeID :

D:\>vol D:
 Volume in drive D has no label.
 Volume Serial Number is 07F5-432C

D:\>volumeid D: ECAD-ECAD

VolumeID V2.01 - Set disk volume id
Copyright (C) 1997-1999 Mark Russinovich
Sysinternals - www.sysinternals.com

Volume ID for drive D: updated to ecad-ecad

(«ecad» для «внешней карты», но , конечно, есть и другие возможности )

Теперь моя внешняя SD-карта смонтирована в /storage/ECAD-ECAD, что легко запомнить для ввода тех приложений, которые не позволяют мне выбрать путь, и, что более важно, может остаться прежним, например, при переходе на более быструю карту (если я повторить эту процедуру).

Единственная сложность — SD-карты размером более 32 ГБ, которые Windows отказывается форматировать в FAT32. Лучшим инструментом для решения этой проблемы является Rufus , инструмент с открытым исходным кодом, ориентированный на загрузочные диски, но он также может просто отформатировать большой диск FAT32.

Другой вариант — использовать сценарий init.d для повторного создания ссылки на SD-карту.

#!/system/bin/sh

SERIAL=`ls /mnt/media_rw/ | head -n 1`
FULL_PATH="/mnt/media_rw/$SERIAL"
SERIAL_LENGTH=${#SERIAL}
LINK_NAME="/external_sd"

if [ -e $LINK_NAME ] ; then
    echo "Link already exists!"
elif [[ $SERIAL_LENGTH -lt 1 ]] ; then
    echo "Badly formed path!"
elif [ ! -d "$FULL_PATH" ] ; then
    echo "SdCard path not found!"
else
    mount -o rw,remount /
    ln -s $FULL_PATH $LINK_NAME
    mount -o ro,remount /
fi

Этот скрипт предполагает:

  • что скрипты init.d не блокируются SEAndroid,
  • что ваше устройство должно быть выключено, чтобы изменить SD-карту, и
  • что у него есть место только для одной SD-карты.

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