Як я можу встановити 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.