Я вижу здесь некоторые упоминания о создании SD-карты в формате ext4, но нет руководства. Этот тесно связанный вопрос предполагает, что это невозможно сделать, но мой вопрос отличается тем, что мой телефон специально рутирован.
Я отформатировал свою карту как ext4 (таблица разделов GUID); мой телефон Cyanogenmod установил его в /mnt/fuse/sdcard1
. Я следовал инструкциям здесь, чтобы смонтировать карту в /storage/sdcard1
, создав следующий скрипт в/data/local/userinit.sh
#!/system/bin/sh
REALMNT=/mnt/fuse/sdcard1_real
if ! [ -d "$REALMNT" ]; then
mkdir "$REALMNT" || exit 1
fi
mount -t ext4 /dev/block/mmcblk1p1 "$REALMNT"
sdcard "$REALMNT" /storage/sdcard1 1023 1023 &
Я перезапустил и попытался скопировать файл (используя ES File Explorer) и вставить его в его родительский каталог, что не удалось:
/storage/sdcard1/foo/bar.mp3: open failed: EACCES (Permission denied).
Я действительно могу нормально воспроизвести файл, поэтому я могу его открыть. FWIW, когда я пытаюсь скопировать из исходной точки монтирования ( /mnt/fuse/sdcard1
), я получаю немного другую ошибку:
Failed to copy the file bar.mp3
Я использую Samsung Galaxy S3 с Cyanogenmod 10.2.0-i9300.
== РЕДАКТИРОВАТЬ ==
su
ls -l /mnt/fuse
drwxrwxr-x media_rw media_rw 2014-03-04 22:08 sdcard1
Это все. В sdcard1_real
этом каталоге нет, значит скрипт не работает?
== РЕДАКТИРОВАТЬ2 ==
Я попытался изменить сценарий для устранения неполадок. Скрипт запускается нормально, но потом вылетает mkdir "$REALMNT"
с ошибкой /data/local/userinit.sh[6]: : not found
.
== РЕДАКТИРОВАТЬ3 ==
Я знаю, что скрипт не работает, поэтому его исправление может решить мой вопрос, но мне показалось интересным следующее. Я отформатировал свою SD-карту на своем компьютере с Linux и перенес на нее некоторые файлы. Как ни странно, ошибки прав доступа возникают только в тех подкаталогах, которые я создал. В корне раздела (через /storage/sdcard1
) у меня уже есть права на запись.
Предположительно , это было исправлено несколько месяцев назад, но люди до сих пор сообщают о проблемах. Я могу читать элементы на карте, но не имею разрешения на запись. Чтобы это исправить, я объединил стратегии из нескольких источников .
Подсказки $
и #
указывают, поэтому не вводите их.
$ su
# chown media_rw:media_rw /mnt/media_rw/sdcard1
# chmod g+w /mnt/media_rw/sdcard1
Это изменяет разрешения SD-карты. Владелец и группа меняются с system
на media_rw
, а группе также предоставляется доступ на запись.
Не уверен, что это поможет, но, возможно, проблема в том, что вы пытаетесь смонтировать не в том месте? Это мой рабочий скрипт, который работает на S3 mini с CM11:
#!/system/bin/sh
REALMNT=/mnt/media_rw/sdcard1
if ! [ -d "$REALMNT" ]; then
mkdir "$REALMNT" || exit 1
fi
mount -t ext4 -o rw,noatime /dev/block/mmcblk1p1 "$REALMNT"
sdcard "$REALMNT" /storage/sdcard1 1023 1023
Расположение REALMNT уже существовало, поэтому, конечно, mkdir никогда не вызывался. И media_rw/sdcard1 уже принадлежит media_rw
Мне также пришлось обновить /etc/permissions/platform.xml, чтобы включить: <group id="media_rw"/>
в:<permission name="android.permission.WRITE_EXTERNAL_STORAGE">
su
не удается смонтировать ):
android.stackexchange.com/questions/82089/… `Я использую cm-11-20140804-SNAPSHOT-M9-mondrianwifi.zip.Адасдадасд опубликовал ответ, который я хотел принять, но с тех пор он был удален. Я воспроизведу его ниже и приму свой ответ, но если adasdadasd появится снова, пожалуйста, сделайте репост, и я удалю это и приму ваш.
https://jira.cyanogenmod.org/browse/CYAN-332
Исправлено по умолчанию? Новое изменение на гитхабе.
Здесь простота
#!/system/bin/sh
REALMNT="/mnt/media_rw/extSdCard"
mount -t ext4 -o rw,noatime /dev/block/mmcblk1p1 "$REALMNT"
sdcard "$REALMNT" /storage/extSdCard 1023 1023 &
А здесь ext4 с возможностью записи на внешней сд
#!/system/bin/sh
chown media_rw:media_rw /mnt/media_rw/extSdCard
chmod g+w /mnt/media_rw/extSdCard
Вы можете изменить «extSdCard» на «sdcard1», где установлена внешняя SD-карта.
Я использовал стокром с Kingroot, но я попробовал Supersu, у него проблемы с монтированием файловой системы.
Иззи
ls -l /mnt/fuse/
иls -l /mnt/fuse/sdcard1_real
. Затем отредактируйте свой вопрос, чтобы включить результаты. Я предполагаю , что «неправильные права доступа к файлам» — либо для монтирования, либо дляfoo/
каталога на карте. Помните, что ext4 поддерживает полные права доступа к файлам *nix, в т.ч. пользователя и группы.Чак
su
терминал, чтобы получить root. Возможно, вам потребуется подтвердить предоставление разрешения на телефоне, если вы делаете это в первый раз.Иззи
echo Script executed > /mnt/fuse/sdcard1/test.log
, и проверить, работает ли он вообще. Если это так, сделайте предыдущую строкуmount -t ext4 /dev/block/mmcblk1p1 "$REALMNT" 2> /mnt/fuse/sdcard1/test.log
и проверьте сообщение об ошибке. Или выполните скрипт вручную, чтобы увидеть:su /data/local/userinit.sh
.Спархок
touch
показывает, что скрипт запущен. Я попытался выполнить скрипт вручную с помощьюsu /data/local/userinit.sh
, но это не удалось. Я также пробовалsu echo foo
и получаю аналогичную ошибку:Unknown id: echo
.Иззи
echo
для вывода каждой команды до ее выполнения и перенаправить вывод ошибок с помощью2>>
.Спархок
exit 1
, затем произошел сбой с указанной ошибкой.Иззи
/mnt/fuse
его нет, когда вы пытаетесьmkdir
(попробуйте поставитьls /mnt
передmount
командой)? Если это так,mkdir -p "$REALMNT" || exit 1
можно обойти это, но я не уверен в побочных эффектах, когда система пытается создать/mnt/fuse
позже, а она уже существует.Ирфан Латиф
Спархок