как расширить поддержку файловой системы EXT4 для карт microSD в наличии или не в Lineage/CyanogenMod ROMS

Насколько мне известно, после Androidверсии 4.4 или какой-то другой ваша карта памяти больше не выставляется напрямую и требует тщательного взаимодействия через определенные Mountточки, которые необходимо знать через voldсистему.
Мой вопрос связан с этой ситуацией и тем фактом, что ext4это очень сложно с точки зрения доступ, и особенно теперь, когда он SeLinuxнаходится поверх него, каким-то образом все еще возможно оказывать ext4поддержку, когда он не существовал изначально, как это было в случае с lineageпредыдущими подобными ОС, что было бы в случае, если точки монтирования создаются во время загрузки, а затем voldстановится известно о них


то, что я сделал,
так как я rooted( magisk) Я использую su mount masterи монтирую их вручную, но попытка затем использовать voldне удалась, потому что было слишком поздно Я нашел несколько статей о том, как это было достигнуто в более ранних версиях Android до 5.
после 7.6 мир Android стал еще больше параноик в отношении безопасности и seLINUXне мог быть более суетливым, начиная с версий Android 7.x и выше. Я хотел бы знать, есть ли подробное руководство о том, как это можно сделать. Я не против перекомпилировать эту функцию в ядре. это гораздо более выгодное вложение, чем попытки поиска пользовательских ПЗУ и отказа от стандартных ПЗУ только потому, что вам нужна EXT4поддержка
, так как я могу добавитьEXT4поддержку стандартных и аналогичных ПЗУ для версий Android> 7.x и сделать это правильно, чтобы все приложения могли получить доступ к моим разделам. все мои разделы EXT4очень отличаются от второго partition app2sdподхода, который используется для экономии места. конечно, у меня это тоже есть, но у меня есть еще два раздела, используемых для extSD(основной раздел внешнего хранилища данных), и один, посвященный другому приложению. всего 3 EXT4раздела. первый — это основной раздел данных, второй — app2sdи третий — специальный раздел, посвященный одному приложению. если это имеет значение, я укоренен на устройстве Samsung со стандартной нугой 7.x.


еще одна вещь, которую я заметил, и я соответствующим образом обновлю вопрос, это вдруг из ниоткуда разделы, смонтированные под /storage, теперь читаются, только раньше они были не такими. Я все еще могу читать и писать им через /mnt/media_rw. Интересно, что пошло не так, потому что многие приложения зависят от доступа к моим разделам через точку монтирования /storage.

Итак, чтобы подвести итог, вот вопросы:

  • Монтируйте многораздельную ext4внешнюю карту во время загрузки, в отличие от ручного монтирования, которое я могу сделать.
  • Смонтируйте его правильно с правильным идентификатором группы, чтобы он voldзнал, что он был смонтирован, и все приложения и процессы могут свободно получать доступ к разделу.
  • Все внешние разделы под /storageвнезапно стали доступны только для чтения (внутренний раздел памяти, конечно, для чтения и записи всегда). tune2fsподтвердил, что все разделы чистые. Почему это происходит и как это можно исправить?


спасибо за ответ. Я задал этот вопрос, который звучал как повествование, поскольку у меня не было скриншотов или журналов под рукой, если это то, что вы имели в виду в своем вступительном комментарии в ответ. Итак, вот чего я пытаюсь достичь, но сталкиваюсь со всевозможными ошибками.

1) Смонтировать mmck1p2, /data/sdext2и я продолжаю получать сообщение об ошибке, не удалось смонтировать ... mmcblk1p2на ..... invalid argumentи другая аналогичная строка
не удалась ..... /dev/block/vold/publicна .... неверные аргументы. то есть через app2sd, и моя magiskглобальная опция включена, тот же раздел уже смонтирован при загрузке подmedia_rw and storage


Bind mountingкамера DCIMи многие другие папки во внутренней памяти выходят из строя, когда цель есть /storage/part#, и раньше это работало хорошо. Мои разделы чисты согласно tune2fsотчету. Что случилось ?

Еще раз спасибо. Отвечая на ваши вопросы здесь:

1) Какие сейчас смонтированы файловые системы (вывод mount)?
o/p слишком большой, чтобы поместиться здесь. ПФА

2) Вывод /system/bin/id?
для обычного пользователя

uid=10112(u0_a112) gid=10112(u0_a112) groups=10112(u0_a112),1015(sdcard_rw),1023(media_rw),1028(sdcard_r),3003(inet),9997(everybody),50112(all_a112) context=u:r:untrusted_app:s0:c512,c768


3) Какую именно команду вы использовали для монтирования mmck1p2 в /data/sdext2? 4) Какую именно команду вы использовали для привязки монтирования папки DCIM?

1   mount -o,rw /dev/block/mmcblk1p1 /storage/extsd
2   lp=/sdcard/logger.txt
4   ls./mnt/media_rw
5   ls /mnt/media_rw
6   mkdir -p $_/extsd
7   mount --bind /storage/extsd  $_
8   ls $_

с вышеприведенным запуском с терминала я могу видеть файлы только с терминала. если бежать от adbя получаю ту же ситуацию
. Мысль adbбыла бы настойчивой, но это не так. после этого я попытался вызвать vold в надежде, что это сделает мое крепление постоянным и видимым, но и здесь не повезло

dreameltemtr:/ # /system/bin/vold
/system/bin/vold
Aborted
134|dreameltemtr:/ # /system/bin/vold --blkid_context=u:r:blkid:s0 --blkid_untrusted_context=u:r:blkid_untrusted:s0 --fsck_context=u:r:fsck:s0 --fsck_untrusted_context=u:
r:fsck_untrusted:s0
ntext=u:r:fsck:s0 --fsck_untrusted_context=u:r:fsck_untrusted:s0              <
SELinux selinux_android_compute_policy_index : Policy Index[2],  Con:u:r:magisk:s0 RAM:SEPF_SECMOBILE_7.1.1_0003, [-1 -1 -1 -1 0 1]

также в mount partition# 2 через app2sdесть mountскрипт, который приложение записывает в /system/bin/etc or /data/app2sdкаталог в зависимости от выбранных вами опций. Он использует аналогичный подход, за исключением того, что
- я использовал свой собственный двоичный файл для функциональности связывания монтирования
- я буду проводить периодические тесты, чтобы увидеть, монтируются ли определенные разделы
- он будет запускать их периодически (вроде исправления многих скриптов вместе), надеясь, что один будет работать
- я пытаюсь монтировать через блочное устройство ( / dev/block/mmcxxx) , а также vold( /dev/block/vold/nnn)
Вот этот скрипт , и вы увидите , что я только что сказал . Опять же PFA, так как в сообщении есть потолок для максимального количества символов.

4) Каковы точные сообщения об ошибках? -
точные сообщения через 2 строки от app2sd guiполя внимания

- Failed to mount /dev/block/ mmcblk1p2 to /data/sdext2 invalid argument <br>
- Failed to mount /dev/block/vold/public/179:34 to /data/sdext2 invalid argument<br>

В последней части, где я не могу записать на внешний partitionsсмонтированный экземпляр, /storageустановка этого экземпляра ПЗУ не удалась. Это повторилось boot-loopsчерез 10 минут, поэтому я просто восстановил свою Nandroidрезервную копию. Поэтому я не могу выкопать более подробную информацию.

Вы можете отформатировать внешнюю SD-карту как ext4и установить ее вручную в любом месте. ext4поддержка присутствует на каждом ПЗУ - стандартном или пользовательском - с момента первого выпуска Android. В чем именно заключается ваш вопрос?
Спасибо за ответ, Ирфан, я могу найти его вручную, как я написал.
Спасибо за ответ, Ирфан, я могу найти его вручную, как я написал. Есть 3 вопроса, извините, если это было неясно 1) его нужно монтировать во время загрузки и читать и писать 2) информацию о монтировании нужно передавать, так сказать, в процесс vold, чтобы все другие процессы и приложения могли получить доступ к этому внешнему хранилищу данных раздел
3 ) еще одна вещь, которую я заметил, и я соответствующим образом обновлю вопрос: вдруг из ниоткуда разделы, смонтированные под /storage, теперь читаются, только раньше они были не такими. Я все еще могу читать и писать им через /mnt/media_rw. Интересно, что пошло не так, потому что многие приложения зависят от доступа к моим разделам через точку монтирования /storage.
пожалуйста, уточните, если вы ищете нерутированное решение. Я думаю, ваша проблема не в файловой системе, а в разрешениях приложений. взгляните на android.stackexchange.com/search?q=WRITE_EXTERNAL_STORAGE
@user1874594 user1874594 1) Какие в настоящее время смонтированы файловые системы (вывод mount)? 2) Вывод /system/bin/id? 3) Какую именно команду вы использовали для mmck1p2монтирования /data/sdext2? 4) Какую именно команду вы использовали для привязки монтирования папки DCIM? 5) Каковы точные сообщения об ошибках?
Еще раз спасибо, Ирфан. Есть скрипт монтирования, который я укажу в вопросе. а также о/п крепления
добавил больше деталей, которые вы просили для Ирфана-Спасибо!
@ALex еще раз спасибо. Это ПЗУ permissiveпрямо из коробки
спасибо людям за вашу помощь. Наконец-то я получил установку, используя
спасибо людям за вашу помощь. Я, наконец, получил установку с помощью fbind magiskмодуля, но это не произошло сразу. пришлось открыть сценарий, который был полон функций, и одна из функций искала монтирование носителя для чтения и записи в качестве точки монтирования /proc /partitions. и это никогда не подтверждалось со временем из 1800 с. Эту функцию нужно было настроить так, чтобы результат был верным, когда , /mntбыл смонтирован, а затем произошло монтирование. надеюсь, время, которое я вложил во все это, окупится тем, что один и тот же модуль будет использоваться каждый раз, когда я сталкиваюсь с этим!

Ответы (1)

Я не думаю, что полностью понимаю ваш вопрос. Непонятно, что и как вы пытались до сих пор и с какими ограничениями или ограничениями в достижении того, что вы хотите. Но точно отвечая на ваши вопросы:

Монтируйте многораздельную ext4внешнюю карту во время загрузки, в отличие от ручного монтирования, которое я могу сделать

Установка внешней SD-карты осуществляется с помощью vold. Вы можете отключить это fstabи определить initслужбу или поместить init.dскрипт для монтирования разделов при загрузке так, как вы хотите.

Смонтируйте его правильно с правильным идентификатором группы, чтобы он voldзнал, что он был смонтирован, и все приложения и процессы могут свободно получать доступ к разделу.

Начиная с Android 6, в режиме Portable Storage voldмонтируется внешняя SD-карта в , /mnt/media_rw/[UUID]а затем эмулируется в /storage/[UUID]. Приложения с WRITE_MEDIA_STORAGEразрешением (которое сопоставляется с GID media_rw (1023)) имеют доступ на запись на уровне файловой системы к внешней SD-карте. Но сторонние приложения не могут записывать на SD-карту, потому что указанное разрешение имеет signature|privilegedуровень защиты. Эмуляция позволяет приложениям читать всю SD-карту, но записывать только в свои личные каталоги. Также приложения могут использовать Android API (например, SAF) для сохранения файлов на SD-карту. Подробнее см. в разделе Как переместить файлы на внешнюю SD-карту?

Весь этот феномен глубоко интегрирован в фреймворк Android — Java и родной. Поэтому, если вы хотите изменить это поведение, вам нужно изменить исходный код Android и пересобрать ПЗУ. Или не полагайтесь voldи не монтируйте разделы самостоятельно с правильными разрешениями, как я упоминал ранее.

Все внешние разделы под /storageвдруг стали только для чтения

Может быть несколько возможных причин, вы можете проверить журнал ядра или журнал Android, чтобы увидеть, что именно происходит, когда вы это делаете mount -o rw,remount. Установка read-only может быть признаком ошибок из-за деградации флеш-чипа. Или, может быть, разделы просто достигли своего максимального количества монтирований, поэтому вам нужно запустить fsck.

Спасибо за ответ. Я дал эти детали, которые вы просили, насколько я мог их раскопать. Что я хочу получить от всего этого, так это ROMто, что он не поддерживает ext4SD-карту, такую ​​​​как CM или Lineage, как я могу иметь эту функциональность, чтобы мне не приходилось каждый раз прошивать новое ПЗУ Lineage, а затем разбираться с другими его недостатками. Надеюсь, я уже понял. Теперь для этого экземпляра я не вижу папку /etc/init.d, есть папка инициализации, и даже если я перемонтирую rw. Перезагрузка приведет к удалению скриптов. Я могу поместить их в xbin, но не уверен, что они будут выполнены.