lunes, 15 de octubre de 2012

Particionando Android

¿Cuántos de vosotros habéis instalado Linux a manubrio alguna vez? Supongo que la pregunta debería de ser: ¿Cuántos de vosotros habéis particionado alguna vez una unidad X desde Linux?

Mmmh… Bueno. Para los que no lo hayan hecho, vamos a verlo. Y para los que sí lo hayan hecho, os lo refresco, por si las moscas. Lo haré a mi manera. Por lo tanto, puede que no sea del todo exacto, pero, para realizar la tarea básica, puede bastar.

Lo primero de todo, y muy, muy importante. Las operaciones que haremos aquí harán que los datos se pierdan. Por lo tanto, cualquier dato al que le tengas mucho aprecio y que se encuentre en el equipo que utilices para realizar todas estas operaciones, hazle un backup. Por si las moscas. Cualquier cosa que suceda, no me responsabilizo. Vamos, típico disclaimer de exoneración de responsabilidad.

Lo siguiente: ahora mismo (justo cuando estoy editando estos párrafos), no puedo asegurar que vaya a funcionar del todo. Léete todo antes de realizar cualquier operación.
Paso 1: Localizar la unidad que queremos particionar. En Linux, los dispositivos se encuentran en la carpeta /dev.

Si es un dispositivo IDE, su nombre será hdX donde X será a, b, c o d según la posición donde se encuentre instalado en la placa base. Si tiene un número, ése indica la partición detectada.

Si es un dispositivo SATA, USB… su nombre empezará por sdX. La X será abc… no se hasta cuándo terminará, la verdad. Y no se en qué se basa para asignarlas. Lo normal es que vaya asignando según vayan haciendo falta y de manera consecutiva. Pero, no sería raro que alguna vez me haya puesto otra que no me esperaba.

Paso 2: Ejecutar el comando fdisk para realizar la partición. Lo podemos lanzar de esta manera:

fdisk /dev/sdb

Donde el parámetro que necesita fdisk es el dispositivo, y no la partición.

Paso 3: Manipular la tabla de particiones elimando las que hagan falta, creando nuevas, indicando el sistema de ficheros que planeamos alojar, y guardando los cambios (o saliendo sin guardalos).
--

Un ejemplo práctico. Tenemos una nueva tarjeta microSD en nuestro flamante super Android Modelo Cojojundo XYZ con una ROM CyanogenMod9 (vale, ahora acaba de salir el 10, es un ejemplo!). . Queremos particionar la tarjeta por cualquier motivo. El que más os guste.

Termial en Android - Donde 'au' debía de ser 'su' 
Abriremos el emulador de terminal que tengamos instalado (repito: necesitamos un terminal instalado en el móvil), y elevar privilegios con su.

Ahora, necesitaremos saber cómo identifica el móvil las tarjetas. Un problema: no es hdX ni sdX. Una opción para saberlo sería googlear. ¿Para qué, si lo puedo decir yo? Las tarjetas las identifica en

/dev/block/vold/*

donde el asterisco será un número, como, por ejemplo, 179:8. A ver. El problema está en que no conseguí hacer funcionar esto del todo desde el móvil la primera vez que lo hice. No se si es que no guardé bien la tabla, pero el resultado que obtenía era raríiiisimo.
También hará falta saber dónde está montada. Normalmente se indentifica ejecutando

mount

y obtendremos el listado de los dispositivos montados en qué carpetas.

Sigo contando el proceso que hice (o que debería de haber hecho [esta segunda vez, lo voy a repetir mientras lo escribo], a ver si ahora me sale a la primera).

fdisk /dev/block/vold/179:8

Nos pide que introduzcamos el parámetro deseado. Pulsaremos "m" (sin comillas) para pedir la ayuda. Queremos eliminar las particiones que nos solicite, Para ello pulsaremos la letra "d". Pondremos una a una cada una de las particiones que tenemos. Se pueden ver si, estando en el prompt que nos pide hacer una acción, ponemos una "p". Así:

Imprimiendo las particines existentes
Imprimiendo las particines existentes
Eliminando las particiones de la tarjeta microSD
Eliminando las particiones de la tarjeta microSD 
Posiblemente, lo mejor sea guardar con "w" (lo veremos casi al final), y continuar por aquí. Si te sale otra partición "rara" o "enana", podrás eliminarla y ahora, sí que sí, intenta continuar.

Y ahora creamos las particiones. Le diremos que queremos que sean primarias,("p", de primaria y, otra vez, sin las comillas), un número de partición, en mi caso será 1 y 2, y un tamaño, yo pondré 7GB y 8GB respectivamente. Con un ejemplo debería de bastar:

Creando nuevas particiones, 7GB y 8 GB
Creando nuevas particiones, 7GB y 8 GB 
Una vez tenemos las particiones hechas, tendremos que seleccionar el tipo de sistema de ficheros que alojaremos para cada una de las particiones realizadas. Para ello, podremos buscar con la "l" (L minúscula) el listado con los códigos necesarios:
Listando los distintos tipos de particiones disponibles
Listando los distintos tipos de particiones disponibles 
que serán los que más te plazcan. Para que la partición sea visible con el terminal conectado al USB será necesario utilizar el código C (antes estaba usando el 7). Se podrá cambiar utilizando el "paramétro" "t":

Cambiando los tipos de particiones
Cambiando los tipos de particiones 
Para terminal con el fdisk,

Ahora, sólo queda salir presionando la tecla "w". Si te arrepientes de cualquier cambio, puedes salir introduciendo como parámetro la "q" (¿se ve que es una Q minúsucla?).

¿Guardando tabla de particiones?
¿Guardando tabla de particiones? 
Mmmh.... Pues... no. No me ha funcionado. Se ha quedado tal y como lo tenía antes de escribir este post. Es decir, al conectar el USB, se muestra la partición de esa tarjeta con el fichero ya que tenía dentro.

A reiniciar, entre cada operación, sí que han empezado a salir. Por lo tanto, la clave parece estar en que cuando se eliminan las particiones, tenemos que reiniciar el terminal y continuar con el proceso por donde lo hemos dejado.

He de reconocer que cuando lo hice la primera vez, lo acabé haciéndolo desde una VM, pero es muy raro. Sin reiniciar dice que sí, que está hecho, pero... No se.

Ahora que parece que están las particiones, puedo hacer el formateo.

mkfs.vfat -F 32 /dev/block/mmcblk1pX

donde la X será el número de partición.

Si te sale un error como "value too large for defined type" se resuleve... con el comando

newfs_dos /dev/block/mmcblk1p1
Lo he encontrado aquí.

Total, y para resumir:
- desmontar las particiones de la tarjeta:
- fdisk: eliminar partciones con "d". Reiniciar por si las moscas.
- fdisk: crear las particiones. Ojo: acordarse de poner el símbolo "+" (más) antes del valor del tamaño y las unidades (muy importante). Indicar el tipo de particion si se quiere cambiar.
- fdisk: ¿Reiniciar?
- Formatear (si se deja)

Y ya está!!

Soy consciente de que es mucho lío lo que he puesto. Esa es la razón del resumen. Y también que la primera vez que lo hice hace unas semanas fue haciendo trampa: conectando el adaptador de microSD a SD y después, desde una VM particionándolo. En principio, el comando newfs_dos debería de funcionar bien. El resto, os lo dejo a vosotros!!

Update, 2013-08-21: He actualiazdo los estilos. Se me habían puesto horrorosos.

No hay comentarios:

Publicar un comentario