4 votos

¿Por qué la partición se desmonta automáticamente después de algún tiempo?

Tengo un teléfono Android con Oreo 8.1.0. Tengo dos particiones en sdcard. Una partición está formateada en ext4. Lo monto usando:

mount -t ext4 -o rw /dev/block/mmcblk1p2 /data/sdext2

Pero después de algún tiempo, la partición se desmonta automáticamente y tengo que montarla de nuevo.

Incluso cuando está montado, los contenidos no son visibles en las aplicaciones de exploración de archivos como MiXplorer y ES Explorer, y sólo son visibles en la terminal.

Entonces, ¿cuál es la mejor manera de montar la partición ext4 en Android de forma persistente y cuál es la razón de tal comportamiento?

0 votos

Estoy usando la aplicación magisk. Me encuentro con este problema sólo cuando lo ejecuto en la aplicación terminal de Android. Pero cuando configuro este comando para que se ejecute en el arranque colocándolo dentro del directorio init.d en etc. Entonces funciona normalmente y la partición ext4 no se desmonta automáticamente. No entiendo por qué funciona así en ese caso. ¿Alguien podría explicarlo?

9voto

Jack Wade Puntos 231

RESPUESTA CORTA

Vaya a la configuración de Magisk y establezca Mount Namespace Mode a Global de una vez por todas. En Aplicación SuperSU , desactivar Mount Namespace Separation .
O
Para una solución única, utilice este comando en su lugar:

~$ su -mm -c 'mount <device> <mountpoint>'

RESPUESTA LARGA

pero después de algún tiempo, la partición se desmonta automáticamente y tengo que montarla de nuevo.

Android NAMESPACES
Este comportamiento se debe a Espacio de nombres de montaje implementado por Android desde Android-6 para el propósito de sandboxing / aislamiento de aplicaciones. Con el fin de controlar el acceso de las aplicaciones a los recursos del sistema y a los sistemas de archivos - en particular a las tarjetas SD - cada aplicación (Dalvik o ART VM que procesa el bytcode de Java a un binario ejecutable .dex) es iniciada por zygote (un proceso de inicio de Android) en un nuevo espacio de nombres de montaje donde puede desmontar independientemente cualquier sistema de archivos (excepto rootfs) o volver a montar, sin afectar a otros espacios de nombres. Cada proceso que la aplicación inicia, vive en el mismo (o más) espacio de nombres aislado.
Por lo general, mnt (montaje) y net (red) están habilitados por defecto en el kernel de Android. Otros espacios de nombres pid , user y uts se puede habilitar reconstruyendo el kernel.

ESPACIO DE NOMBRES GLOBAL
El primer proceso iniciado por el kernel en el arranque: init junto con todos los procesos del kernel (kworkers, etc.) y otros procesos daemon init (como ueventd, logd, servicemanager, vndbinder, mediaserver, netd, etc.) viven en Espacio de nombres global / root . Cuando instalamos mods (como Magisk, Xposed, etc.), también se inician como un proceso en el espacio de nombres Root, normalmente en la fase inicial del proceso de arranque.
Los sistemas de archivos de Android (reales o pseudo; /system, /data, /proc, etc.) también se montan inicialmente en el espacio de nombres global. El espacio de nombres de una aplicación tiene todos los montajes (incluyendo rootfs) establecidos en slave para que cualquier nuevo montaje dentro de ellos en el espacio de nombres Root, se propague al espacio de nombres de la aplicación pero no a la inversa. Ver propagación de la montura .

HERRAMIENTAS DEL ESPACIO DE NOMBRES
Comando Linux lsns se puede utilizar para ver todos los espacios de nombres. El espacio de nombres de montaje puede ser creado por unshare -m . Para introducir un espacio de nombres, nsenter es una envoltura de SETNS fácilmente disponible. En la mayoría de los casos estos comandos no funcionan sin privilegios de Root.

SUPER USUARIO Y MOUNT NS
Cuando ejecutamos su en una aplicación emuladora de Terminal, se inicia un nuevo proceso (shell) con capacidades elevadas. Este proceso vive en el mismo espacio de nombres de montaje que el de la aplicación Terminal. Por lo tanto, el mount también se ejecuta en el mismo espacio de nombres y, por tanto, el sistema de archivos sólo es visible dentro de ese espacio de nombres. Una vez que exit ese shell, el punto de montaje no mostrará el contenido del sistema de archivos. Si no hay ningún proceso en ejecución en un espacio de nombres, se limpia automáticamente.
Tenga en cuenta que una aplicación es completamente eliminada cuando su proceso Dalvik es eliminado por Force Stop o por La gestión de la memoria de Android .
Si la aplicación de la Terminal no estaba completamente muerta, su pueden entrar en el mismo espacio de nombres, sólo cuando Inherited Namespace está activada en Magisk. Isolated Namespace siempre creará un nuevo espacio de nombres de montaje.

Ahora vamos a tu pregunta:

Incluso cuando está montado, los contenidos no son visibles en las aplicaciones de exploración de archivos como MiXplorer y ES Explorer, y sólo son visibles en la terminal.

Esto se debe a que los Exploradores (aplicaciones) se ejecutan en sus propios espacios de nombres de montaje. Ejecute este comando como Root para obtener una visión general:

~# ps f -p2 --ppid 2 --deselect -o mntns,pid,cmd --sort=mntns

Puede utilizar Termux para una versión completa de ps .

Cuando configuro este comando para que se ejecute en el arranque colocándolo dentro del directorio init.d en /etc, entonces funciona normalmente y la partición ext4 no se desmonta automáticamente.

Esto se debe a que ese init.d script es ejecutado por init en el espacio de nombres global.

Entonces, ¿cuál es la mejor manera de montar la partición ext4 en Android de forma persistente y cuál es la razón de tal comportamiento?

Para escapar de todo el enigma, monte siempre sus sistemas de archivos de acceso frecuente en el espacio de nombres de montaje global (aunque es vulnerable a los fallos de seguridad) a menos que sea necesario de otra manera. Una simple comprobación de si estamos en el espacio de nombres global:

~# [ "$(readlink /proc/self/ns/mnt)" = "$(readlink /proc/1/ns/mnt)" ] && echo 'In Global NS.' || echo 'Not in Global NS.'

NOTA: Esta prueba sólo funciona en el PID NS inicial.

Otra posibilidad es crear un espacio de nombres con unshare -m --propagation shared . Ahora cualquier nuevo montaje en este espacio de nombres se propagará a todos los espacios de nombres. Pero esto no es aplicable a los espacios de nombres de aplicaciones ya creados. mount --make-rshared / no funciona (al menos para mí) si el espacio de nombres fue creado originalmente con slave o private propagación.

Ver este post del hilo para más detalles.

0 votos

"Esto se debe a que los Exploradores (aplicaciones) se ejecutan en sus propios espacios de nombres de montaje. Ejecute este comando como Root para obtener una visión general!" ¿Cómo montamos ext4 en su espacio de nombres con Android 6.0.1?

0 votos

Si aplicaciones , gracias se ve muy bien pero solo puedo probarlo el próximo fin de semana

0 votos

No he podido resolver este problema, nsenter después de mount -t ext 4 [ "$(readlink /proc/self/ns/mnt)" = "$(readlink /proc/1/ns/mnt)" ] && echo 'En Global NS.' || echo 'No en Global NS.' En Global NS.

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