3 votos

Tarjeta externa Ext4 montada sólo para Root (!) en Android 5.1 64 bits

En resumen si monto mi tarjeta SD Ext4 de 8GB, sólo root (SU) puede ver de la misma. El resto de usuarios (por tanto, el resto de aplicaciones) no lo detectan.

Mientras mi Ext4 SD la tarjeta no está montada correctamente (Android siempre arroja Damaged SD card. Format it... blah blah blah ), he seguido esta guía para montarlo. Y funciona:

La tarjeta SD está en /dev/block/mmcblk1 , por lo que la primera partición está en /dev/block/mmcblk1p1 .
Realicé el (no muy claro para mí) proceso previo de ADB:

su
setprop service.adb.tcp.port 5555
adb kill-server
stop adbd
start adbd
HOME=/sdcard adb start-server
adb connect localhost
adb -s localhost:5555 shell
exit
stop adbd
cat /sdcard/.android/adbkey.pub >> /data/misc/adb/adb_keys
start adbd

Y luego la tarjeta es correctamente montado haciendo (como Root):

# mount -t ext4 /dev/block/mmcblk1p1 /storage/extSdCard && sleep 5 && /system/bin/vold

Observe cómo funciona como SU pero no como usuario normal :

root@unknown:/ # ls /storage/sdcard1
lost+found
root@unknown:/ # exit
u0_a98@unknown:/ $ ls /storage/sdcard1
ls: can't open '/storage/sdcard1': Permission denied

He probado los pasos anteriores a través de SSH (shell remoto).
La tarjeta SD ha sido formateada desde Windows utilizando Asistente de partición Minitool .

Yo también he hecho pruebas:

  • Edición de la /system/etc/permissions/platform.xml manualmente (añadiendo <group gid=”media_rw” /> ) a WRITE_EXTERNAL_STORAGE sección, como se menciona aquí.
  • SDFix .
  • Uso de Xposed framework con ManejarAlmacenamientoExterno módulo.

Pero las aplicaciones (Total Commander, Ghost Commander, o cualquier otro programa) no tienen acceso a la SDCard Ext4.

¿Qué más podría probar?
Soluciones a los problemas para que las aplicaciones lean (y escriban) también la tarjeta SD.

Datos extra 1:

Observe la salida del mount para ambos usuarios:

root@unknown:/ # mount | grep "sdcard" -i
/dev/block/mmcblk1p1 /storage/sdcard1 ext4 rw,seclabel,relatime,data=ordered 0 0
root@unknown:/ # exit
u0_a98@unknown:/ $ mount | grep "sdcard"
u0_a98@unknown:/ $ mount | grep "mmcblk"

Como se puede ver, el usuario Root tiene un dispositivo montado que el usuario normal no tiene (¡!). No sabía que esto podía ocurrir en Linux.

0 votos

Mira en el vold.fstab porque es lo que dicta a los puntos de montaje del sistema, el formato y esas cosas. Aquí hay una explicación: source.Android.com/devices/storage/config.html

0 votos

@BoLawson Ya no hay vold.fstab en Lolipop. Hace tiempo que está obsoleto. Tengo exactamente este mismo problema en un Sony Z1C. Es rooteado. Estoy corriendo una rom de stock. Puedo montar el sistema de archivos ext4 pero no puedo verlo como usuario normal en absoluto. Puedo tener una pregunta duplicada aquí: Android.stackexchange.com/questions/124575/ y aquí: forum.xda-developers.com/sony-xperia-z1-compact/help/

0 votos

Si el punto de montaje es visible sólo para Root y no para otros usuarios/apps, eso es debido al espacio de nombres de montaje explicado aquí: Android.stackexchange.com/questions/197959/ Se explica el problema de los permisos forums.lenovo.com/t5/Moto-X-Play/Android-ext4-support/m-p/ y forum.xda-developers.com/

3voto

Autian Puntos 31

Edición 2020-06-03: Si quieres ver una respuesta mucho más detallada de cómo funciona el ecosistema de montaje en Android, puedes echar un vistazo a esta respuesta: ¿Cómo se puede montar una carpeta dentro de /sdcard con los permisos correctos?

Montaje

Pruebe a iniciar sesión como usuario Root con los permisos de montaje adecuados utilizando

su -mm

Asegúrese de que existe un directorio que recibe el montaje:

mkdir /mnt/arch1

También puede crear una carpeta vacía dentro de su almacenamiento interno y utilizar ese punto de montaje en su lugar si Apps no le permite navegar en el / Directorio root.

Monta tu partición ext4 usando

mount -t ext4 -o noatime /dev/block/mmcblk1p2 /mnt/arch1

mientras que mmcblk1p2 es la segunda partición de mi sdcard en mi caso. Usted puede reemplazar /mnt/arch1 con cualquier otro camino que desee.

Mi primera partición está formateada (y actúa como extSdCard) con FAT32 como reserva, para que las Apps escriban sus cosas allí mientras mi partición ext4 es "segura" y para evitar que los SOs formateen accidentalmente toda la tarjeta SD al insertarla.

Ahora deberías poder navegar dentro de ese punto de montaje usando tu terminal (con o sin root) o tus aplicaciones.

Para montar automáticamente la partición al inicio, puede utilizar esta línea

su -mm -c mount -t ext4 -o noatime /dev/block/mmcblk1p2 /mnt/arch

en Tasker, por ejemplo.

Información de desmontaje/montaje

Tenga en cuenta que montan puntos de -mm a su vez no son visibles para root "normal" (sin -mm ). Para desmontar la partición, tendría que entrar con -mm de nuevo y utilizar umount /dev/block/mmcblk1p2 o umount /mnt/arch1 de allí.

Comprobación de whoami no revelará estar conectado con o sin -mm .

Permisos de la aplicación

Edición 2020-06-03: Después de todos estos años usando este enfoque debo añadir que incluso con permisos rwx en mi partición especial ext4 sdcard, las apps pueden no ser capaces de leer los archivos a menos que la política SELinux esté configurada como "permisiva". Para una solución rápida dejo que Tasker ejecute su -c setenforce permissive en cada arranque. Necesito hacer esto de todos modos porque uso el procesamiento de efectos de audio ViPER4Android y no funcionaría sin la configuración permisiva. Debido a esto, me di cuenta de la dependencia permisiva hace poco.

Lo que no puedo responder

Desgraciadamente no tengo ni idea de cómo montarlo de forma que su partición ext4 se muestre como un verdadero almacenamiento externo por los gestores de archivos estándar. Tendrías que hacer el workaround creando un directorio dentro de tu almacenamiento interno mencionado anteriormente.

Cómo lo resolví

He experimentado el mismo problema. He pensado en el hecho de que otras aplicaciones no puedan acceder al soporte. Tal vez el usuario Root no se supone que montar particiones para su uso con aplicaciones de Android. Me di cuenta de un directorio llamado media_rw es propiedad de media_rw (sí, los mismos nombres) así que pensé en su como un media_rw usuario y aplicando los pasos anteriores.

Al leer la página de ayuda con su --help dentro de Android, me encontré con esta parte:

-m, -p,
-mm, --mount-master          connect to a shell that can manipulate the
                             master mount namespace - requires su to be
                             running as daemon, must be first parameter

Así que trató de iniciar la sesión como un usuario Root con el -mm en su lugar, monté mi partición desde allí y sorpresa - pude ver mis cosas en Total Commander y abrir archivos multimedia desde allí con VLC.

Mi dispositivo en concreto es el Planet Computers Gemini, usando Android 7.1.1 (Nougat) stock y rooteado con SuperSU. Editar 2020-06-03: Android 8.1 (Oreo rooteado con Magisk; mismo dispositivo) también.

1voto

rascalking Puntos 1422

@djsumdog y @Sopalajo de Arrierez Perdón por el retraso en la respuesta.

Las cosas se reorganizaron y racionalizaron. Al unificar los que utilizan el fstab archivos. Por ejemplo, el init , vold y la recuperación, todo bajo /fstab.<device> ahora. Algunos de los cuales es administrado por vold y sólo de la parte superior de mi cabeza suena como un problema de permisos porque con Root es como una anulación con su R/W poderes. Linux solía tener un problema con Android al formatear debido a esto pero no sé si se arregló.

" PUEDEN PROPORCIONAR ALMACENAMIENTO EXTERNO EMULANDO UN SISTEMA DE ARCHIVOS SIN PERMISOS Y SIN DISTINCIÓN DE MAYÚSCULAS Y MINÚSCULAS RESPALDADO POR EL ALMACENAMIENTO INTERNO. "

" Al configurar un dispositivo específico init.rc script, la variable de entorno EXTERNAL_STORAGE debe definirse como la ruta del almacenamiento externo primario. El /sdcard también debe resolverse en la misma ubicación, posiblemente a través de un enlace simbólico. Si un dispositivo ajusta la ubicación del almacenamiento externo entre las actualizaciones de la plataforma, se deben crear enlaces simbólicos para que las antiguas rutas sigan funcionando."

"Una posible implementación es la proporcionada por el demonio FUSE en system/core/sdcard que puede añadirse como un dispositivo específico init.rc servicio":

virtual sdcard daemon running as media_rw (1023)
service sdcard /system/bin/sdcard <source_path> <dest_path> 1023 1023
    class late_start

"¿Dónde? source_path es el almacenamiento interno de respaldo y dest_path es el punto de montaje de destino".

Referencia

0voto

srikanth Puntos 21

Gracias por este debate. Esto es lo que "más o menos" funciona en mi ordenador Android 5.1 TV:

su -mm -c mount -t ext4 -o noatime /dev/block/mmcblk0p1 /storage/sdcard1 &&  sleep 5 && /system/bin/vold
chown -R root:sdcard_r /storage/sdcard1
chmod 771 /storage/sdcard1

Digo "más o menos" porque esto todavía no es visto como una verdadera tarjeta de almacenamiento externo por Android o aplicaciones de gestión de archivos (y similares). Sin embargo, todas las aplicaciones pueden leer/escribir/atravesar el árbol de carpetas y hacer lo que necesiten. Usted NO tiene que ser Root excepto para hacer esto. Tal y como están las cosas para mí ahora, tengo que volver a emitir esto en cada reinicio de Android. Pero el uso de Tasker hace que esto sea bastante fácil de lograr.

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