Spiga

Arrancando la Raspberry Pi desde un disco duro

¡Volvemos a la carga con un nuevo tutorial! Hoy os voy a enseñar a mover el sistema de ficheros de vuestra Raspberry Pi de la tarjeta SD a un disco duro, consiguiendo un mejor rendimiento general y un menor tiempo de arranque de la misma. He visto muchas entradas en el foro oficial de gente intentándolo sin éxito y la verdad es que es bastante sencillo siempre que sepas los pasos correctos.

Vamos a necesitar algunas herramientas extra, ya que no podemos realizarlo directamente desde la Raspberry. Así que los materiales que vamos a necesitar son:

  • Disco duro. No olvidéis alimentarlo de forma externa, ya que la Raspberry Pi no podrá con él. En mi caso he comprado una cajita para un disco de 3,5" que tenía abandonado en casa. La inversión ha sido de 12€.
  • Live CD de Ubuntu, por ejemplo, o cualquier Linux instalado en sistema con GParted.
  • Un ordenador al que poder conectar la SD y el disco duro. En él arrancaremos la Live CD.

Paso 1, hacer copia de seguridad de la SD:

Como no queremos llevarnos un disgusto en caso de equivocarnos, lo que haremos será crear una imagen de nuestra SD por si las moscas. Tenéis diferentes opciones desde Windows y Linux, siendo Win32DiskImager la más sencilla de todas en el primero y dd en caso de usar Linux. Si es vuestro caso es el último abrid una terminal y escribid:

dd if=/dev/sdX of=/ruta/de/imagen

Por ejemplo, en mi caso la SD es "sdb" y quiero crear la copia en mi carpeta de usuario, así que el comando me quedaría tal que:

dd if=/dev/sdb of=/home/darknsis/backup.dd

Al finalizar debe mostrarnos una pantalla similar a la siguiente:

dd tras finalizar el volcado de la SD a una imagen
 
Si os diese error al intentar ejecutar el comando, probad con sudo delante. Aunque por sencillez el primer método es mejor para los novatos, recomiendo ir acostumbrándose a las herramientas que nos brinda Linux.



Paso 2, copiar la partición:

Arrancaremos el ordenador con la Live CD, vuestra distribución Linux instalada o la opción que más os convenga. Si no tenemos instalado GParted en dicha máquina abriremos una terminal y escribiremos:

sudo apt-get install gparted

Conectamos nuestro disco duro, la SD y ya podremos ejecutar GParted. Tardará unos segundos en detectar las unidades y las particiones que hay hechas en las mismas, cuando finalice seleccionaremos el disco duro externo (ojo, no vayáis a cargaros vuestro disco de sistema!) y eliminaremos cualquier partición existente (botón derecho encima y "Eliminar"). Por ahora vamos a dejarlo completamente vacío, aunque también existe la posibilidad de tener varias particiones y dejar el espacio necesario para crear una nueva.

A continuación seleccionaremos la SD del desplegable superior derecho (en la foto veréis que tengo "/dev/sdb" que es mi SD) y marcaremos la partición de tipo "ext4", haremos clic con el botón derecho para mostrar el menú y seleccionaremos la opción "Copiar".


Captura de GParted, hay que copiar la partición ext4 de sistema
 
Volvemos ahora al disco duro en el que queremos instalar el sistema de ficheros, para ello recuerda seleccionarlo del listado desplegable superior derecho (donde aparecen identificados como "/dev/sdX"). Si está hecho todo correctamente deberéis verlo vacío y la barra de color gris. Para pegar la partición que hemos copiado hace unos segundos pincharemos en el espacio vacío, haremos clic con el botón derecho encima y de las opciones seleccionaremos "Pegar". Ahora hay que aplicar los cambios, así que iremos a "Editar" y dentro "Aplicar todas las operaciones" y esperaremos a que acabe el proceso.

Paso 3, cambiando ruta de acceso:

Prácticamente ya hemos acabado, así que vamos a dar los dos últimos pasos necesarios para que todo funcione correctamente. Lo primero es editar el fichero "cmdline.txt" que tenéis en la partición de tipo FAT en la SD (la partición que os deja ver desde Windows). Como siempre volveremos a hacer una copia de seguridad del fichero, copiándolo y renombrándolo a "cmdline.original" por ejemplo y dejando otro exactamente igual como "cmdline.txt". Una vez lo tengamos abrimos el fichero "cmdline.txt" en un editor de textos, ya sea GEdit si usamos una Live Ubuntu o con nano desde la terminal. Veréis que el contenido que tiene es el siguiente:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

Lo que vamos a hacer es sustituir la oarte que pone "/dev/mmcblk0p2" por la ruta de nuestro disco duro en la Raspberry. En mi caso, como es el único disco duro conectado con una única partición, le pertenece "sda1". Si habéis seguido mis pasos y no hay más unidades conectadas vosotros deberéis tener la misma, pero aseguraros antes. Por lo tanto el fichero nos queda así:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline rootwait

Fijaros que no hemos tocado nada más del fichero que la ubicación del "root". Ahora guardarlo y vamos al último paso, que se trata de editar un fichero muy importante: fstab (File System Table). Os recomiendo encarecidamente la lectura del funcionamiento de fstab, ya que no es tan complicado como inicialmente parece.


Paso 4, modificando FSTAB:

Abrimos la partición ext4 que hay en la SD (la que no podemos ver con Windows, de ahí que estemos con un Linux haciendo todo :P) y, como no queremos llevarnos sorpresas, vamos a realizar también una copia de seguridad del fichero, procediendo de igual manera que hicimos con el "cmdline.txt". Yo he hecho una copia del mío llamándola "fstab.original". Para localizar el fichero debéis ir a "/etc/fstab". Una vez hecha la copia abrimos el fichero con un editor de textos y deberemos encontrar algo similar a lo siguiente:

Haz clic para ampliar vista de fstab original



Fíjarosen la tercera línea, hay una referencia a un sistema de ficheros ext4 en el dispositivo "mmc" que es la SD. ¿Qué haremos? Pues vamos a cambiar esa parte por la ruta de acceso de nuestro disco duro, pero ojo, no modifiquéis ninguna otra línea o de lo contrario no nos va a arrancar, ya que siempre necesitamos usar una SD para ello (y es lo que hace la línea superior) así que nos quedará de la siguiente manera:

fstab listo para cargar el sistema desde disco externo


No os preocupéis si no queda alineado todo, ya que no es importante para el buen funcionamiento del fichero. Guardamos cambios, cerramos, apagamos el sistema y sonreímos, puesto que ya hemos hecho toda la faena ;).

Ahora enchufa el disco duro a tu Raspberry Pi (recuerda que sin él no podrás arrancar a partir de ahora), introduce la SD, conecta la corriente y disfruta viendo como se enciende el LED de actividad de tu disco duro al arrancar.... contando que tenga, ¡claro! Como paso adicional puedes intentar crear una partición adicional en el disco o simplemente redimensionar la actual (que será del tamaño de tu SD). La segunda opción es tan sencilla que lo hará tu propia Pi, ¿cómo? Abrimos terminal y escribimos:

sudo raspi-config

Veremos la siguiente pantalla, que vimos la primera vez que iniciamos la Raspberry:

Pantalla de configuración de la Raspberry Pi

Y seleccionamos la opción "expand_rootfs". Dependiendo de la capacidad de tu disco será más rápido o lento el proceso, no desesperes. Personalmente prefiero hacer otra partición y guardar en ella mis ficheros, pero por facilidad para los novatos el método que os he explicado es el mejor. Tranquilos, ya tendremos tiempo de ir aprendiendo todo lo que podemos hacer y, como se suele decir, "Roma no se construyó en un día".

Espero que os sea de utilidad, ya que he priorizado el tutorial a los que tenía para Webmin. Si tenéis dudas, sugerencias o queréis enteraros de los tutoriales que voy preparando os recuerdo que mi Twitter está a vuestra disposición en @drkbcn.

¡Un saludo y hasta entonces!

5 comentarios:

  soymicmic

26 de noviembre de 2012, 22:12

Pues mañana me llega el pack de la Raspberry y todos estos post me vienen como anillo al dedo. Además tengo un disco de 1TB que quiero aprovechar para que arranque...

En finxxx, muchas gracias por tus post!

  DaRKnSiS

27 de noviembre de 2012, 13:11

Ya verás el partido que le sacas :) Yo estoy encantado.

  Unknown

28 de junio de 2013, 12:52

Pues parece que todo correcto.
Muchas gracias, a mi mas que la velocidad, me interesa que las raspberry no corrompa la SD cuando hay un corte de luz.
La Rasp atiende una estación meteorológica automática y no tiene muy fácil acceso.
Veremos como se comporta.

  César E.R.

8 de junio de 2015, 21:48

Muy bueno el post.
Me ha arrancado, así que esa parte bien, pero ha tardado muy poco en expandir la SD al disco duro.
Cuando hago df -h, rootf me dice que está al 18% y sin embargo el disco tiene 1 TB. ¿No debería estar más vacío?

Saludos y gracias.

  Unknown

17 de febrero de 2016, 19:08

Este comentario ha sido eliminado por el autor.