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 soporteext4
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.
0 votos
3) otra cosa que observé y actualizaré la pregunta en consecuencia es que, de repente, de la nada, las particiones montadas en /storage ahora son sólo de lectura, anteriormente no lo eran. Todavía puedo leer y escribir en ellos 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.
0 votos
Por favor, aclara si estás buscando una solución sin ser root. Supongo que tu problema no es el sistema de archivos, sino más bien relacionado con los permisos de la aplicación. Echa un vistazo a android.stackexchange.com/search?q=WRITE_EXTERNAL_STORAGE
0 votos
@user1874594 1) ¿Cuáles son los sistemas de archivos actualmente montados (salida de
mount
)? 2) ¿Salida de/system/bin/id
? 3) ¿Qué comando exactamente usaste para montarmmck1p2
en/data/sdext2
? 4) ¿Qué comando exactamente usaste para enlazar montar la carpeta DCIM? 5) ¿Cuáles son los mensajes de error exactos?0 votos
Gracias de nuevo Irfan Hay un script de montaje que voy a poner en la pregunta. y también la salida de montaje
0 votos
Agregué más detalles que pediste Irfan- ¡Gracias!
0 votos
@ALex gracias de nuevo. Esta ROM es
permisiva
desde el principio0 votos
Gracias amigos por su ayuda. Finalmente logré que el montaje se realizara usando
0 votos
Gracias a todos por su ayuda. Finalmente logré que se montara usando el módulo
fbind magisk
pero no sucedió de inmediato. Tuve que abrir el script que estaba lleno de funciones y una de las funciones buscaba Montar medios de lectura y escritura como un punto de montaje en/proc /partitions
. Y nunca resultó ser verdad con un tiempo de espera de 1800 s. Esta función tuvo que ser ajustada para que el resultado fuera verdadero cuando/mnt
estaba montado y luego la monta ocurriría. ¡Espero que el tiempo que he invertido en todo esto valga la pena con este mismo módulo siendo utilizado cada vez que me enfrente a esto!