Як я можу встановити SD-формат SD4 у форматі з правильними дозволами (з root)?


9

Тут я бачу деякі згадки про створення 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 і переніс на неї деякі файли. Як не дивно, помилки дозволу трапляються лише в створених мною підкаталогах. У корені розділу (via /storage/sdcard1) у мене вже є дозвіл на запис.


1
Як root, будь ласка, виконайте 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.
Іззі

@Izzy touchпоказує, що сценарій працює. Я спробував виконати сценарій вручну su /data/local/userinit.sh, але це не вдалося. Я також спробував su echo foo, і отримати подібну помилку: Unknown id: echo.
Sparhawk

Щодо вашого EDIT3, дивіться мій перший коментар: ext4 підтримує повні дозволи * nix для файлів, в т.ч. користувач та групи . Ви створили ці каталоги з користувачем, якого немає на вашому пристрої Android, тому вони належать до "невідомого користувача / невідомої групи". Якщо ви не надали доступ для запису до "world", там може писати тільки root. Ви повинні ознайомитись з тими основами * nix при використанні такої файлової системи на портативних носіях;) Що стосується сценарію, я знову пропоную додати ще трохи інформації про налагодження, наприклад, використовувати echoдля виведення кожної команди перед її виконанням та вивести помилку перенаправлення з 2>>.
Іззі

Відповіді:


6

Це нібито було виправлено кілька місяців тому, але люди все ще повідомляють про проблеми. Я можу читати предмети на картці, але не маю дозволу на запис. Щоб виправити це, я поєднав стратегії з кількох джерел .

  1. Картка розділів з таблицею розділів MS-DOS та файловою системою ext4. Я використовував GParted на своєму (Linux) настільному комп’ютері.
  2. Вставте картку в телефон. (Зараз ви, ймовірно, не матимете доступу до запису.)
  3. Відкрийте емулятор терміналу , встановлений за замовчуванням у Cyanogenmod.
  4. Введіть наступне (я рекомендую WiFi клавіатуру для великих блоків тексту). Дайте кореневі привілеї емулятору, коли він їх вимагає.

Підкажіть $і #вкажіть підказки, тому не вводьте їх.

$ su
# chown media_rw:media_rw /mnt/media_rw/sdcard1
# chmod g+w /mnt/media_rw/sdcard1

Це змінює дозволи SD-карти. Власник і група змінюються з systemна media_rw, і це також надає групі доступ для запису.


потрібно -R для рекурсивного чууна -R media_rw: media_rw / mnt / media_rw / sdcard1
m3asmi

1

Не впевнений, чи це якась допомога, але, можливо, проблема полягає в тому, що ви намагаєтесь встановити не в тому місці? Це мій робочий сценарій, який працює на міні S3 з 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">


Дякую. Я дещо відмовився від цього, оскільки у мене також був великий заряд акумулятора зі своїм сценарієм. Оскільки він закріплений у багажнику, я більше не буду морочитися шляхом вирішення проблеми. Дякую, хоча і +1.
Спархавк

@Sparhawk: Не впевнений, яку версію СУМ ви використовуєте, але моя SD-карта не встановлюється автоматично.
Луїс А. Флорит

@ LuisA.Florit Я не впевнений, чи ти мав намір відповісти на цю відповідь . У всякому разі, я використовую 11-20140804-SNAPSHOT-M9-i9300. Я опублікував більше інформації в іншій відповіді .
Sparhawk

@Sparhawk: Моя карта навіть не змонтована, і процедура монтажу в Налаштуваннях не працює. Можливо, проблема пов'язана з моїм питанням тут ( suне вдається встановити ): android.stackexchange.com/questions/82089/… `Я використовую cm-11-20140804-SNAPSHOT-M9-mondrianwifi.zip.
Луїс А. Флорит

@ LuisA.Florit Не дуже впевнений. Можливо, задати нове запитання?
Sparhawk

0

Опублікував відповідь adasdadasd, яку я хотів прийняти, але з тих пір був видалений. Я відтворять його нижче і прийму свою відповідь, але якщо adasdadasd повторюється, будь ласка, відправте його, і я видаляю це, і приймаю вашу.

https://jira.cyanogenmod.org/browse/CYAN-332

https://github.com/CyanogenMod/android_packages_providers_MediaProvider/commit/faf3f77b9222554227740aed8127714ea9e3f407

Виправлено за замовчуванням? Нова зміна в github.


0

Тут спрощена лінія

#!/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 на зовнішній sd

#!/system/bin/sh
chown media_rw:media_rw /mnt/media_rw/extSdCard
chmod g+w /mnt/media_rw/extSdCard

Ви можете змінити "extSdCard" на зразок "sdcard1", де встановлена ​​ваша зовнішня sdcard

Iam використовував Stockrom з Kingroot, але я намагаюся Supersu його проблеми з монтажем файлової системи

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.