Veo algunas menciones aquí sobre la creación de una tarjeta SD con formato ext4, pero ninguna guía. Este pregunta estrechamente relacionada sugiere que no hay manera 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 la montó en /mnt/fuse/sdcard1
. He seguido 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 el Explorador de Archivos ES) y pegarlo en su directorio padre, lo cual falló:
/storage/sdcard1/foo/bar.mp3: open failed: EACCES (Permission denied).
En realidad puedo reproducir el archivo sin problemas, así que puede abrirlo. Por cierto, cuando intento copiar desde el punto de montaje original ( /mnt/fuse/sdcard1
), obtengo un error ligeramente diferente:
Failed to copy the file bar.mp3
Estoy usando un Samsung Galaxy S3 con Cyanogenmod 10.2.0-i9300.
\==EDIT==
su
ls -l /mnt/fuse
drwxrwxr-x media_rw media_rw 2014-03-04 22:08 sdcard1
Eso fue todo. No hay sdcard1_real
en este directorio, así que supongo que el script está fallando?
\==EDIT2==
He intentado modificar el script para solucionar el problema. El script comienza bien, pero luego falla en mkdir "$REALMNT"
con el error /data/local/userinit.sh[6]: : not found
.
\==EDIT3==
Sé que el script no funciona, así que arreglarlo podría resolver mi duda, pero me pareció interesante lo siguiente. He formateado mi tarjeta SD en mi ordenador Linux, y he transferido algunos archivos a ella. Curiosamente, los errores de permiso sólo se producen en los subdirectorios que he creado. En root de la partición (a través de /storage/sdcard1
), ya tengo permiso de escritura.
1 votos
Como Root, ejecute
ls -l /mnt/fuse/
yls -l /mnt/fuse/sdcard1_real
. Entonces editar su pregunta para incluir los resultados. Mi adivinar es "permisos de archivo incorrectos" - ya sea para el montaje, o para elfoo/
directorio en la tarjeta. Recuerde que ext4 admite todos los permisos de archivo de *nix, incluidos los de usuario y grupos.0 votos
Usted escribe
su
en la terminal para obtener el permiso Root. Es posible que tengas que confirmar la concesión del permiso en el teléfono, si lo haces por primera vez.0 votos
O bien el script está fallando, o no se ejecuta en absoluto. Es posible que desee añadir alguna salida de depuración, por ejemplo
echo Script executed > /mnt/fuse/sdcard1/test.log
y comprueba si está en marcha. Si es así, haz la penúltima líneamount -t ext4 /dev/block/mmcblk1p1 "$REALMNT" 2> /mnt/fuse/sdcard1/test.log
y comprueba el mensaje de error. O ejecute el script manualmente para ver:su /data/local/userinit.sh
.0 votos
@Izzy
touch
muestra que el script se está ejecutando. He probado a ejecutar el script manualmente consu /data/local/userinit.sh
Pero esto no funcionó. También intentésu echo foo
y obtener un error similar:Unknown id: echo
.0 votos
En cuanto a su EDIT3, vea mi primer comentario: ext4 admite todos los permisos de archivo de *nix, incluidos los de usuario y grupos . Has creado esos directorios con un usuario que no existe en tu dispositivo Android, por lo que pertenecen a "usuario desconocido / grupo desconocido". Si no has concedido acceso de escritura a "world", sólo Root podría escribir allí. Deberías familiarizarte con esos fundamentos de *nix cuando utilices un sistema de archivos de este tipo en medios portátiles ;) En cuanto al script, vuelvo a sugerir que se añada algo más de información de depuración, por ejemplo usando
echo
para dar salida a cada comando antes de que se ejecute, y redirigir la salida de errores con2>>
.0 votos
@Izzy ¿Si entiendo bien, el propósito del script es arreglar estas inconsistencias de permisos? I hizo hacer más depuración, pero tal vez EDIT2 no fue lo suficientemente claro. El script corrió hasta
exit 1
, luego falló con el error indicado.0 votos
¿Podría ser que el script se ejecute demasiado pronto, y
/mnt/fuse
no está ahí cuando intentasmkdir
(intente poner unls /mnt
antes de lamount
)? Si es así, unmkdir -p "$REALMNT" || exit 1
podría trabajar alrededor de eso - pero no estoy seguro de los efectos secundarios cuando el sistema intenta crear/mnt/fuse
más tarde y ya existe.0 votos
Relacionado: ¿Cómo se puede montar una carpeta dentro de /sdcard con los permisos correctos?
0 votos
@IrfanLatif Ya no tengo un teléfono con tarjeta SD, pero a diferencia de tu respuesta en el enlace, no recuerdo ningún problema con "cada aplicación creará archivos con su propio UID", según mi respuesta más abajo. Sin embargo, ya no puedo comprobarlo por desgracia. De todos modos espero que tu enlace sea útil para algunos aquí.