¿Cómo puedo montar una tarjeta SD con formato ext4 con los permisos correctos (con root)?

9

Veo algunas menciones aquí de crear una tarjeta SD con formato ext4, pero no hay guía. Esta pregunta estrechamente relacionada sugiere que no hay forma de hacerlo, pero mi pregunta difiere en que mi teléfono está específicamente rooteado.

Formateé mi tarjeta como ext4 (tabla de particiones GUID); mi teléfono Cyanogenmod lo montó en /mnt/fuse/sdcard1. Seguí las instrucciones aquí para montar la tarjeta en /storage/sdcard1, creando el siguiente script en/data/local/userinit.sh

#!/system/bin/sh
REALMNT=/mnt/fuse/sdcard1_real
if ! [ -d "$REALMNT" ]; then
  mkdir "$REALMNT" || exit 1
fi
mount -t ext4 /dev/block/mmcblk1p1 "$REALMNT"
sdcard "$REALMNT" /storage/sdcard1 1023 1023 &

Reinicié e intenté copiar un archivo (usando ES File Explorer) y pegarlo en su directorio principal, que falló:

/storage/sdcard1/foo/bar.mp3: open failed: EACCES (Permission denied).

De hecho, puedo reproducir bien el archivo, así que puedo abrirlo. FWIW, cuando intento copiar desde el punto de montaje original ( /mnt/fuse/sdcard1), aparece un error ligeramente diferente:

Failed to copy the file bar.mp3

Estoy usando un Samsung Galaxy S3 con Cyanogenmod 10.2.0-i9300.

== EDITAR ==

su
ls -l /mnt/fuse
drwxrwxr-x media_rw media_rw   2014-03-04 22:08 sdcard1

Eso fue todo. No hay ninguno sdcard1_realen este directorio, ¿así que supongo que el script falla?

== EDIT2 ==

Intenté modificar el script para solucionar problemas. El script comienza bien, pero luego falla mkdir "$REALMNT"con el error /data/local/userinit.sh[6]: : not found.

== EDIT3 ==

Sé que el script no funciona, por lo que solucionarlo podría resolver mi pregunta, pero pensé que lo siguiente era interesante. Formateé mi tarjeta SD en mi computadora Linux y le transferí algunos archivos. Curiosamente, los errores de permiso solo ocurren en los subdirectorios que creé. En la raíz de la partición (vía /storage/sdcard1), ya tengo permiso de escritura.

Gavilán
fuente
1
Como root, ejecute ls -l /mnt/fuse/y ls -l /mnt/fuse/sdcard1_real. Luego edite su pregunta para incluir los resultados. Mi suposición es "permisos de archivo incorrectos", ya sea para el montaje o para el foo/directorio de la tarjeta. Recuerde, ext4 admite permisos completos de archivos * nix, incl. usuario y grupos.
Izzy
Escribe suen la terminal para obtener root. Es posible que deba confirmar la concesión del permiso por teléfono, si lo está haciendo por primera vez.
Chahk
O bien el script falla o no se ejecuta en absoluto. Es posible que desee agregar algunos resultados de depuración, por ejemplo echo Script executed > /mnt/fuse/sdcard1/test.log, y verificar si se está ejecutando. Si es así, haga la línea anterior a la última mount -t ext4 /dev/block/mmcblk1p1 "$REALMNT" 2> /mnt/fuse/sdcard1/test.logy verifique el mensaje de error. O ejecutar la secuencia de comandos de forma manual para ver: su /data/local/userinit.sh.
Izzy
@Izzy touchmuestra que el script se está ejecutando. Intenté ejecutar el script manualmente con su /data/local/userinit.sh, pero esto falló. También probé su echo foo, y aparece un error similar: Unknown id: echo.
Sparhawk
En cuanto a su EDIT3, vea mi primer comentario: ext4 admite permisos completos de archivos * nix, incl. usuario y grupos . Ha creado esos directorios con un usuario que no existe en su dispositivo Android, por lo que pertenecen a "usuario desconocido / grupo desconocido". Si no otorgó acceso de escritura al "mundo", solo el root podría escribir allí. Debería familiarizarse con los conceptos básicos de * nix al usar un sistema de archivos de este tipo en medios portátiles;) En cuanto al script, nuevamente sugiero agregar más información de depuración, por ejemplo, usar echopara generar cada comando antes de ejecutarlo y redirigir la salida de error con 2>>.
Izzy

Respuestas:

6

Supuestamente esto se solucionó hace varios meses, pero la gente todavía informa problemas. Puedo leer elementos en la tarjeta, pero no tengo permiso de escritura. Para solucionarlo, combiné estrategias de algunas fuentes .

  1. Tarjeta de partición con tabla de partición MS-DOS y sistema de archivos ext4. Usé GParted en mi computadora de escritorio (Linux).
  2. Inserta la tarjeta en tu teléfono. (Probablemente no tendrá acceso de escritura ahora).
  3. Abra el emulador de terminal , instalado por defecto en Cyanogenmod.
  4. Escriba lo siguiente (recomiendo el teclado WiFi para grandes bloques de texto). Otorgue privilegios de raíz al emulador cuando los solicite.

Las indicaciones $e #indican, así que no las escriba.

$ su
# chown media_rw:media_rw /mnt/media_rw/sdcard1
# chmod g+w /mnt/media_rw/sdcard1

Esto cambia los permisos de la tarjeta SD. El propietario y el grupo cambian de systema media_rw, y también le da acceso de escritura al grupo.

Gavilán
fuente
need -R for recursif chown -R media_rw: media_rw / mnt / media_rw / sdcard1
m3asmi
1

¿No está seguro de si es de alguna ayuda, pero posiblemente el problema es que está intentando montar en el lugar equivocado? Este es mi script de trabajo que funciona en un S3 mini con CM11:

#!/system/bin/sh
REALMNT=/mnt/media_rw/sdcard1
if ! [ -d "$REALMNT" ]; then
mkdir "$REALMNT" || exit 1
fi
mount -t ext4 -o rw,noatime /dev/block/mmcblk1p1 "$REALMNT"
sdcard "$REALMNT" /storage/sdcard1 1023 1023 

La ubicación REALMNT ya existía, por lo que, por supuesto, nunca se llamó al mkdir. Y media_rw / sdcard1 ya es propiedad de media_rw

También tuve que actualizar /etc/permissions/platform.xml para incluir: <group id="media_rw"/> en: <permission name="android.permission.WRITE_EXTERNAL_STORAGE">

usuario59177
fuente
Gracias. Me había dado por vencido con esto, ya que también tenía un uso elevado de la batería con mi script. Como está arreglado en el baúl, ya no me molestaré con una solución alternativa. Gracias sin embargo, y +1.
Sparhawk
@Sparhawk: no estoy seguro de qué versión de CYM utiliza, pero mi tarjeta SD no se monta automáticamente.
Luis A. Florit
@ LuisA.Florit No estoy seguro de si querías responder a esta respuesta . De todos modos, estoy usando 11-20140804-SNAPSHOT-M9-i9300. He publicado más información en otra respuesta .
Sparhawk
@Sparhawk: Mi tarjeta ni siquiera está montada, y el procedimiento de montaje en Configuración falla. Tal vez el problema esté relacionado con mi pregunta aquí ( suno se puede montar ): android.stackexchange.com/questions/82089/… `Uso cm-11-20140804-SNAPSHOT-M9-mondrianwifi.zip.
Luis A. Florit
@ LuisA.Florit No estoy muy seguro. Tal vez hacer una nueva pregunta?
Sparhawk