Invocar /system/bin/sdcard manualmente a través de la terminal

Estoy tratando de montar una tarjeta SD con formato EXT4 bajo Cyanogenmod 13.1 (Android 6.0.1).

Hasta ahora, tengo scripts de configuración para montar la tarjeta /mnt/ext_sdcarddurante el arranque. Mi entendimiento actual es que el servicio "sdcard" debe invocarse para crear un montaje FUSE que apunte al punto de montaje real que eventualmente conducirá al escáner de medios al disco recién montado.

Seguir algunos hilos de foro y documentación más antiguos me llevan a este comando en la terminal:

service sdcard /system/bin/sdcard /mnt/ext_sdcard /mnt/test 1023 1023
    class late_start

Cuando ejecuto el comando (como root, por supuesto), falla con un estado de salida de 1y sin mensajes de error/salida.

Mi pregunta: ¿Estoy haciendo algo mal, o este comando está en desuso en 6.0.1 (el hilo de documentos/foro parecía estar relacionado con KitKat)? ¿Cuál es la sintaxis/argumentos correctos para usar este comando?

Respuestas (2)

¿Está poniendo este comando en un archivo init.*.rc? Tengo entendido que tendría esto en un init.extmount.rc por ejemplo. Esto requiere extraer y volver a empaquetar boot.img.

Como no tenía nada mejor que hacer, creé esto: https://github.com/BenBaltz/mountext

Es un zip flashable de recuperación para instalar su script descomprimiendo boot.img y volviéndolo a empaquetar con las modificaciones.

EDITAR Comandos de terminal

su -c mount -o bind /mnt/ext_sdcard /path/to/new/dir
Gracias Ben, revisaré tu guión. Además, sí, estoy usando este comando en el archivo principal init.rc actualmente
Probé tu comando en init.mountext..rc y obtuve service: Unknown command sdcard. Luego probé service call sdcard...cuál devolvió Service sdcard does not exist. También encontré dos instancias en ejecución sdcarden mi sistema y descubrí que fueron invocadas con /system/bin/sdcard -u1023 -g1023 -U0 /mnt/media_rw/8005-91F9 8005-91F9. ¿Este comando varía entre las ROM de Android?
@Jake No veo nada después de 'Tengo'.
@Jake ¿Esto es lo que decían los bootlogs? Tienes que reiniciar para que se ejecute.
No, lo ejecuté directamente en la terminal (como root). Prefiero ejecutarlos en la terminal hasta que esté seguro de que funcionan en lugar de parchear los archivos del sistema.
@Jake Eso no es posible. Si solo desea tener todos los archivos en su tarjeta SD normal, se puede ejecutar un montaje de enlace en un sistema en vivo. Puede usar mount -o bind /mnt/ext_sdcard /sdcard. No sé si puede crear un montaje de enlace en un directorio vacío, lo estoy probando ahora.

En la configuración de almacenamiento de Android 6+ :

El montaje de volúmenes físicos de almacenamiento externo está a cargo de vold, que realiza operaciones de preparación para preparar los medios antes de exponerlos a las aplicaciones.
...
Los servicios FUSE codificados se han eliminado de los init.rcarchivos específicos del dispositivo y, en cambio, se bifurcan dinámicamente voldcuando es necesario.

Por lo tanto, los sdcardservicios definidos en *.rclos archivos ya no son necesarios, ni storage_list.xmlse mantienen dentro framework-res.apk. En su lugar vold, administra completamente los dispositivos de almacenamiento definidos con bandera voldmanaged=en fstab. Vea más detalles en el viaje de almacenamiento de Android .

En Android 9, la compatibilidad con FUSE se eliminó por completo del sdcardbinario y se reemplazó con sdcardfs. sdcardfsse puede montar directamente usando mountel comando, por sdcardlo que no es necesariamente necesario. Sin embargo, desde Android 6 a 8 , el sdcardbinario debe montar un sistema de archivos emulado si se ejecuta con los argumentos adecuados. Puede ver el error al iniciar sesión logcat.

También puede usar una herramienta basada en FUSE de terceros bindfspara lograr lo mismo. Consulte los detalles en ¿Cómo vincular el montaje de una carpeta dentro de /sdcard con los permisos correctos?