Я вижу некоторые упоминания о создании 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.
== EDIT ==
su
ls -l /mnt/fuse
drwxrwxr-x media_rw media_rw 2014-03-04 22:08 sdcard1
Это все. В sdcard1_realэтом каталоге нет, так что я полагаю, что скрипт не работает?
== EDIT2 ==
Я попытался изменить скрипт для устранения неполадок. Сценарий начинается нормально, но затем завершается mkdir "$REALMNT"с ошибкой/data/local/userinit.sh[6]: : not found .
== EDIT3 ==
Я знаю, что скрипт не работает, поэтому исправление может решить мой вопрос, но я подумал, что следующее было интересно. Я отформатировал свою SD-карту в своем компьютере с Linux и перенес на нее некоторые файлы. Как ни странно, ошибки прав доступа возникают только в созданных мной подкаталогах. В корне раздела (через /storage/sdcard1) у меня уже есть разрешение на запись.
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>>,
ls -l /mnt/fuse/иls -l /mnt/fuse/sdcard1_real. Затем отредактируйте свой вопрос, чтобы включить результаты. Я предполагаю, что «неправильные права доступа к файлу» - либо для монтирования, либо дляfoo/каталога на карте. Помните, ext4 поддерживает полные права доступа * nix, в т.ч. пользователь и группы.