0 votos

Cómo extender el soporte para el sistema de archivos EXT4 para tarjetas microSD en ROMS de stock o no lineage / CyanogenMod

Según tengo entendido, después de Android 4.4 o algún momento, tu tarjeta de almacenamiento ya no se expone directamente y necesita ser cuidadosamente interfazada a través de puntos de montaje específicos que deben ser reconocidos por el sistema vold.

La pregunta es, dado esta situación y el hecho de que ext4 es muy complicado en términos de acceso y especialmente ahora con SeLinux encima de él, ¿es de alguna manera posible renderizar el soporte ext4 cuando inicialmente no existía, como ha sido el caso para lineage y sistemas operativos previos similares? Eso sería posible si los puntos de montaje se crean en el arranque y luego vold es consciente de ellos.

Lo que hice
Como estoy rooted (magisk), uso su mount master y los monto manualmente, pero al intentar luego usar vold falla porque es demasiado tarde. Encontré algunos artículos sobre como se logró esto en versiones anteriores de Android hasta la 5. Después de la versión 7.6 de Android, el mundo se ha vuelto aún más paranoico en cuanto a seguridad y seLINUX no podría haber sido más quisquilloso. Desde la versión 7.x y hacia adelante de Android, me gustaría saber si hay una guía definitiva sobre cómo hacer esto. No me importa recompilar esta característica en el kernel, esto sería una inversión mucho más gratificante que tratar de buscar ROMs personalizados y alejarme de la de fábrica solo porque quiero soporte para EXT4.

Entonces, ¿cómo puedo agregar soporte para EXT4 en sistemas de fábrica y ROMs similares para versiones de Android > 7.x y hacerlo de la manera correcta para que todas las aplicaciones puedan acceder a mis particiones? Todas mis particiones son EXT4, esto es bastante diferente al enfoque de segunda partición app2sd que se usa para ahorrar espacio. Por supuesto, también tengo eso, pero tengo dos particiones más usadas para extSD (partición principal de almacenamiento externo de datos) y una dedicada a otra aplicación. Un total de 3 particiones EXT4. La primera es la partición de datos principal, la segunda es app2sd y la tercera es una partición especial dedicada a una aplicación. Si importa, estoy enraizado en un dispositivo Samsung que funciona con Nougat 7.x de fábrica.

Otra cosa que observé y actualizaré la pregunta en consecuencia es que de repente, de la nada, las particiones montadas bajo /storage ahora son de solo lectura, antes no lo eran. Todavía puedo leer y escribir en ellas a través de /mnt/media_rw. Me pregunto qué salió mal porque muchas aplicaciones dependen de acceder a mis particiones a través del punto de montaje /storage.

Para resumir, aquí están las preguntas:

  • ¿Montar múltiples particiones ext4 en la tarjeta externa durante el arranque, en lugar de montarlas manualmente, como puedo hacer?
  • ¿Montarlas de la manera correcta con el ID de grupo correcto, para que vold sepa que han sido montadas y todas las aplicaciones y procesos puedan acceder libremente a la partición?
  • ¿Por qué todas las particiones externas bajo /storage se volvieron de solo lectura repentinamente (la partición de memoria interna siempre es de lectura y escritura)? tune2fs confirmó que todas las particiones están limpias. ¿Por qué sucede esto y cómo se puede arreglar?

Gracias por la respuesta. Hice esta pregunta de manera narrativa ya que no tengo capturas de pantalla o registros a mano si eso es lo que querías decir en tu comentario inicial en la respuesta. Así es lo que intento lograr pero me encuentro con todo tipo de errores. 1) Montar mmck1p2 en /data/sdext2 y sigo recibiendo el error de falla al montar... mmcblk1p2 en .... argumento inválido y otra línea similar de falla... /dev/block/vold/public en .... argumento inválido, que es a través de app2sd y mi magisk tiene la opción global activada. La misma partición ya se encuentra montada en el arranque en media_rw y storage.

Bind mounting de la cámara DCIM y muchas otras carpetas en el almacenamiento interno falla cuando el objetivo es /storage/part# y antes funcionaba bien. Mis particiones están limpias según el reporte de tune2fs. ¿Qué sucedió?

Gracias de nuevo. Respondiendo a tus preguntas:

1) ¿Cuáles son los sistemas de archivos actualmente montados (salida de mount)? La salida es demasiado grande para caber aquí. PFA

2) ¿Cuál es la salida de /system/bin/id? Para el usuario normal

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) ¿Qué comando exacto usaste para montar mmck1p2 en /data/sdext2?

4) ¿Qué comando exacto usaste para montar el folder 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 $_

Usando lo anterior desde la terminal, logro ver los archivos solo desde la terminal. Si se ejecuta desde adb, obtengo la misma situación. Pensé que adb sería persistente pero no es el caso. Después de eso, intenté invocar a vold con la esperanza de que hiciera mi montaje persistente y visible, pero no tuve suerte.

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]

También, para montar la partición #2 a través de app2sd, hay un script de mount que la aplicación escribe en los directorios /system/bin/etc o /data/app2sd dependiendo de las opciones que elijas. Utiliza el enfoque similar excepto que -- uso su propio binario para la funcionalidad de mount de bind -- Realizaré pruebas periódicas para ver si ciertas particiones se montan -- Se ejecutarán periódicamente (algo así como parchear muchos scripts juntos) con la esperanza de que uno funcione -- Intentos de montar a través del dispositivo de bloques (/ dev/block/mmcxxx) así como vold (/dev/block/vold/nnn). Aquí está ese script y verás lo que acabo de decir. De nuevo, PFA ya que hay un límite de caracteres máximo en una publicación.

4) ¿Cuáles son los mensajes de error exactos?

- Falló al montar /dev/block/mmcblk1p2 en /data/sdext2 argumento inválido 
- Falló al montar /dev/block/vold/public/179:34 en /data/sdext2 argumento inválido

En la última parte donde no puedo escribir en las particiones externas montadas bajo /storage Esa instancia de instalación de ROM fue abortiva. Causaba reinicios repetidos después de 10 minutos, así que simplemente restauré mi copia de seguridad de Nandroid. Por lo tanto, no puedo buscar más detalles.

0 votos

Puedes formatear la tarjeta SD externa como ext4 y montarla manualmente donde quieras. El soporte ext4 está presente en cada ROM - de fábrica o personalizada - desde la primera versión de Android. ¿Qué es exactamente tu pregunta?

0 votos

Gracias por responder Irfan, puedo encontrarlo manualmente como lo he escrito.

0 votos

Gracias por responder Irfan, puedo encontrarlo manualmente como he escrito. Hay 3 preguntas, lo siento si no estaba claro 1) necesita montarse en el arranque y ser de lectura y escritura 2) la información de montaje debe transferirse al proceso vold para que todos los demás procesos y aplicaciones puedan acceder a esa partición de almacenamiento de datos externa.

2voto

Jack Wade Puntos 231

No creo que entienda completamente su pregunta. No está claro qué y cómo ha intentado hasta ahora y qué restricciones o limitaciones ha enfrentado en lograr lo que desea. Pero respondiendo precisamente a sus preguntas:

Montar múltiples particiones externas ext4 en la tarjeta durante el arranque, en lugar de hacerlo manualmente, que puedo hacer

El montaje de la tarjeta SD externa es manejado por vold. Puede deshabilitar eso en fstab y definir un servicio init o poner un script init.d para montar las particiones en el arranque de la forma que desee.

Montarlo correctamente con el ID de grupo correcto, para que vold sepa que se ha montado y todas las aplicaciones y procesos puedan acceder libremente a la partición

Desde Android 6, en modo de almacenamiento portátil, vold monta la tarjeta SD externa en /mnt/media_rw/[UUID] y luego emula eso en /storage/[UUID]. Las aplicaciones con el permiso WRITE_MEDIA_STORAGE (que se asigna al GID media_rw (1023)) tienen acceso de escritura a nivel de sistema de archivos a la tarjeta SD externa. Pero las aplicaciones de terceros no pueden escribir en la tarjeta SD porque dicho permiso tiene un nivel de protección signature|privileged. La emulación permite a las aplicaciones leer toda la tarjeta SD pero escribir solo en sus directorios privados. Además, las aplicaciones pueden usar APIs de Android (como SAF) para guardar archivos en la tarjeta SD. Vea más detalles en Cómo mover archivos a la tarjeta SD externa?

Todo este fenómeno está profundamente integrado en el marco de Android - Java y nativo. Entonces, si desea cambiar este comportamiento, necesita modificar el código fuente de Android y reconstruir la ROM. O no confíe en vold y monte las particiones usted mismo con los permisos correctos como mencioné antes.

Todas las particiones externas bajo /storage de repente se volvieron de solo lectura

Puede haber múltiples razones posibles, puede verificar el registro del kernel o el registro de Android para ver qué sucede exactamente cuando hace mount -o rw,remount. Montar en solo lectura puede ser un signo de errores debido a la degradación del chip flash. O tal vez la(s) partición(es) simplemente alcanzaron su recuento máximo de montaje, por lo que necesita ejecutar fsck.

0 votos

Gracias por responder. Di todos los detalles que pediste tanto como pude encontrar. Lo que quiero obtener de todo esto está en un ROM que no soporta ext4 para la tarjeta SD como CM o Lineage, ¿cómo puedo tener esta funcionalidad para que no tenga que flashear un nuevo ROM de Lineage cada vez y luego lidiar con sus otras deficiencias? Espero que ahora esté claro. Ahora, para esta instancia, no veo una carpeta /etc/init.d, hay una carpeta init e incluso si remonto rw. El reinicio eliminará los scripts. Puedo ponerlos en xbin pero no estoy seguro de si se ejecutarán.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X