Hola a todos!

Continuamente me encuentro con dispositivos Android que me vienen con problemas de capacidad de almacenamiento; vamos que Whatsapp se come toda la memoria interna con videos y los juegos rematan el poco espacio que les queda. La solución pasa por hacerse con una tarjeta SD y en teoría ya no tendremos problemas de espacio. En la realidad las cosas no son tan fáciles como comprar y poner la tarjetita, hay que mapear la memoria para asignar cada programa a memoria interna o externa.

¿Que vamos a necesitar?

  • Dispositivo con root (hay muchos manuales para cualquier dispositivo, el mejor método es con SuperSU)
  • Xposed (la navaja suiza de modificación de Android: http://repo.xposed.info/module/de.robv.android.xposed.installer)
  • Los módulos Xposed: XinternalSD (se lee/escribe todos los directorios generados por la aplicación o sistema operativo de la SD) y ObbOnSD (leer Obb de la SD)
  • La aplicación App2SD PRO que conseguirá enlazar las aplicaciones y datos a SD

Vamos a ponernos en antecedentes, las aplicaciones de Android están basadas en varios tipos de datos a guardar y como Android está basado en Gnu/Linux, este los guarda bajo una estructura de directorios Linux. Los datos que más consumen son:

  • Obb. Donde se guardan datos estáticos del programa, por ejemplo el mapa de un juego con sus fotos y videos. Suelen estar en /storage/sdcard0/Android/Obb -> memoria interna
  • Apk. El lanzador de la aplicación o la aplicación propiamente dicha. Se guardan en /data/app -> la raiz del sistema, osea memoria interna
  • Datos de programa. Son los datos que genera y consume la aplicación para funcionar. Pueden crecer mucho. Se encuentran en /data/data -> raiz del sistema, osea memoria interna
  • Datos externos. Son directorios extra que crea el programa para almacenar datos que se producen, por ejemplo Whatsapp genera la carpeta Whastapp en /storage/sdcard0

Así que como vemos todo va a parar siempre a la memoria interna, si ademas el programa genera sus propios datos (por ejemplo Telegram, Oruxmaps o Whatsapp crean directorios extra en /storage/sdcard0 para guardar sus imágenes, videos y cosas), estos también irán a parar a la memoria interna. Demasiados datos para un sitio que comúnmente es tan pequeño (aunque muy rápido).

La estrategia que vamos a seguir es valernos del sistema de archivos de Linux y de Xposed para mover todos los datos a la SD. Solo deberías mover programas que no uses mucho o que no requieran mucha velocidad (leer/escribir de la SD es más lento y costoso). Por ejemplo yo movería un juego, no movería App2SD Pro y me pensaría si mover Whatsapp (yo lo tengo movido a la SD).

Para el ejemplo usare una Tablet con Android Marshmallow 6.1 de serie (roteada y con Xposed) con 16Gb de memoria interna y una memoria externa microSD de 64Gb.

Primero particionare con MiniPartition Tool 9.1 (puedes usar Gparted para Gnu/Linux) la tarjeta microSD de esta forma:

La primera partición será de 52Gb en Fat32 (si, no aparece como tal, ahora os explico), la segunda será de algo más de 6Gb en Ext2 (Ext3 y Ext4 por alguna razón no me funcionaron) porque dentro voy a meter también una Gnu/Linux Debian, en realidad con 3Gb sería suficiente. La primera partición una vez creada la cambiaré a exFat porque así podre soportar archivos de más de 4GB y tendré que hacerlo con Windows porque exFat es un sistema de archivos creado por Microsoft y nadie mejor que el para crear la partición, ¿verdad? (ademas MiniPartition Tool 9.1 no la soporta y la cataloga como Other). A la primera partición podéis etiquetarla como SD Externa y la segunda como Enlaces... esto ya a vuestro gusto.

Por experiencia os diré que con un máximo de 3-5GB de partición secundaria sera suficiente. En esta partición guardaremos toda la información de Apks y Datos de programa del tipo /data/data. Esta partición secundaria no sera leída por Windows ni por Android (que la dará como dañada, no la formateis con Android, decirle a Android que no muestre más notificaciones sobre esa partición).

Android 6.x soporta en su kernel lectura/escritura para exFat en la Sd (para menores versiones de Android es posible que necesitéis cambiar el kernel para tener este soporte) y también tiene soporte de lectura/escritura de Ext2 aunque de la segunda partición como errónea.

Ahora vamos a meter la SD particionada en el dispositivo Android y lo arrancamos. Tendremos capacidad de lectura/escritura por usb (MTP) en la primera partición exFat y la segunda la dará como dañada, pasamos de eso del dañado y abrimos App2SD.

Abrimos la primera opción (Link apps to SD card) y vemos un menú donde escogeremos Ext2 como opción de segunda partición e instalación avanzada para que se cree un Script que montara la segunda partición dejándola preparada para empezar a enviar aplicaciones allí. Si todo va bien (que debería) estamos preparados para liberar memoria interna.

Ahora vamos a configurar un poco App2SD, en las opciones principales pulsaremos sobre SDFix. Esto nos quitara problemas con escrituras y permisos en la SD. Después instalaremos BusyBox, no tiene nada que ver con este manual pero os lo recomiendo wink
Ahora nos vamos a la opción principal Configuración y dentro a Copia de seguridad de la base de datos de Apps2SD, desmarcarlo porque crece mucho y va todo a la memoria interna.
En este menú de Configuración también hay dos opciones muy importantes: Establecer tarjeta SD interna (dirección de la memoria interna) y Establecer tarjeta SD externa (dirección de la memoria externa). Tanto una como otra en Android 6.x se llaman /storage/XXXX-XXXX. Si es un Android anterior a 6.x serán /storage/sdcard0 para la interna y /storage/sdcard1 para la externa. Estas dos opciones serán importantes si el programa no detecta bien las particiones del sistema.
Para saber si el programa pesca bien todas las particiones iros a la opción principal Link apps to SD card, pulsar sobre opciones y allí sobre Almacenamiento y debería quedaros más o menos así (reiniciar el dispositivo para que cargue bien las particiones configuradas):

Pues ya estamos preparados, observando estas particiones vemos como /storage/emulated/0 es la interna (no configure en opciones la memoria interna), la externa corresponde a /storage/AAC3-0FD3 y la segunda partición de la microSD está montada en /data/sdext2. Como veis incluso con casi 200 apps instaladas y enlazadas incluida una distribución Gnu/Linux guardadas en la segunda partición sobran 3.2 Gb.
Muy bien, pero ¿que es eso de enlazar, Marcos? Os dije que la segunda partición sería una Ext2 y resulta que todo el sistema de archivos de Android está montado bajo Ext4, ambos son sistemas de archivos nativos del kernel de Linux osea que nos podemos aprovechar de sus funcionalidades, concretamente de esta: el lincado . Esto nos permitirá mantener en memoria interna unos cuantos Kb que apuntan al grueso de Gb que estarán enlazados y escritos en la segunda partición de la microSD.
Ahora alguien pensará, pues no hagas una segunda partición haz una grande Ext4 o Ext2 con los 64Gb de la microSD y enlaza. El problema es que Windows no lee esos sistemas de archivos, si sacas la tarjeta SD en el trabajo y si se la dejas a alguien no podrá leerla si no es con un kernel Linux o algún programa raro para Windows (un follón que os puede dejar corrupta la SD). Así que con este sistema tanto Windows como Linux podrá leer la partición extFat sacando la microSD y ademas la partición Ext2 no sera accesible desde Windows por lo que no nos podrán romper la tablet por manazas (ademas es una partición escondida para datos seeeecretos), nosotros solo deberemos vigilar que la tarjeta se extraiga con el dispositivo apagado y no se vuelva a encender hasta tener otra vez la tarjetita de vuelta puesta.

Ahora si vamos a liberar nuestros primeros Gb, moveremos el juego N.O.V.A. 3
Pulsamos sobre Link apps to SD card en el menú principal de la aplicación App2SD y seleccionamos la aplicación que ya estará instalada en la memoria interna por defecto (y los correspondientes Obb en /storage/sdcard0). Veremos algo como esto:

Como veis yo ya la tengo enlazada. Si hay cadenas es que esta enlazada, si esta el icono de una microSD verde es que esta en la microSD y si tiene los dos es que esta enlazada en la microSD.
Así que ahora toca darle a enlazar y enlazaremos todo, excepto los Obb (enlazar carpeta de datos externos). Los datos externos serán leídos gracias a Xposed y la aplicación ObbOnSD desde la ruta /storage/sdcard1/Androd/obb de la memoria externa

Si todo va bien, App2SD moverá todos los datos (apk y datos de programa) a la partición secundaria de la Sd (la de enlaces). Los obb los moveremos a mano, a la tarjeta Sd en la ruta /storage/sdcard1/Androd/obb.

Para leer los datos extra de una aplicación como Whatsapp (leer y escribir la carpeta Whatsapp desde la memoria externa SD) usaremos la aplicación XInternalSD de Xposed que cambiara la ruta por defecto de todas las aplicaciones o las que seleccionemos por /storage/sdcard1

En este punto todos los datos que elijamos estarán en la Sd (apks, datos de programa, obb y datos externos) y así podremos dejar la memoria interna libre y sin saturar para que Android trabaje suelto, para aplicaciones de mucho uso o para cuestiones que requieran mucha velocidad (un pdf importante enorme, por ejemplo).

Como nota final Android 6 propone usar la memoria externa como interna de forma nativa y así sumar sus capacidades en una interna más grande. El problema es que en este esquema de memoria si conectamos el dispositivo Android por usb (MTP), solo veremos la memoria interna sin la suma de la memoria externa. Lo cual nos deja la memoria de la Sd para poco más que mover apks y datos de programa.

En mi opinión, Android (osea, Linux) tiene arquitectura más que de sobra para crear un esquema de memoria tan bueno como tenia Symbian (recordáis el, ¿Donde desea instalar la aplicación?). No importa si los dispositivos cada vez tienen más capacidad o si se dice que las Sd tienden a desaparecer, es el usuario quien decide donde instalar y como organizar sus dispositivos. Ojala Android 8 permita seleccionar donde instalar por completo una aplicación, mientras tanto con este esquema que os propongo nuestras SD pueden darle nueva vida a dispositivos viejos o nuevos.

Saludos a todos laugh

Volver