В Marshmallow (и, следовательно, в CM13) внешняя SD-карта монтируется по пути, который содержит ее серийный номер. У меня есть куча задач Tasker, случайный скрипт и множество приложений, настроенных на определенный путь к внешней SD-карте (в моем случае /external_sd, потому что именно там он был в CM12).
Могу ли я что-нибудь разумное сделать с этим изменением в Marshmallow? Исправление путей везде только потому, что я обновился до более быстрой/большой SD-карты (у которой другой серийный номер), не будет весело.
Как мне сделать внешнюю SD-карту доступной в «/external_sd» на CM13/Marshmallow?
Я нашел довольно простой способ сделать что-то достаточно близкое: просто установить серийный номер тома на что-то фиксированное. Это достаточно просто для 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
Этот скрипт предполагает:
Я предполагаю, что причиной введения серийных номеров в путь к SD-карте являются устройства, в которых есть место для более чем одной SD-карты.