Quiero ejecutar el siguiente comando como root en Android Terminal Emulator .
mount -o bind /storage/extSdCard /data/media
Probé esto en un Samsung Galaxy S3 con CyanogenMod 11 y funciona como se esperaba. Cuando entro /data/media
usando otra aplicación como el administrador de archivos ES File Explorer , obtengo el contenido de la tarjeta SD externa en lugar de la memoria interna.
El problema es que esto no funciona en otro S3 que tengo, este ejecuta TouchWiz ROM versión 4.3 y rooteado con CF-Auto-Root . También he probado a usar el kernel personalizado de Adam y tampoco funciona.
Cuando ejecuto el comando en la terminal y luego escribo ls /data/media
como raíz, muestra el contenido de la tarjeta SD externa, pero si ejecuto otra terminal como un usuario normal (no raíz) y escribo el mismo comando, obtengo el contenido de la tarjeta SD interna. memoria. Lo mismo sucede si intento acceder /data/media
usando el administrador de archivos ES File Explorer
Entonces, parece que los comandos raíz solo tienen efecto para el usuario raíz, no para otros usuarios en todo el sistema. ¿Cuál podría ser la causa de este comportamiento?
ACTUALIZACIÓN: OK, mi error, no me expresé correctamente. Es cierto que un usuario normal no puede acceder a /data/media
. Pero /data/media
es la verdadera ubicación de los archivos en la memoria interna. Hay muchas rutas en las que Android pone esta memoria a disposición de los usuarios normales, como /sdcard
o /storage/sdcard0
, las cuales apuntan a /data/media/0
través de un sistema de archivos FUSE.
Mi pensamiento aquí es que si creo una carpeta nombrada 0
en la sd externa y luego la vinculo /storage/extSdCard
a /data/media
, cuando el sistema intente acceder /sdcard
o /storage/sdcard0
obtendrá el contenido /storage/extSdCard/0
ya que /data/media
ya no apunta a la memoria interna, sino a la sd externa.
Esto funciona como se esperaba en CM11 cuando ejecuto como root
mount -o bind /storage/extSdCard /data/media
Luego, si accedo /sdcard
en la terminal, ya sea como root y como usuario normal, llego al contenido de /storage/extSdCard/0
. Lo mismo sucede si uso ES File Explorer en modo normal o raíz
Pero cuando hago lo mismo en el firmware rooteado 4.3, no funciona. Solo la raíz en la terminal puede ver los cambios, el usuario normal en la terminal y el usuario normal y raíz en ES File Explorer no verán cambios
Mi caso, supongo que es la misma razón para ti.
Vaya a su aplicación de administrador de superusuarios, supongo que es SuperSU.
Vaya a la configuración y busque 'Montar separación de espacio de nombres' y verifique si está marcado. Desmarque la opción y reinicie.
SuperSU proporcionó esta opción para hacer que su sistema sea más seguro al ocultar el espacio de nombres de montaje de una aplicación de los demás, por lo tanto, si monta o desmonta algo, solo es visible para la aplicación (UID) que está usando y nada más.
Alternativamente, al ejecutar su
, puede agregar una opción -m
para que su shell tenga el control del espacio de nombres de montaje maestro. Entonces tus monturas funcionarán globalmente.
Aparentemente, esta es ahora una función de seguridad de Android SELinux: los montajes iniciados desde la mayoría de los procesos no son visibles para otros procesos. Ver esta respuesta .
Un hilo de desarrollo del kernel de Android relacionado sugiere reemplazar un servicio del sistema innecesario (por ejemplo /system/bin/debuggerd
, ) con un script de shell que ejecuta el comando de montaje deseado. Esto lo lanzarías con start debuggerd
.
Actualización: Esto funcionó para mí, después de reiniciar.
Señor del Fuego
I get the contents of the internal memory.)
-- No entiendo cómo un usuario normal es capaz de ver cualquier contenido/data/media
sin privilegios elevados. Debería obtener un error en la terminal, algo así como "Operación no permitida". Acerca de su segundo caso con ES, como usuario normal, ES no debería mostrar nada en/data
el directorio y no sé cómo ir a una determinada ubicación directamente usando ES (no parece tener una barra de ubicación). Dicho esto,/data/media
todavía puede acceder un usuario normal usando Terminal. Lo revisé, funciona bien.Zapper DJ