Насколько мне известно, после 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
резервную копию. Поэтому я не могу выкопать более подробную информацию.
Я не думаю, что полностью понимаю ваш вопрос. Непонятно, что и как вы пытались до сих пор и с какими ограничениями или ограничениями в достижении того, что вы хотите. Но точно отвечая на ваши вопросы:
Монтируйте многораздельную
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
то, что он не поддерживает ext4
SD-карту, такую как CM или Lineage, как я могу иметь эту функциональность, чтобы мне не приходилось каждый раз прошивать новое ПЗУ Lineage, а затем разбираться с другими его недостатками. Надеюсь, я уже понял. Теперь для этого экземпляра я не вижу папку /etc/init.d, есть папка инициализации, и даже если я перемонтирую rw. Перезагрузка приведет к удалению скриптов. Я могу поместить их в xbin, но не уверен, что они будут выполнены.
Ирфан Латиф
ext4
и установить ее вручную в любом месте.ext4
поддержка присутствует на каждом ПЗУ - стандартном или пользовательском - с момента первого выпуска Android. В чем именно заключается ваш вопрос?пользователь1874594
пользователь1874594
пользователь1874594
алексс
Ирфан Латиф
mount
)? 2) Вывод/system/bin/id
? 3) Какую именно команду вы использовали дляmmck1p2
монтирования/data/sdext2
? 4) Какую именно команду вы использовали для привязки монтирования папки DCIM? 5) Каковы точные сообщения об ошибках?пользователь1874594
пользователь1874594
пользователь1874594
permissive
прямо из коробкипользователь1874594
пользователь1874594
fbind magisk
модуля, но это не произошло сразу. пришлось открыть сценарий, который был полон функций, и одна из функций искала монтирование носителя для чтения и записи в качестве точки монтирования/proc /partitions
. и это никогда не подтверждалось со временем из 1800 с. Эту функцию нужно было настроить так, чтобы результат был верным, когда ,/mnt
был смонтирован, а затем произошло монтирование. надеюсь, время, которое я вложил во все это, окупится тем, что один и тот же модуль будет использоваться каждый раз, когда я сталкиваюсь с этим!