[GUIA] CISF&BIND - Usar unidad de red como "sdcard" en android

CIFS & DirectoryBind (& Sambadroid), un paquete de utilidades con utilidades muy interesantes. [CIFS&BIND]
Imagen


Uso de este artículo

Se permite utilizar este articulo, ya sea copiandolo entero o partes de el, o referenciándola mediante un link, a cualquiera que lo desee, con la única condición de que se mantenga el autor y un enlace a la fuente original de este artículo, y que se encuentra en mi blog.

Para actualizaciones sobre este artículo, sugiero visitar el enlace mencionado anteriormente

**** NUEVO SCRIPT ****

He generado un script que resume en un solo fichero lo necesario para poder habilitar un sistema de directorios con CIFS&BIND. Al final de este articulo he generado una sección llamada Script CIFS&BIND, donde explico lo necesario para hacer funcionar este script-

Introducción
Hasta hace poco venía hablando en foros sobre el uso de algunas aplicaciones que, en mi uso diario, resultaban tan normales y "triviales", que no me habia parado a pensar que quizás existan personas que no se enteran de lo que comento, o no pueden seguirme por que no han tenido oportunidad de probar estas utilidades, o simplemente las conocen pero no ven en que pueden serles útiles.

Este pequeño articulo será para explicar algunas de las que estoy utilizando y que, en mi opinión, resultan de lo mas interesantes y prácticas, además de que intento explicar un uso un poco mas "avanzado" en términos de cómo implementar estas herramientas de manera de generar un escenario de ejecución y/o pruebas interesante en un entorno de dispositivos Android. En foros, me referiré a este sistema como Cifs&Bind, por si alguien me quiere hacer alguna pregunta al respecto.

¿Para que sirve todo esto?
Por si alguien no se aclara para que sirve todo esto, lo diré de una manera mas bien simple: Instalar y cargar juegos y aplicaciones con sus datos a una unidad de red, para no tener que utilizar la memoria de nuestro dispositivo android.

Un ejemplo práctico de uso, cuando recibo un dispositivo para probarlo y hacer una review, lo primero que verifico es si acaso tiene soporte CIFS. En caso de tenerlo, simplemente enlazo el directorio que tengo preparado y en unos pocos minutos ya tengo instalado todos los programas, juegos (con sus datos incluídos), ficheros de multimedia, etc, para probar la tablet,. En pocas palabras, en unos 10 minutos tengo el sistema totalmente instalado, con unas 100 aplicaciones instaladas, y todo listo para ejecutar en el dispositivo (Tablet, consola, android tv, móvil, etc).

¿Y para que podría ser útil para un usuario normal, que no prueba tantos dispositivos de manera tan frecuente?, pues hay una razón importante, y es que si deseas "limpiar" tu tablet y empezar de cero, ya sea flasheando o formateando la sdcard interna, o volviendo a los valores de fábrica, en pocos minutos puedes tener tu dispositivo android limpio, funcional y con las aplicaciones actualizadas, y lo mas importantes, sin descargar nada de internet. Esto significa que podrías llevarte el contenido del directorio instalado en un disco duro, pendrive, etc, y no perder Megas de tu tarifa de datos, para descargar datos de una aplicación (a excepción de que descargues una actualización), y simplemente utilizar la conexión de datos de, por ejemplo, tu movil o tablet, para verificar licencias y ese tipo de cosas.

Como ya se puede suponer, este sistema es bastante "flexible", ya que con unos pocos cambios se podría enlazar a un dispositivo USB, o a una microSD, etc. y toda la estructura seguiría siendo válida.

Todo este sistema de directorios surgió como idea base cuando estaba realizando el firmware Recustom de la JXDS7300B, y he seguido implementando la idea, extendiéndola de manera de hacerla mas práctica, pero no por eso mas complicada (que no lo es, aunque parezca lo contrario)

Para quienes tengan conocimientos avanzados de Android, estaré encantado de recibir vuestros comentarios/críticas sobre lo que expongo. Mis conocimientos están basados en mi experiencia utilizando y probando dispositivos, pero evidentemente puedo cometer errores, y por tanto agradezco cualquier correccción al respecto que se pueda hacer.

Este artículo está dedicado principalmente a los usuarios con menos conocimientos, pero con inquietudes de hacer cosas, y a los cuales intento explicarles las cosas que hago en términos que podamos entender todos. (o lo intento al menos)

Nota: La primera parte de este artículo intenta explicar de donde sale la idea y como llego a implementarla. La seguna parte comenta en pocos pasos como implementarla, asi que si quieres evitarte mi explicación, que mas que explicar incluso puede llegar a confundir, puedes saltarte directamente a la última sección de este artículo (Descargas y puesta en funcionamiento), con descargas y explicaciones breves sobre los pasos a seguir.

Nota2: Aunque intento explicar el procedimiento lo menos técnico que puedo, es posible que para algunas cosas se necesiten unos datos mínimos básicos para poder entender el procedimiento. Por favor, si es necesario usad google para buscar información en los puntos que no explico en detalle.

Si quieres la explicación larga, abre el siguiente spoiler
DirectoryBind

Imagen

Esta aplicación es muy "simple" en cuanto a lo que hace, y es tan simple, que cuesta imaginar para que podríamos necesitarla. Dentro de mis instalaciones en Android, resulta ser una de las aplicaciones básicas y fundamentales, por el tiempo que me ahorra a la hora de instalar aplicaciones y ejecutarlas, en distintos dispositivos, y no perder tiempo en la descarga de los ficheros, etc.

Esta aplicación genera "enlaces simbólicos", o "atajos directos". Para quienes entiendan mejor la terminología de Windows, es como poner un acceso directo de un elemento en el escritorio, pero que en realidad se encuentra en otra parte del disco.

En este caso, DirectoryBind solo hace enlaces (accesos directos) de directorios, asi, cuando el sistema accede a una carpeta que está enlazada, en realidad va a otra carpeta, y mira/actualiza su interior.

para no complicar el tema, voy a poner un ejemplo de como podríamos utilizar este programa.

Imaginemos que tenemos un dispositivo android, con un HUB USB conectado con 5 discos duros/pendrives, y en cada uno de ellos tenemos una carpeta con roms de varios sistemas.

  • HDD1
    • /myroms/psx
    • /myroms/nes
  • HDD2
    • /games/emulation/mame
    • /games/emulation/gba
    • /games/emulation/nes
    • /mydownloads/test/mameroms
  • HDD3
    • /roms/psx
    • /roms/n64

  • HDD4
    • /downloading/mamesroms/emule/mame

  • HDD5
    • /test1/nes
    • /n64/mygames/
en este ejemplo, tenemos varios sistemas repartidos por cada disco.
Si cargamos un emulador, para buscar un juego de nes, por ejemplo, tendríamos que navegar entre varios dispositivos, carpetas, para dar con la rom que queremos.

Obviando que podemos simplemente organizar los directorios, voy a utilizar DirectoryBind para generar una estructura que me sea mas fácil para acceder a estos contenidos. En mi caso, voy a generar la estructura ordenando por sistemas, de tal manera que cuando acceda a la microsd del dispositivo android, tenga carpetas de roms por sistema.

En la microsd, genero la estructura:

  • /microsd/roms/nes
    • hdd1
    • hdd2
    • hdd5
  • /microsd/roms/psx
    • hdd1
    • hdd3
  • /microsd/roms/n64
    • hdd3
  • /microsd/roms/gba
    • hdd2
  • /microsd/roms/mame
    • hdd2
    • hdd2b
    • hdd5
luego, en directorybind, enlazo los siguientes enlaces:
  • /microsd/roms/nes
    • hdd1 -- /myroms/nes
    • hdd2 -- /games/emulation/nes
    • hdd5 -- /test1/nes
  • /microsd/roms/psx
    • hdd1 -- /myroms/psx
    • hdd3 -- /roms/psx
  • /microsd/roms/n64
    • hdd3 -- /roms/n64
  • /microsd/roms/gba
    • hdd2 -- /games/emulation/gba
  • /microsd/roms/mame
    • hdd2 -- /games/emulation/mame
    • hdd2b -- /mydownloads/test/mameroms
    • hdd4 -- /downloading/mamesroms/emule/mame

con la estructura anterior, lo que he hecho es "ordenar" los discos que tenía sin normalizar, y me es mas fácil buscar información cuando estoy dentro de una aplicación, por que si estoy en Retroarch, y busco un juego de mame, simplemente tengo que abrir la carpeta:

  • /microsd/roms/mame

y dentro solo me encontraré con los directorios de que he generado por cada disco duro/directorio:

  • hdd2
  • hdd2b
  • hdd4

y dentro de estos directorios, solo hay roms, por lo que es mucho mas fácil buscar una rom específica, si no está en el directorio "hdd2", vuelvo atrás solo un nivel y voy al siguiente directorio "hdd2b", y lo mismo para "hdd4", en vez de estas cambiando entre "HDD2/games/emulation/mame", "HDD2/mydownloads/test/mameroms" o "HDD4/downloading/mamesroms/emule/mame".

Otra ventaja que tiene la generación de estructuras con DirectoryBind, es que si un dispositivo/directorio no está disponible, no se genera el enlace, por lo que para nosotros veriamos en nuestro caso los directorios limpios.

Por poner un ejemplo, si en el mismo ejemplo anterior tenemos que el disco duro HDD4 no lo hemos conectado, entonces el directorio quedaría así:

  • /microsd/roms/mame
    • hdd2 - /games/emulation/mame
    • hdd2b -- /mydownloads/test/mameroms
    • hdd4 -- /microsd/roms/mame/hdd4
en este caso, hdd4 no mostraría ningún fichero, por que el enlace hacia el disco duro "HDD4/downloading/mamesroms/emule/mame" no se ha realizado.
A esto le podemos sacar una ventaja y funcionalidad muy interesante, que paso a detallar.

Tener 2 (o mas) Perfiles de contenidos, segun como nos conectemos

Imagen


Supongamos el siguiente escenario:

  • /microsd/roms/mame -> HDDUSB/myroms/mame

tengo un directorio de roms, que se alimenta de lo que se encuentra en el disco duro conectado por USB, y en el directorio de roms especificado.
Ahora, supongamos que estoy con una tablet, con ese disco duro conectado, y tengo que salir. Evidentemente sería muy molesto tener que ir cargando con la tablet, y un disco duro conectado por USB para poder disfrutar de mis roms de mame.

Podría copiar en un directorio algunas roms (por ejemplo, street fighter), y desde el emulador cargarlas. Evidentemente es la mejor de las soluciones, pero voy a ir un poco mas allá, y la rom del street fighter, la voy a copiar en la ruta:

  • /microsd/roms/mame/romstreetfighter.zip

Bien, ahora que sucede?, si tengo conectado el disco duro HDDUSB y habilito el DirectoryBind, voy a ver el contenido del disco duro dentro de la carpeta de roms de mame, pero NO voy a ver "romstreetfighter.zip", a no ser que el disco duro (la carpeta del disco) tenga esta rom, que podria ser algo como esto:

  • HDDUSB/myroms/mame/psychicsoscar.zip
  • HDDUSB/myroms/mame/rabiolepus.zip
  • HDDUSB/myroms/mame/marvelvscapcom.zip
  • HDDUSB/myroms/mame/romstreetfighter.zip
  • HDDUSB/myroms/mame/ghostngoblins.zip

Pero la gracia viene cuando desconecto el disco duro y/o deshabilito el DirectoryBind, ya que no voy a ver el contenido enlazado del disco (las 5 roms anteriores), pero si el contenido real de la carpeta (1 rom), por lo que pasaré de tener todas las roms que antes veía, a solo las que tenga copiadas aquí, que en este caso es la romstreetfighter.zip

Asi, en este directorio puedo copiar varias roms que me interesa llevar "encima", para cuando no tengo el disco duro conectado. No tengo necesidad de llevarme el directorio completo de roms de mame, solo algunas, para usar mientras no estoy con el disco USB conectado a la tablet.

Por tanto, para este ejemplo, cuando tengo habilitado correctamente el DirectoryBind, tendré 5 roms (Perfil 1), y cuando esté deshabilitado, sólo 1 (Perfil 2).
De aquí en adelante, ya es cuestión de cada uno el ver la utilidad práctica de estas configuraciones, pero se pueden aplicar a todos los ámbitos: películas, música, instalación de aplicaciones, etc.

Alternativa al Swap de la microSD

Imagen


Cuantas veces no he oído expresiones similares a "no tengo espacio en el teléfono, pero si acabo de instalar una microsd de 32GB que está nueva!", y claro, es normal que suceda esto, y es que el sistema android tiene configurado de forma predeterminada el uso del punto de montaje /sdcard/ como su "disco duro", y por lo general esta muchos dispositivos vienen con una unidad interna de memoria, que está asociada a ese directorio (/sdcard/).

Generalmente, esta unidad tiene muy poca capacidad, y con 2 o 3 juegos instalados, ya no tienes espacio para poder seguir instalando nada mas, y tienes que eliminar algun juego y sus datos asociados, para poder seguir instalando mas cosas. (aún cuando hayas instalado una microSD de muchos GB que esté recién formateada)
La solución general para esto es, por norma, editar el fichero vold.fstab, y realizar lo que se llama un "swap", para cambiar la memoria interna, por la microsd, y que sea ésta la que se destine para instalación de datos de programas/juegos. Pero este cambio no siempre se puede hacer, y requiere de algunos conocimientos, aunque no muy avanzados, pero si no se sabe lo que se hace, podrían dejar la tablet en un estado que no permita su uso normal.

Para este caso, una forma de solucionar el problema es generar un enlace de los directorios mas utilizados en el punto /sdcard/, y enlazarlos con otros en una microsd o el medio externo que queramos.

Los directorios que mas se utilizan en una instalación Android standard, pueden ser:

  • /sdcard/android (aquí se descargan e instalan la mayoría de aplicaciones, y sobre todo juegos. esta carpeta es, por lo general, la que mas espacio ocupa dentro de la microsd y está conformada por los directorios "data" y "obb")
  • [b]/sdcard/DCIM[/b] (Directorio donde se almacenan las fotografías tomadas con el dispositivo)
  • [b]/sdcard/pictures[/b] (Directorio donde se almacenan generalmente las capturas de pantalla que realizamos en el dispositivo)
  • [b]/sdcard/gameloft[/b] (Directorio donde algunas aplicaciones y juegos mas antiguos de Gameloft, descargaban sus datos. Era un directorio que ocupaba mucho espacio generalmente)

asi, y poniendo en práctica lo que he comentado hasta ahora sobre DirectoryBind, lo que genralmente hago en mis instalaciones (tablets, smartphones, etc) es hacer el siguiente enlace.

Suponiendo que ma microsd está montada en la ruta "/mnt/external_sdcard/"

/sdcard/android -- /mnt/external_sdcard/android
/sdcard/DCIM -- /mnt/external_sdcard/DCIM
/sdcard/pictures -- /mnt/external_sdcard/pictures
/sdcard/gameloft -- /mnt/external_sdcard/gameloft

Nota: La ruta de la microsd puede variar de un dispositivo a otro. Para el ejemplo anterior he utilizado "/mnt/external_sdcard", pero algunas de las rutas frecuentes también pueden ser:

  • /mnt/sdcard/ext_sd
  • /mnt/ext_sd
  • /mnt/sdcard1
  • /mnt/microsd

Otra ventaja de esto es que si tenemos 2 dispositivos (2 teléfonos por ejemplo) y nos queremos pasar de uno a otro, pero no tener que descargar los datos de las aplicaciones (aunque hay que instalar los apk, por lo menos), simplemente basta con tener los directory bind correspondientes en cada uno de ellos y quitar la microsd de un dispositivo para insertarla en el otro, y ya tendremos pasados los datos de juegos, etc, sin necesidad de descargarlos nuevamente.

CIFS
Imagen


Este protocolo/módulo/capa/etc (no se muy bien como definirlo, pero para el caso nos dará igual ya que es mas importante saber como usarlo) nos permite generar enlaces a directorios compartidos en la red, de manera que podamos acceder a ellos de forma directa, como parte del sistema de ficheros de Android.
Para explicarlo mejor, sobre todo para quienes sean menos técnicos, voy a utilizar un ejemplo.

Suponiendo que tenemos un directorio compartido en nuestro PC, y dentro tenemos una película que ocupa 2GB de espacio.
En Android, existen alternativas para poder ver estas unidades de red, como puede ser ES File Explorer, que puede escanear y conectarse a estas unidades de red. Hasta aquí no vemos problemas, pero si intentamos abrir la película que tenemos en esta carpeta compartida (con el mismo es file explorer), nos daremos cuenta que muy probablemente la aplicación se "congele" y no responda por un buen rato.

Bueno, en realidad no es que tenga problemas, sino que como le he mos dicho que queremos abrir el vídeo, lo que hace el sistema es copiar el fichero entero a nuestro dispositivo para, a continuación, abrirlo, y con todo lo que supone copiar un fichero de 2GB por red, ver si tenemos espacio en la microsd para almacenar el fichero, etc.
¿Por que hace esto el sistema? básicamente, por que las aplicaciones NO tienen acceso a estas unidades de red, ya que para ellas no existe dicha unidad. Solo el ES File Explorer (o la herramienta que estemos utilizando) serán capaces de acceder a este recurso y su contenido, por lo que para dejarlo a disposición del resto de aplicaciones (para visualizar su contenido, por ejemplo), lo mejor que puede hacer ES File Explorer es copiar el contenido que el puede acceder (recurso de red) y dejarlo en alguna parte que el sistema si pueda acceder a el sin problemas (la microsd, por ejemplo)

La herramienta ES File Explorer está muy bien para algunas cosas, pero no es práctica para otras como el ejemplo que antes he comentado.
Aquí es donde vemos la principal diferencia que puede suponer el utilizar CIFS, ya que esta herramienta permite conectar una unidad compartida, pero al mismo tiempo la monta como parte de su propio sistema de ficheros, por lo que está disponible para que cualquier aplicación acceda a ella directamente. Así, en el mismo ejemplo anterior, si con ES File Explorer por ejemplo vamos a la carpeta:

  • /mnt/cifs/recursocompartido

Al cargar la película, veremos que se lanzará inmediatamente el reproductor que tengamos instalado, y la reproducción empezará también. Como el sistema puede acceder directamente al contenido, no es necesario realizar una copia de la película para, posteriormente realizar su visualizado.
El mismo caso para cargar una rom o iso desde un emulador. Imagina estar en un emulador de PSX, y quieres cargar la ISO que has generado de tu Tekken3 (sin rippear, una iso completa)... y claro, son 640MB de datos... y le das a ejecutar y se toma 15 minutos en copiar el ISO correspondiente para, a continuación, ejecutarlo (y eliminar la iso temporal que ha copiado localmente, cuando hayas terminado de utilizarla).

Con CIFS, simplemente ejecutas la ISO de forma directa, y "rápida" (sin la tardanza en esperar a que empiece la emulación).

Uso extendido de CIFS

Imagen

Vamos a sumar lo que he comentado hasta ahora de DirectoryBind y del Mount Manager (para CIFS)
Tambien voy a asumir que el sistema tiene soporte para CIFS (no todos los sistemas tienen soporte, esto ya es cuestión de cada rom/firmware)

Antes de seguir, debo aclarar que he decidido utilizar el programa Mount Manager, por que la alternativa mas conocida "Cifs Manager" me ha generado problemas a la hora de escribir datos en los recursos compartidos en red, pero con Mount Manager no he tenido estos problemas, basicamente por que los recursos los conecta en el modo que le indiquemos (por defecto, están en lectura/escritura, por lo que no hay que hacer nada especial). Además, este programa permite cargar módulos CIFS, sin tener necesidad de modificar scripts de arranque del dispositivo, lo que es de agradecer sobre todo para usuarios mas novatos.

Imagen


Eso sí, no todos los dispositivos vienen con el módulo CIFS pre-cargado, por lo que es cuestión de cada usuario buscar información al respecto. (cada dispositivo tiene su propio módulo, por lo que no sirve cargar uno "genérico". Pero por probar, se pueden buscar módulos y tratar de cargarlos con este programa, por si alguno de ellos es "compatible")

Por un lado, ya sabemos como enlazar directorios para que el sistema acceda a ubicaciones que no son las que realmente cree que son.
Por otro lado, podemos generar ubicaciones remotas, pero que el sistema vea como locales, con lo que las aplicaciones acceden directamente a estos contenidos.
Y lo que viene ahora es bastante obvio creo yo, y es que podemos "generar" una "microsd"... remota.

En un PC, vamos a crear una carpeta llamada "ANDROIDHDD" (en mi caso, D:\ANDROIDHDD) y la vamos a compartir con ese mismo nombre (estoy asumiendo que estamos en windows. Si es en linux o similar, compartir el recurso de red por medio de Samba)

Dentro vamos a crear las siguientes carpetas:

D:\ANDROIDHDD\android\data_COMMON
D:\ANDROIDHDD\android\obb_COMMON
D:\ANDROIDHDD\Romsets
D:\ANDROIDHDD\Romsets\Mame
D:\ANDROIDHDD\Romsets\Mame\Mame0.37b11
D:\ANDROIDHDD\Romsets\Mame\Mame0.139


Nota: Esta es una sugerencia de estructura. He puesto el ejemplo de los Mame, para separar los romsets y así poder asignarlos mas fácilmente en el uso de emuladores, dependiendo del tipo de romset que utilizan.
Luego, en el dispositivo, vamos a abrir el Mount Manager (previamente instalado desde el market), y conectamos el recurso compartido. Para este ejemplo, pondré como IP de ejemplo una común dentro de una instalación de red normal, la 192.168.0.2, que será la de nuestro PC. En el caso de seguir este ejemplo, cambiar esta IP por la del pc que estéis usando.
Nota: El recurso DEBE estar compartido con un usuario y password, con permisos de escritura. Si no hay ninguno, crear un usuario/password específico para compartir esta carpeta. Para este ejemplo, el usuario será ANDROIDUSER y la password ANDROIDPASS. En vuestro caso, usad un usuario y password propios. Esto no afectará al resto del uso de esta guía.
recurso: 192.168.0.2/ANDROIDHDD/punto de montaje: /mnt/cifs/ANDROIDHDD

En la pantalla, hay un botón "+" a la derecha. Hacer click en el y en la ventana siguiente seleccionar "User".
Aparecerá una nueva variable "User" y pondremos lo siguiente:

User: ANDROIDUSER
Dar denuevo al botón "+" da la derecha, seleccionar "Password" y poner lo siguiente:

Pass: ANDROIDPASS
Dar al botón "Save" para volver a la ventana anterior, donde veremos el nuevo punto de montaje CIFS que hemos creado.
Imagen

Una vez generado el punto de acceso, lo activamos, dando un toque sobre la línea que acabmos de crear en el Mount Manager. El icono de la derecha se pondrá en verde si hemos conectado todo correctamente. (si está en rojo, verificar los datos)

Imagen


Finalmente, vamos a generar una estructura con DirectoryBind, y vamos a enlazar algunos directorios:

/mnt/sdcard/cifs/ANDROIDHDD/ -- /sdcard/ANDROIDHDD/
/sdcard/ANDROIDHDD/Android/data_COMMON/ -- /sdcard/Android/data/
/sdcard/ANDROIDHDD/Android/obb_COMMON/ -- /sdcard/Android/obb/
/sdcard/ANDROIDHDD/Romsets/ -- /sdcard/<b style="background-color: orange;">Romsets[/b]/
/sdcard/Romsets/Mame/Mame0.37b11/ -- /sdcard/ROMs/MAME4all/roms/
/sdcard/Romsets/Mame/Mame0.139/ -- /sdcard/ROMs/MAME4droid/roms/

Explicación de los enlaces

ANDROIDHDD : Será un enlace interno que utilizaremos dentro del propio DirectoryBind, para ahorrarnos pasos si necesitamos cambiar la redirección de un servidor a otro.

Con este directorio, estamos generando un enlace que entenderemos como ANDROIDHDD (o el nombre que sea), y que apuntará a la dirección de red que tengamos compartida por CIFS.

Luego, cada subdirectorio que necesitamos, dependerá de este directorio principal para enlazar correctamente.

Ejemplo:

Tengo 2 discos duros. Uno está en mi casa y el otro está en la casa de un amigo.

En mi casa, el recurso compartido es:192.168.0.2/ANDROIDHDD
En casa de mi amigo el recurso compartido es:192.168.3.12/SHAREDATA

Para mi caso, en el Mount Manager me basta con tener ambos recursos conectados, por ejemplo, de esta manera:
192.168.0.2/ANDROIDHDD -- Este será mi recurso en casa, que llamaré HDD_HOUSE
192.168.3.12/SHAREDATA -- Este será mi recurso en casa de mi amigo Pepe, que llamaré HDD_PEPE

por lo que la estructura cifs quedará en :
/sdcard/cifs/HDD_HOUSE
/sdcard/cifs/HDD_PEPE

luego, tengo 2 alternativas para poder reconfigurar mi dispositivo:

Edito el fichero directorybind, y si estoy en casa pongo:
/mnt/sdcard/cifs/HDD_HOUSE/ -- /sdcard/ANDROIDHDD/

Edito el fichero directorybind, y si estoy en casa de Pepe pongo:
/mnt/sdcard/cifs/HDD_PEPE/ -- /sdcard/ANDROIDHDD/

el resto no debo cambiar nada, por que los directorios enlazados en DirectoryBind, están enlazados al directorio principal ANDROIDHDD, y por lo tanto no se ven afectados por el cambio.

luego, la siguiente alternativa, que es la mas práctica, es agregar las entradas correspondientes a cada conexión en el fichero directorybind_conf.csv, y activar solo la redirección que necesitemos, por ejemplo:

Imagen


En este ejemplo, he puesto varios recursos compartidos para que se vea el efecto buscado.Asimismo, he puesto un recurso compartido en blanco, para hacer una línea de división entre los enlaces principales (ANDROIDHDD) y los que dependen de el.

Activamos los enlaces con DirectoryBind, y ya tenemos nuestra microSD remota, donde se descargarán los datos de las aplicaciones y juegos que instalemos en el dispositivo.

Hay que señalar que este sistema será eficiente o no, dependiendo de la calidad de la red que nos encontremos. Recordar que una conexión USB puede tener una tasa de transferencia de 480mb/s, mientras en una red como en mi caso, puede oscilar entre 54mb/s a 11mb/s (en mi caso, tengo el PC en una posición que recibe una muy mala señal), y que por tanto estamos hablando de que en casi cualquier escenario vamos a perder mucha velocidad de transferencia (en el mejor de los casos, quizás tengamos una red standard cableada de 100mb/s, o conexiones wifi de 150mb/s o 300 mb/s, pero tomando como standard los 100mb/s, estamos hablando de una velocidad de cerca de un 25% de la que puede ofrecer un dispositivo USB)

Aún asi, la diferencia de carga de una aplicación puede ser que si antes demoraba 20 segundos en cargar, ahora se tome 50, pero en mi caso, compensa sin problemas por el ahorro de espacio que eso supone. Esta velocidad dependerá única y exclusivamente de la velocidad general de nuestra red, asi que a la hora de decidir donde montar el recurso compartido, mis recomendaciones son que sea en un equipo que tenga una cobertura excelente WIFI, una antena/receptor WIFI de alta velocidad, y en su defecto, conectarlo a la red cableada de casa, que nos dará por lo menos 100mbs de transmisión, que es menos de la cuarta parte de un dispositibo USB (480mbs), lo que implica tener que esperar 4 veces mas por que un programa arranque, pero creo que no es mucho problema, si consideramos que un juego android puede demorar 10 segundos en arrancar, pues serán 40 segundos aprox, con la ventaja de tener ahorrado el espacio de ese juego para todos los dispositivos android que conectemos.

Romsets : Este directorio lo utilizo para enlazar directamente al directorio donde tengo almacenados roms de distintos sistemas.

Así, puedo tener un directorio con roms y estar distribuído de la siguiente manera en mi PC:
D:\ANDROIDHDD\Romsets\ATARID:\ANDROIDHDD\Romsets\MAMED:\ANDROIDHDD\Romsets\NESD:\ANDROIDHDD\Romsets\PSP

D:\ANDROIDHDD\Romsets\PSX

Como la mayoría sabe, los emuladores MAME generalmente dependen de un romset específico para poder ejecutar correctamente dichas roms, por lo tanto lo ideal y mas conveniente, es clasificar las roms dependiendo de su romset. En mi caso, utilizo 2 romsets específicos, el 0.37b11 y el 0.139, además de un directorio con roms sueltas, que no he clasificado aún. Por lo tanto, mi estructura en realidad queda de la siguiente forma:

D:\ANDROIDHDD\Romsets\ATARI
D:\ANDROIDHDD\Romsets\MAME
D:\ANDROIDHDD\Romsets\MAME\Mame0.37b11
D:\ANDROIDHDD\Romsets\MAME\Mame0.139
D:\ANDROIDHDD\Romsets\MAME\MameX
D:\ANDROIDHDD\Romsets\NES
D:\ANDROIDHDD\Romsets\PSP

D:\ANDROIDHDD\Romsets\PSX

Así, lo que resta para enlazar dentro de los emuladores es bastante sencillo.

En mi caso, utilizo los emuladores Mame4All y Mame4All Reloaded. Utilizo los directorios por defecto de estos emuladores, para especificar la localización de las roms, así los directorios por defecto de estos emuladores son:

Mame4All Reloaded : /sdcard/ROMs/MAME4all/roms/
Mame4All (Mame4Droid) : /sdcard/ROMs/MAME4droid/roms/

Ahora, en vez de estar configurando cada vez que instalo estos emuladores, la ruta de las roms, etc, simplemente tengo una entrada en directorybind que enlaza directamente los directorios de las roms correspondientes para cada emulador. de esta manera:

Mame4All (Mame4Droid) utiliza el romset 0.37b11, por lo tanto:/sdcard/Romsets/Mame/Mame0.37b11/ -- /sdcard/ROMs/MAME4all/roms/
Mame4All Reloaded, utiliza el romset 0.139, por lo tanto:/sdcard/Romsets/Mame/Mame0.139/ -- /sdcard/ROMs/MAME4droid/roms/

Llegados a este punto, estamos de acuerdo que esta entrada es totalmente innecesaria y opcional, pero sugiero intentar a probar esta configuración, que ahorra muchos quebraderos de cabeza sobre todo a la hora de generar los directorios necesarios para utilizar los Mame, ya que estas aplicaciones generan su propia estructura estática, y esto puede complicar a mas de un usuario a la hora de saber donde copiar sus roms.

Para el resto de emuladores, generalmente tienen una opción para especificar el path de las roms, por lo que simplemente la apuntaremos a la siguiente ruta, para que queden configurados correctamente:

Ruta de todas las roms: /sdcard/Romsets/Ruta para roms de NES: /sdcard/Romsets/NES/Ruta para roms de PSP: /sdcard/Romsets/PSP/etc...

Observaciones y consideraciones
No está de mas comentar que todo lo anteriormente expuesto funcionará sólo cuando estén las condiciones para que el sistema de directorios y recursos en red se encuentren disponibles. Si estamos con nuestro dispositivo Android conectado a una unidad de red, y estamos utilizando dicho recurso para almacenar información o leer los ficheros de algún juego, y tenemos problemas de red (desconexión, baja señal, etc) o simplemente apagamos el ordenador o disco duro, tendremos un efecto inesperado en el dispositivo Android, por lo que sugiero utilizar este sistema solo para quienes tengan una forma segura de utilizarlo, con un recurso compartido fiable (que no se apagará).

También es importante recalcar que si conectamos este recurso en, por ejemplo, nuestro móvil, es muy posible que cuando salgamos del área efectiva de la cobertura de la Wifi tengamos un sistema inestable y por lo mismo sea necesario reiniciar el terminal. Para este caso tengo una sugerencia/alternativa.

En mi caso, tengo conectado el móvil, pero no tengo enlazado el directorio "data" (/sdcard/ANDROIDHDD/data_common), y dejo que los datos sean los propios que el movil almacena en la microSD.

Cuando necesito desconectar el dispositivo de la red, simplemente voy a DirectoryBind, y hago "unbind all" para que se desconecten los enlaces a las unidades de red. Si enlazo el directorio "data" (data_COMMON), es muy probable que alguna aplicación de Android tenga abierto algún fichero (el reproductor de medios, navegador, etc) y no me deje hacer unbind, y por este motivo prefiero no enblazar este directorio en dispositivos que sean móviles, para evitar problemas.

Alternativamente, para desconectar las unidades enlazadas, ya que el sistema está montado sobre la carpeta cifs, que se encuentra dentro de la microSD, se puede hacer un "Desmontar SD" para que se liberen todos los recursos que estén abiertos en la microSD, y a continuación ya podemos montarla nuevamente, pero sin activar CIFS o DirectoryBind (quitar la opción automontar de directorybind, para cuando se conecte el puerto USB).

Una vez que se ha entendido el funcionamiento, y sobre todo, las posibilidades de este "sistema", se puede ganar mucho, sobre todo en espacio y en especial para aquellas personas que tengan varios dispositivos android (Tablets, Set Top Box, Android TV, Móviles, Consolas, etc).

Asimismo, otra ventaja que se obtiene de todo esto, es que si actualizo los datos de una aplicación, por ejemplo, de un juego, solo los tengo que descargar una vez en un dispositivo, y el resto de dispositivos simplemente bastará con actualizar el APK de la aplicación o juego correspondiente, sin necesidad de descargar los datos asociados.

Otra cosa a considerar es que asumo que todos los ficheros del directorio /sdcard/Android/data y /sdcard/Android/obb, son comunes para todos los dispositivos. Esto significa que cuando se modifica uno, se modificará en todos.

Si queremos separar directorios por dispositivo para, por ejemplo, tener distintas partidas guardadas del mismo juego, habrá que duplicar la carpeta data y enlazar con DirectoryBind a la nueva carpeta.

Por ejemplo, si en la misma instalación del hogar, tenemos un directorio para DEEN0X, otro para PEPE y otro para SKELTON, podemos hacer lo siguiente:

PEPE enlazará a:
/sdcard/ANDROIDHDD/Android/data_PEPE/ -- /sdcard/Android/data/

SKELTON enlazará a:
/sdcard/ANDROIDHDD/Android/data_SKELTON/ -- /sdcard/Android/data/

Deen0X enlazará a:
/sdcard/ANDROIDHDD/Android/data_DEEN0X/ -- /sdcard/Android/data/

el directorio obb se mantiene común para todos los dispositivos/sdcard/ANDROIDHDD/Android/obb_COMMON/ -- /sdcard/Android/obb/
y con esto cada uno podría tener su partida del mismo juego, guardada por separado.
En la siguiente sección, dejaré los ficheros necesarios para poder configurar una pequeña red con todo este sistema, pero antes voy a comentar una utilidad mas que podria utilizarse con este sistema.

Y Sambadroid, ¿para que me puede servir?

Imagen


En la store de google existen varias aplicaciones con las que podemos compartir una carpeta de nuestro dispositivo, utilizando el protocolo de red SAMBA, que es el utilizado entre otros por Windows. Con este tipo de herramientas, podemos compartir una carpeta y verla directamente como un recurso compartido desde nuestro PC, sin tener necesidad de instalar gestores de ficheros, ni un cable MicroUSB.

Entre las opciones existentes, he estado utilizando varias para probar que tal van, y aunque la mas popular del momento puede ser Samba Filesharing, lo cierto es que esta utilidad es bastante limitada y, sobre todo, inestable a la hora de implementar un sistema de recursos compartidos estable.

Probando, he llegado a la conclusión de que la herramienta que cumple con mis necesidades y que hasta el momento tiene un buen desempeño, es una aplicación llamada SambaDroid, que tiene una versión gratuíta que no permite cambiar el nombre del recurso compartido, ni del nombre NetBIOS (de la máquina), ni incorporar sistema de protección con password por usuario, vamos, que es bastante "limitado" en cuanto a opciones para configurar el programa, pero la versión PRO (licencia comprada desde la propia apliación), permite hacer todo este tipo de configuraciones, y funciona muy bien.

Ya sea la versión Free o la Pro, este programa también se puede utilizar para implementar us sistema de ficheros compartidos, utilizando como servidor un dispositivo Android para compartir el recurso de red que, en este caso, lo mas práctico es que sea la propia /SDCARD.

Montar los recursos en un sistema así, mas que práctico, es curioso, por que la velocidad de transferencia de este modo es bastante baja, y no resulta práctico para utilizar de manera habitual.

Aún así, algunos contenidos si se pueden compartir y disfrutar correctamente utilizando este sistema. Roms, Música, Vídeo, etc, este tipo de ficheros se pueden compartir sin mayores problemas por medio de una red WIFI local generada entre 2 dispositivos Android. Intentar cargar un juego tipo Nova3 o similares, podrían suponer que tomen un tiempo considerable en la carga, además de la batería que el proceso se consumiría.
Me ha parecido adecuado comentar la facilidad de uso de este programa, ya que estoy hablando de un tema que tiene relación. Ahí lo dejo por si alguien lo quiere probar.

------------------------------------------------oO0Oo------------------------------------------------
Para que puedas hacer tu mismo los enlaces, sigue los siguientes pasos
Descargas y puesta en funcionamiento
Esta sección es para poner en práctica todo lo comentado anteriormente.

Ficheros necesarios:
DirectoryBind (de los foros XDA)
Mount Manager (versión gratuíta de la store de google play)
directorybind_conf.csv (crear un fichero con la información que hay a continuación)

Como el fichero directorybind_conf.csv no tiene mayor complicación para editar, voy a dejar aquí el contenido del mismo para poder copiarlo y pegarlo en un editor de textos (sugerencia: notepad++), y asi realizar las modificaciones oportunas para cada necesidad.

CONTENIDO FICHERO DE CONFIGURACION DE DIRECTORYBIND (directorybind_conf.csv)

----BASE MOUNT POINTS BY NET--------------------------------;;0
/mnt/sdcard/cifs/ANDROIDHDD/;/sdcard/ANDROIDHDD/;1
/mnt/sdcard/cifs/MUSICHDD/;/sdcard/MUSICHDD/;1
/mnt/sdcard/cifs/VIDEOHDD/;/sdcard/VIDEOHDD/;1
----BASE MOUNT POINTS BY USB--------------------------------;;0
/mnt/usb/ANDROIDHDD/;/sdcard/ANDROIDHDD/;0
/mnt/usb/MUSICHDD/;/sdcard/MUSICHDD/;0
/mnt/usb/VIDEOHDD/;/sdcard/VIDEOHDD/;0
----BASE MOUNT POINTS BY EXTERNAL_SDCARD--------------------------------;;0
/mnt/external_sdcard/ANDROIDHDD/;/sdcard/ANDROIDHDD/;0
/mnt/external_sdcard/MUSICHDD/;/sdcard/MUSICHDD/;0
/mnt/external_sdcard/VIDEOHDD/;/sdcard/VIDEOHDD/;0
----GENERAL BINDS--------------------------------;;0
/sdcard/ANDROIDHDD/Android/data_COMMON/;/sdcard/Android/data/;1
/sdcard/ANDROIDHDD/Android/obb_COMMON/;/sdcard/Android/obb/;1
/sdcard/ANDROIDHDD/Gameloft/;/sdcard/Gameloft/;1
/sdcard/ANDROIDHDD/Romsets/;/sdcard/Romsets/;1
/sdcard/Romsets/Mame/Mame0.37b11/;/sdcard/ROMs/MAME4all/roms/;1
/sdcard/Romsets/Mame/Mame0.139/;/sdcard/ROMs/MAME4droid/roms/;1
/sdcard/ANDROIDHDD/Pictures/;/sdcard/Pictures/;0
/sdcard/ANDROIDHDD/backups/;/sdcard/backups/;0
/sdcard/ANDROIDHDD/DCIM/;/sdcard/DCIM/;0
/sdcard/ANDROIDHDD/TitaniumBackup/;/sdcard/TitaniumBackup/;0
----MEDIA BINDS--------------------------------;;0
/sdcard/MUSICHDD/;/sdcard/Music/MUSICHDD/;0
/sdcard/MUSICHDD/;/sdcard/Media/MUSICHDD/;0
/sdcard/MEDIAHDD/;/sdcard/Video/VIDEOHDD/;0
/sdcard/MEDIAHDD/;/sdcard/Media/VIDEOHDD/;0


Nota: No dejar espacios ni líneas en blanco entre medio de cada entrada. He dejado líneas con títulos de cada "grupo" o "sección", para que sea mas fácil entender y leer el fichero dentro del propio directorybind.
Nota2: El fichero que está para descargar tiene menos opciones que las de las líneas que he puesto aquí, por que lo he ido editando para agregar mas opciones

Importante: El nombre del punto de montaje de la microsd externa, puede variar de un dispositivo a otro.
Hay que establecer el nombre correcto en el fichero directorybind_conf.csv, para que el sistema esté correctamente configurado. Para esto, se puede hacer de muchas formas, y la mas fácil es ir con algún explorador de ficheros que permita navegar en /mnt/, y verificar el nombre de la microsd externa.

La microsd interna, en caso de que el dispositivo tenga memoria interna (un disco interno) se llamará "sdcard", por lo que tendremos que buscar otro punto de montaje que corresponda a la microsd que tenemos insertada en el dispositivo.

Los nombres de la memoria externa pueden ser múltiples, y estos son sólo algunos ejemplos:
/mnt/sdcard1
/mnt/ext_sd
/mnt/external_sd
/mnt/external_sdcard
/mnt/extsd
/mnt/sdcard/sdcard1
/mnt/sdcard/ext_sd
/mnt/sdcard/external_sd
/mnt/sdcard/external_sdcard
/mnt/sdcard/extsd
etc...
Nota: la sdcard externa (microsd), también puede estar montada dentro de la propia memoria interna sdcard, en forma de carpeta (como /mnt/sdcard/external_sdcard). Esto es común en varios dispositivos/fabricantes que lo montan de esta manera.
Una vez identificado el nombre, editar el fichero directorybind_conf.csv y cambiar las siguientes entradas, reemplazando "external_sdcard" por el nombre correspondiente al dispositivo.

...
/mnt/external_sdcard/ANDROIDHDD/;/sdcard/ANDROIDHDD/;0
/mnt/external_sdcard/MUSICHDD/;/sdcard/MUSICHDD/;0
/mnt/external_sdcard/VIDEOHDD/;/sdcard/VIDEOHDD/;0
...


Siguiendo con el tema, la forma de entender el fichero directorybind_conf.csv es muy simple:[Ruta_donde_están_los_ficheros/Source];[Ruta_que_reemplaza/Target];[0-deshabilitado/1-habilitado]

Editar (crear) el fichero con los datos anteriores (contenido de directorybind_conf.csv + modificación del nombre del punto de montaje de la microsd), y guardarlos en la raíz de la sdcard del dispositivo Android, con el nombre directorybind_conf.csv (debe quedar en /mnt/sdcard/directorybind_conf.csv). Si no estás seguro cual de las unidades del dispositivo android es /sdcard, guardalo en todas las unidades del dispositivo, en el directorio raiz.

Dentro de esta estructura, están incluídos enlaces para conectar un "servidor" de música y otro de vídeos.

en la microSD, estos se verán como
/sdcard
----/Music
--------/MUSICHDD
----/Video
--------/VIDEOHDD
----/Media
--------/MUSICHDD
--------/VIDEOHDD

Habilitar/deshabilitar los enlaces segun vuestras preferencias. En mi caso, yo utilizo el directorio Media para meter dentro todos los ficheros de música y vídeo. Así, en el mismo directorio, junto con los que tengo en la microSD, tendré acceso a los directorios de los recursos de red con estos contenidos.

También he incluído otros directorios que pueden resultar interesantes:
Romsets -- Para roms
DCIM -- Para sacar fotos con el dispositivo directamente a la unidad de red
Pictures -- Para capturar pantallas directamente a la unidad de red
Backups -- Si utilizo un programa como ES File Explorer, y guardar los APK que tengo instalados en la unidad de red
TitaniumBackup -- Para hacer/recuperar backups de titanium, directamente de la unidad de red

Ya es cuestión de cada uno agregar o modificar estos enlaces de acuerdo a sus preferencias y necesidades.

Para Mount Manager, vamos a compartir los siguientes recursos en nuestro PC o HDD de red

Creamos una carpeta llamada ANDROIDHDD (o como queráis llamarla), asumiré que estamos trabajando en el disco D:\ del pc, por tanto, generar la siguiente estructura:

D:\ANDROIDHDD
----\Android
--------\data_COMMON
--------\obb_COMMON
----\Romsets
--------\Mame
------------\Mame0.37b11
------------\Mame0.139
----\DCIM
----\Pictures
----\Backups
----\TitaniumBackup
----\Gameloft

Nota: Si se utliza un disco duro USB conectado al PC, sugiero crear la misma carpeta dentro del disco, y compartir la carpeta, no la unidad completa.

A continuación, compartimos la carpeta ANDROIDHDD, con privilegios totales (Lectura/Escritura) sobre esta carpeta.
Imagen Imagen

Como sugerencia, poner una IP estática a vuestro PC, para poder conectarlo sin problemas.

Nos quedamos con la IP del PC, que la vamos a utilizar en el dispositivo Android

Tip: Inicio-ejecutar-cmd.exe, y a continuación poner lo siguiente:
ipconfig

La ip será la que tenga un formato xxx.xxx.xxx.xxx, y que generalmente puede empezar por 192.168.xxx.xxx, que para este caso asumiremos que es 192.168.0.2

Luego, en Android, cargamos Mount Manager, damos a "Add Mount" (el segundo icono de la barra de herramientas, el que tiene la cruz azul), y poner los datos necesarios

Share Path = 192.168.0.2/ANDROIDHDD
Mount Point = (se llenará automáticamente)
Agregar la opción Username
Username = ANDROIDUSER
Agregar la opción Password
Password = ANDROIDPASS

Nota: ANDROIDUSER y ANDROIDPASS son usuarios definidos en el pc, y pueden ser cualquier usuario. estos son solo un ejemplo.

Dar al botón Aceptar (Accept/Save) y volver a la ventana anterior.

Activar el punto de montaje CIFS, tocando la opción recién creada.

Si no se monta correctamente, verificar los datos y verificar los módulos, si está ejecutando el CIFS.

Hacer lo mismo por los puntos de montaje para MUSICHDD y VIDEOHDD (si es que se van a utilizar)

Cargar DirectoryBind, dar a Options -- More -- Restore database (si pregunta, responder que Si quieres sobreescribir)
ImagenImagen


Aparecerán las entradas que hemos editado anteriormente (o que hemos descargado el fichero directamente). Marcar o desmarcar las casillas, de acuerdo con las preferencias de cada uno, y finalmente dar Options -- Bind Checked

Si todo está bien configurado, veremos que los iconos de cada opción que está seleccionada se pondrán verdes.

En caso de que alguna se ponga en azul, quiere decir que existe algún problema que posiblemente lo podemos solucionar. Daremos a Options -- Unbind all, y seleccionamos y mantenemos presionado sobre la opción, nos abrirá una ventana que nos permite configurar el enlace.

Mantenemos presionado sobre la primera caja de texto (Source data path), y verificamos que esté apuntando correctamente donde queremos que apunte, y le damos a "Select"

Repetimos la operación con la segunda caja de texto (Mount target path)

Guardamos la configuración, volvermos a la ventana anterior y le damos a Options -- Bind Checked.

Repetir por cada opción que necesite que la verifiquen. En caso de las opciones en rojo, es que algun directorio o punto de montaje no se encuentra correctamente configurado.

Verificar que en la microSD existan los directorios Destino (Targets). Si estamos montando "Picture", pero en la microsd no existe esta carpeta, entonces dará error al intentar montarla (aunque generalmente el propio DirectoryBind genera estas carpetas de forma automática)

Ya podemos utilizar estos directorios de manera directa dentro de nuestras aplicaciones.
  • Abrir cualquier emulador, y a la hora de buscar roms, ir a /sdcard/Romsets/ , para encontrar los directorios correspondientes a cada sistema.
  • Para escuchar música, vamos a /sdcard/Music/MUSICHDD, para tener nuestra biblioteca de música, además de la existente en la propia MicroSD
  • Para instalar un juego Android, basta con instalarlo normalmente desde Google Play Store. Tanto los datsod del directorio obb como los del directorio data, se guardarán directamente en la unidad de red asociada.
  • Si tenemos asociado el directorio DCIM, podemos sacar una foto con nuestro dispositivo, y ésta se almacenará directamente en nuestro ordenador.
En fin, las posibilidades son muy variadas, y cada uno puede encontrar el uso que mejor le parezca a este sistema.

Cambiar entre distintas "fuentes" de soporte para datos

Todo lo explicado hasta aquí toma como referencia la utilización de una unidad de red para almacenar los datos, pero también se podría cambiar que el sistema se "alimente" de una unidad USB (disco duro, pendrive, etc), o una SDCard instalada en el dispositivo Android.

Para esto, simplemente hay que cambiar las entradas base del fichero del Directory Bind.

Vamos a suponer que nuestro directorio original ANDROIDHDD en realidad es un disco duro USB que tenemos compartido en el PC.

Nos vamos de viaje, y queremos llevarnos este disco duro para conectar nuestro Set Top Box (Android TV, Pincho Android, etc) en nuestra casa en la playa.

Asumiendo que tenemos soporte para conectar un disco duro o pendrive en nuestro dispositivo, vamos a conectar el disco y verificamos que tengamos acceso a el.

Lo mas probable, es que lo veamos en la siguiente ruta:

/mnt/usb

Suponiendo que en el disco duro, nuestra carpeta para android se llame "ANDROIDHDD" (y que era la que teníamos compartida como "ANDROIDHDD"), entonces en nuestro dispositivo la veríamos en la siguiente ruta, y con los siguientes directorios:

/mnt/usb/ANDROIDHDD
----/Android
--------/data_COMMON
--------/obb_COMMON
----/backups
----/Gameloft
...etc

Nota: Si vuestra instalación del disco duro o pendrive se encuentra en otra posición, editar la entrada correspondiente en el fichero directorybind_conf.csv para que el directorio USB apunte correctamente donde se encuentra el dispositivo conectado.

Si se ha copiado el contenido del directorybind_conf.csv, para agregar las líneas que he puesto en esta guía, existe una sección con entradas base para NET y otras para USB

...
----BASE MOUNT POINTS BY NET--------------------------------;;0
/mnt/sdcard/cifs/ANDROIDHDD/;/sdcard/ANDROIDHDD/;1
/mnt/sdcard/cifs/MUSICHDD/;/sdcard/MUSICHDD/;1
/mnt/sdcard/cifs/VIDEOHDD/;/sdcard/VIDEOHDD/;1
----BASE MOUNT POINTS BY USB--------------------------------;;0
/mnt/usb/ANDROIDHDD/;/sdcard/ANDROIDHDD/;0
/mnt/usb/MUSICHDD/;/sdcard/MUSICHDD/;0
/mnt/usb/VIDEOHDD/;/sdcard/VIDEOHDD/;0
...


Desactivar las entradas correspondientes a NET (Recurso de red), y activar las de USB (dispositivo conectado por USB)

ImagenImagen


y con este cambio, ya podemos acceder al mismo contenido que teníamos por red, pero ahora por el disco duro o pendrive directamente conectado por USB

Si por otra parte tenemos una microSD, y copiamos el contenido de la carpeta ANDROIDHDD (o parte del contenido), y queremos acceder a el desde android, el cambio es similar al anterior, aunque esta vez hay que verificar el nombre que android da a nuestra microSD externa.

Como ya hemos editado el fichero directorybind_conf.csv y tenemos el nombre correcto de nuestra microSD, simplemente nos basta con desactivar y activar las opciones correspondientes a la microsd para que el sistema funcione con estos directorios enlazados.

Y de esta manera tenemos un sistema "dinámico" que nos permite direccionar de manera rápida y cómoda los contenidos para nuestro dispositivo, dependiendo de donde tengamos almacenada la información del mismo.


------------------------------------------------oO0Oo------------------------------------------------

Script CIFS&BIND

Bueno, si alguien ha leído todo lo que he puesto hasta aquí, supongo que ya tendrá una idea general de como va montado todo este sistema de directorios y redirecciones.

Para facilitar el proceso, he generado un script que ayuda a generar los directorios y guía paso a paso para poder conectar un dispositivo android con CIFS habilitado a una carpeta compartida por la red, y utilizar la misma como "sdcard"

REQUISITOS

  • Dispositivo ANDROID con módulo CIFS habilitado (la mayoría de los android TV, muchas consolas android y algunas tablets vienen con estos módulos incorporados)
  • Windows, donde ejecutaremos el script y compartiremos la carpeta para conectar desde Android
  • Script CIFS&BIND

Descargamos el script, y descomprimimos el fichero CIFS&BIND.cmd en la raíz del disco donde generaremos la estructura para compartir. (también se aplica a un disco duro USB)

Que hace este script?
  • Generar carpeta ANDRIODHDD
  • Generar estructura standard dentro de la carpeta ANDROIDHDD (directorios Android, Gameloft, DCIM, Pictures, Romsets, etc)
  • Compartir la carpeta ANDROIDHDD en modo escritura, para todos los usuarios de windows (nombre del recurso: ANDROIDHDD)
  • Generar fichero de configuración base para DirectoryBind, con los direccionamientos necesarios para montar android por el recurso de red ANDROIDHDD que conectarmos por CIFS
  • Descargar la app DirectoryBind desde el foro de XDA (es necesario guardarlo en la propia ruta generada)
  • Obtener los datos necesarios para informar al usuario y guiarlo a la hora de conectar el dispositivo android al recurso compartido, por medio de Mount Manager
  • Guiar en los pasos necesarios para conectar y activar el recurso compartido, como punto de montaje CIFS.
  • Guiar al usuario para instalar la aplicación DirectoryBind en su dispositivo android, y cargar la configuración generada para enlazar los directorios.
  • Guiar al usuario para habilitar los enlaces generados, y con esto activar la redirección de las carpetas importantes de Android para que sean almacenadas y accedidas desde el recurso de red

He intentado hacerlo lo mas simple posible. Es posible que en alguna instalación de windows, el script no logre obtener correctamente la IP del pc. Para esos casos, es bueno que el usuario sepa de antemano cual es la ip y que, cuando corresponda, la ingrese correctamente.
Para obtener la ip del pc, ir a inicio->ejecutar->cmd [enter]. Luego en la ventana de comandos, ingresar lo siguiente

¿Como deshabilitar CIFS&BIND?

Muy sencillo. Simplemente vamos al CIFS manager y tocamos el recurso de red, para que se deshabilite (se pone en rojo el icono), y luego al DirectoryBind, y le damos a "UnBind All". Si algun recurso no se puede liberar por que se encuentra "abierto" por algún programa, sugiero reiniciar el dispositivo android y ya tendremos desvinculado el directorio.

Sugiero no utilizar la opción de automount o de autobind en de sus respectivos programas, para así poder controlar cuando queremos enlazar a nuestra carpeta compartida. cuando queramos habilitar el CIFS&BIND, activamos el recurso en CIFS (con el mount manager), y luego le damos a "Bind Checked" (con DirectoryBind).
ipconfig
Con esto tendremos la ip correspondiente a nuestro pc.

Apenas tenga tiempo, sacaré una versión en español del propio script, aunque entinendo que es muy simple de seguir y no es necesario mucho conocimiento de inglés.

------------------------------------------------oO0Oo------------------------------------------------

Palabras finales

Hasta aquí este manual introductorio sobre como utilizar DirectoryBind y Cifs de una manera un tanto "alternativa", que espero que sea del interés de algunas personas que seguramente vean mas utilidades que yo a estas herramientas.

He querido compartir este artículo, por que es algo que hago de forma normal en mis instalaciones, pero que posiblemente exista alguna persona interesada en sacar ideas de esto mismo para implementar en sus propias instalaciones, y que estaría encantado de conocer si me dejáis algún comentario al respecto, para sacar mas ideas aún para poder seguir probando.

Disculpad si en algún punto no he sido lo suficientemente claro. He escrito esto un poco de manera rápida, por que he tenido un momento libre para hacerlo, y no quería desaprovechar la oportunidad.

Zalu2!

Deen0X

Adjuntos

Decir que tengo a la OUYA con este "sistema", y la tengo llena de juegos, todos funcionales (unos 120 mas o menos), y no tengo problemas de espacio para instalar aplicaciones.

Bueno, en realidad tengo varios dispositivos conectados a la misma "sdcard" de red, y que comparten datos entre ellos:

- OUYA (todos los programas, juegos y datos los instalé desde la OUYA, hacia la unidad de red. Cerca de 60GB de descargas desde el propio google play store)
- JXDS7300B
- JXDS5110B
- Tablet JXDS908
- Android TV Quad-Core (UG807B)
- Engeldroid
- Leotec Android TV
- Movil Motorola Razr (CM10)

y algunos otros dispositivos, y todos funcionan correctamente, cargando datos desde la red y guardando información sin problemas.

Mi red es algo lenta, pero esta semana actualizaré la instalación (voy a probar un TP-Link TL-WPA281 Wireless N Powerline Starter Pack, a ver si mejora la cobertura y velocidad de mi red) ;)
Gran guia, es muy util. [oki]

Gracias.

pd: te has colado en el titulo, has puesto CISF ;)
Interesante el tema aunque al inicio le das muchas vueltas a la explicacion.... y a las finales se hace larguisimo. intentare seguirlo luego con mas calma a ver si lo entiendo todo.
a ver si alguien alguien quiere probarlo.

todo lo que he escrito en el artículo, lo he resumido en un fichero/script, que intenta automatizar la mayoría de los pasos.

requisitos:
windows (donde se ejecuta el script)
dispositivo android con CIFS habilitado (OUYA con el custom firmware vale)
que tanto windows como android estén en la misma red (no importa si es por wifi o por cable)

ok, el fichero es este:
https://mega.co.nz/#!uJlnALgQ!Jccs5QZ7O ... 57YsBQGT4g

descargarlo, descomprimir en la raíz de vuestro disco duro, y ejecutar.
creará una carpeta ANDROIDHDD, y dentro generará una estructura de directorios.
compartirá esta carpeta en full access para todos los usuarios del pc
generará el fichero de configuración del DirectoryBind
descargará (mediante vuestro navegador) el DirectoryBind apk desde el foro de XDA
guiará en el proceso para configurar el dispositivo android

al final, tendréis enlazado el dispositivo con vuestra unidad de red, haciendo como si fuese una microsd.
Nota: En algunos pc puede que el código para obtener la IP del pc no funcione correctamente. Para estos casos, asumiré que sabéis que IP es la de vuestro PC, para ponerla correctamente.

a ver si alguien lo prueba y me comenta que tal le va.

Zalu2!
Deenox estoy en el trabajo hasta dentro de 3horas mas... si eres de este lado del charco ( America ) o estaras despierto a esa hora mandame un pm y hago la prueba, pero ayudame con la version de mi ouya que veo ha salido un nuevo ota la semana pasada y no creo que el Rom que mencionaste ya este actualizado.
yo tengo la ouya sin actualizar.

simplemente, arranca en offline, instala por sideload un launcher como Nova o Holo, y al arrancar dile que use ese launcher por defecto.

así ya no te actualizará la ouya. ;)

no creo que esté despierto, que tengo que acostarme temprano hoy (ayer me dieron las 4am... y a esa hora sentí la fría sensación que da la mirada de mi mujer desde el marco de la puerta...) XD
Que ventaja tiene hacer esto a tener un disco duro externo conectado a la Ouya? (aparte de que todos tus dispositivos tendrían acceso a todas las aplicaciones)
a ver, la ventaja principal es la que acabas de comentar (varios dispositivos que acceden a todas las aplicaciones), pero por poner un listado de ventajas que asi a priori podria encontrar:

  • evitar escribir muchos datos en la flash (memoria interna), que ya sabemos que es el punto flaco de estos dispositivos. Si muere la nand, muere el dispositivo
  • Ahorro de espacio de instalación. Evidentemente, este ahorro es proporcional a la cantidad de dispositivos que tengas para ejecutar sobre el mismo directorio de instalación (sdcard por red)
  • Instalación rápida para nuevos dispositivos. Una vez instalados los datos, si tienes un nuevo dispositivo, o formateas/restauras el tuyo, para poder instalar todo rápidamente simplemente hay que conectar la unidad de red, y ejecutar los APK de cada aplicación. Con esto tienes instaladas muchas aplicaciones en unos minutos.
  • Ahorro de descargas. En algunos casos (como el mío), la conexión de internet no es ninguna maravilla, y descargar un juego tio Nova3 o MC4 pueden suponer mucho tiempo de descarga. Teniendo muchos dispositivos (o reinstalando en el mismo), solamente tengo que descargar 1 vez los datos, y luego los tengo disponibles.
  • Actualización "masiva". Si actualizo un directorio de datos (por ejemplo, sale una actualización para MC4), me basta con actualizar esta aplicación y sus datos en un dispositivo, y en el resto simplemente actualizo la APK (la extraigo desde el dispositivo donde actualicé, y a continuación lo instalo en los demás dispositivos)
  • Además de la instalación de aplicaciones Android, por ejemplo podría ripear un DVD de una película en el PC, y a continuación reproducirla directamente en el dispositivo, sin necesidad de copiarla a un disco duro o pendrive de paso.
  • Si quieres, puedes agregar un punto de montaje para una unidad de DVD, y con esto acceder a los contenidos que tengas guardados (películas, música, etc) directamente desde tu dispositivo android... y desde varios de formas simultánea.
  • Puedes tener sincronizado un directorio con, por ejemplo, fotografías, y hacer que cuando saques una foto, ésta se suba a un servicio online. (por ejemplo, sacar una foto con la cámara, que la foto se guarde en el disco de red, y que el ordenador sincronice de forma automática esta carpeta)
  • Hacer backups de aplicaciones y recuperarlas rápidamente desde otro dispositivo (por ejemplo, hacer backup de tu Whatsapp del móvil hacia el disco de red, y recuperarlo desde una tablet o android tv, y con esto tendrías Whatsapp en ambos dispositivos de forma simultánea)

vamos, que varias de estas cosas puedes hacerla con un disco duro USB, pero evidentemente pierdes la parte de que tengas varios dispositivos apuntando al mismo contenido.

que desventaja tienes?
Posiblemente tu disco duro sea un poco más rápido que tu red, y ahí la ventaja evidente esté en el disco duro.
Pero para velocidad, siempre puedes desconectar el disco duro USB de tu pc, el que tienes compartido para tus aplicaciones android, y activar los redireccionamientos para que, sin hacer nada en el disco duro, puedas acceder a los mismos contenidos.

así, este "truco" lo he pensado precisamente para, en el caso que necesites irte a otro sitio con tu OUYA (por ejemplo), puedas llevarte el disco duro USB que tienes compartido en tu pc con la estructura montada (imaginando que tienes un disco duro USB para esto), y enchufarlo a la consola, cambiar un par de opciones en el directory bind, y que la consola ni se entere de que está accediendo de otra manera al mismo contenido.

Evidentemente, todos estos temas no son necesarios, y puedes trabajar perfectamente sin este montaje de directorios y redireccionamientos, pero creo que una vez se ve lo práctico que puede resultar, y sobre todo, para aquellos usuarios que tienen mas de un dispositivo en casa, que todo esto empieza a tomar un poco mas de sentido y relevancia.

bueno. a ver si alguno puede probar el script que he puesto, y me comenta que tal le va, para poder editar la guía y resumirla a ese script simplemente.

Zalu2!
Agregado SCRIPT a la guía.

Zalu2!
Yo creo que no me va a quedar de otra más que probar este método porque no hay forma que me permita leer mi disco duro o memorias usb en mi Ouya pero tendré que esperar un poco pues antes tengo que formatear mi computadora porque instale un codec que requeria para para ver un capitulo de big brother usa [ayay] y resulto ser un programa que me bloqueo youtube, facebook, google entre otras paginas y como no lo pude arreglar pues tengo que formatear pero esto lo haré hasta la próxima semana [+risas]
Tio, eres un crack.
Tengo que probarlo a ver si funciona en mi Nexus4 :D
A ver, esto lo estamos aplicando a la Ouya o solo a Android como moviles o tablet?
Si alguien o el propio tutorial es para ouya o sabe como, en el paso del directorybind como sacamos el menu de la aplicacion?
Yo no quiero usar el cisf por ahora, solo quiero dedicar un pendrive usb de 32gb a todo lo q sea de ouya, pelis, fotos, musica, roms y sobre todo juegos y aplicaciones q pesan mucho.
Pense seguir los pasos de mi Galaxy S3, pero cuando accedo al Directorybind no tengo sino opcion de poner en ON el programa, pero ni añadir ni opciones...como lo sacaria?
Gracias
la guía es para dispositivos android en general, aunque he utilizado la OUYA como ejemplo, ya que es un dispositivo que está "de moda".

dentro del directorybind el menú se saca... con la tecla menú del propio terminal [+risas]

si estás en OUYA y no tienes teclado con menú (creo que es la tecla windows derecha, o la tecla menú, en un teclado standard de windows), te sugiero instalar una aplicación como Full!screen, y configurar alguna acción para que muestre el menú de la aplicación.
yo lo tengo en el botón derecho inferior, que si lo mantengo presionado (con el mouse), me aparece el menú de la aplicación que tengo activa.

si lo único que quieres es cargar las cosas de OUYA en un pendrive, te sugiero mirar la guía BIND4SWAP, que es básicamente el uso de DirectoryBind para hacer precisamente eso, desviar las cargas de aplicaciones a un pendrive o disco duro USB.

esta guía (la de este hilo) se centra mas en el uso de CIFS para cargar una unidad de red y, a continuación, aplicar BIND para redireccionar los contenidos del dispositivo android (vamos, usar la carpeta compartida como sdcard)

en mis pruebas, puedo cargar un juego, rom o lo que sea, desde un disco duro que tengo compartido desde mi router, y lo cargo en mi teléfono, ouya, jxds7300b, gpd5005, jxds5110, android tv quad-core, engeldroid, tablets android, etc... (todo el que tenga módulo cifs cargado), y todos cargan sin problema desde el mismo recurso. esto me viene muy bien sobre todo para hacer pruebas, pero también para compartir directorios de roms, o simplemente ahorrarme espacio en dispositivos (imagina un dispositivo con menos de 4GB de memoria interna, pero que tengo cargado unas 50 aplicaciones y juegos, y no tengo problemas de espacio) XD

pues eso.

Zalu2!
Vale, probare a meter un teclado usb a ver si me saca el menu o uno bluetooth.
De todos modos, creo q podria modificar el archivo csv a mano tambien.

Un a duda sobre ese archivo, que son los 1 y 0 que vana al final de cada linea de enlaces?

Gracias por todo

edit: Nada, no consigo ni por teclado ni de ninguna forma, simular el boton menu de android...y por tanto no puedo ni restaurar el bcakup csv de directorybind ni nada de nada....
Una ayuda please. Imagino q ese paso es igual en un tutorial que en otro no? ya sea bind4swap o cisf&bind.
Gracias
Hasta ahora no tengo tiempo para probar pero acabo de conseguirme un HD de 3TB en el que pondre todas las cosas que he ido bajando para android asi que luego te podre preguntar :D

Ademas deseenme suerte voy a aplicar para trabajar en gameloft a ver si se me cumple el sueño de desarrollar juegos :)
es que DEBES poder sacar el menú

haz como te he dicho. instala el full!screen desde el playstore de google, y asigna un botón para menú.

también puedes utilizar tincore, y asignar un botón de teclado para "menu"
Joe, muchas gracias DeenOx, con el full!screen ha funcionado...el tincore no consigo configurarlo bien, me resulta un autentico lio y estaba desesperado ya.
De echo, tenia la playstore instalada, se me ha actualizado la consola y ya no me funciona por mas que he hecho root de nuevo, busybox, instalado de nuevo playstore, pero ahi esta q entra y o se queda dando vueltas el icono o me da error de cuenta...
El caso es q desde un usb, la magnifica aplicacion q me has recomendado ya esta el directorybind funcionando perfecto.
Repito, muchisimas gracias.
no te funcionaba el playstore? lo habrian capado o que era lo que no podias instalar?
No lo sé emulation. Seguramente sea culpa míaxo es sabido q x ahora en la ouya con cada update, te quita el root, el busybox y la playstore. Hay una Romx aahí ya q evita esto.
Yo no la he probado xq no me queda claro como volver a la original en caso de fallo o necesidad.
en tu caso podrias instalar por sideload el apk para hacer autorootfacil y para instalar el cwm tmb facil. ya luego instalas el exposed framework y el apk con mods y le activas el playstore es facilisimo.
Todo eso ya está hecho pero desde el último update no entra en la playstore. El resto todo bien.
mmmm pero prueba desinstalarlo y volver a instalarlo ese debe ser el problema. buscare en XDA a ver si le sucede a alguien. capaz lo han bloqueado en el update :S


instalaste el exposed framework? y http://forum.xda-developers.com/showthr ... ?t=2359390 <-- esto? prueba deberia ir.

OJO A ESTO: despues de actualizar debes reinstalar el exposed framework y reinstalar el mod por eso no te va.

http://forum.xda-developers.com/showthr ... ?t=2391770 <--- aca tmb preguntan y solo 1 da respuesta debe ser eso pruebalo.
He probado todo lo q me has puesto excepto borrar la cuenta xq no encuentro como ni en el menúde ouya ni en el de la playstore. Si sabes donde se quita, se aagradececomo toda la ayuda prestada hasta ahora.
Gracias
no tengo la consola a la mano porque sigo en el trabajo >___< y aca van a ser ya las 9pm en peru :S la cosa es que tienes que hacerlo en el mismo sitio donde lo agregaste.
Nada emulation, solucionado con el pack mod q has puesto. Yo lo hacía todo a mano como la primera vez y no habíaforma.
Muchas gracias
me alegra mucho que mi ayuda te haya servido aunque no haya sido por lo del CISF & Bind que aun no se usar xDDDD
te da error de autenticación del usuario?

de casualidad, no has hecho un RESTORE FACTORY DEFAULTS, no?
para instalar el stockplus, solo hay que hacer wipe cache y wipe dalvik cache...

por si las moscas, saca un backup de la consola AHORA MISMO, tal cual como está, y guardas ese backup. (lo haces dede el recovery)
Ya lo soluciono era cosa de instalar de nuevo el mod ya que el lo hacia manualmente y no le dejaba :)
29 respuestas