RAID 0 en Raspberry PI con pendrives.

Tengo un Raspberry Pi 2 para hacer experimentos y cuando no lo uso corre Boinc que es un software de computación distribuida del que ya hablaré.

Este software hace uso intensivo del acceso a disco y pensé que una forma de salvar la SD card para aquellos usen una o como en mi caso para hacer menos uso del HDD que tengo conectado por USB, sería instalar ese programa en un pendrive.

Se da el caso que tengo muchos pendrives. Algunos de unos gigas pero también algunos mas antiguos de decenas de megas y se me ocurrió un experimento para dar uso a esos viejos pendrives a la vez que protejo mi HDD.

La solución en la que pensé fue en crear un RAID 0 con los pendrives.
RAID 0 es una configuración por la cual se pueden montar un sistema de ficheros en un número de dispositivos de almacenamiento como si fuesen uno solo.
Hay otras configuraciones como por ejemplo montar dos dispositivos en que uno es un una replica de otro por prevención de errores.

Los RAID pueden ser por hardware en que el sistema operativo solo ve un dispositivo y no la batería de ellos que lo componen, o puede ser por software en que el SO se hacer cargo de ello y es transparente para el usuario y las aplicaciones.

El software que encontré se llama mdadm y se instala muy fácil en Linux Raspberrypi muy facil:

sudo apt-get install -y mdadm

Con el comando lsblk podemos ver donde los ficheros de dispositivo de nuestros pendrives.



Ahora bien, supongamos que tenemos dos pendrives y sus dispositivos son /dev/sdd1 y /dev/sdb1.

Crearíamos el dispositivo RAID con el siguiente comando:

sudo mdadm --create /dev/md0 --raid-devices=2 --level=0 /dev/sdd1 /dev/sdb1

Ahora habria que salvar la configuración para que Linux se acuerde la próxima vez de como montar el nuevo dispositivo /dev/md0. Usamos este comando:

sudo mdadm --detail --brief /dev/md0 >> /etc/mdadm.conf

Ahora tenemos que "ensamblar" el nuevo RAID. Esto internamente guarda unos datos sobre como mdadm tiene que acceder a los dispositivos. El orden y esas cosas. Recordad esto para luego.

sudo mdadm -A /dev/md0 -f /dev/sdc1 /dev/sdb1

En este punto ya podemos formatear el nuevo dispositivo /dev/md0 como si fuese cualquier otro:

sudo mkfs.ext4 /dev/md0

Y montarlo. Par este ejemplo usaré la carpeta /mnt/raid:

sudo mount /dev/md0 /mnt/raid

Y ahora ya podemos acceder lo. Como hariamos con cualquier otro dispositivo estando este compuesto realmente por dos.

Ahora hay un problema. Si reiniciamos el dispositivo no lo volverá a montar. Esto es porque volviendo al paso de "ensamblado" hay un problema que tiene el mdadm por el que en versiones previas hacia ese ensamblado de una manera y versiones posteriores lo hace de otra por tanto hay dos modos y cuando Linux intenta reconstruir el RAID lo intenta con el modo antiguo en vez de el modo nuevo. Entonces voy a explicar primero como arreglar esa situación y después como arreglarlo definitivamente.

Primero detenemos el RAID:

sudo mdadm --stop /dev/md0

Ahora metemos el valor 2 en ese fichero para decir el modo

sudo echo 2 > /sys/module/raid0/parameters/default_layout

y volvemos a ensamblar el RAID

sudo mdadm -A /dev/md0 -f /dev/sdc1 /dev/sdb1

Ahora podríamos volver a montarlo como antes.

Como esto es impráctico necesitamos que el Raspberry Pi sepa en que modo re-ensamblar el RAID.
Para ello tenemos que pasar unos parámetros al kernel en el arranque.
Esto se hace editando el fichero /boot/cmdline.txt y añadir en la misma linea el parámetro raid0.default_layout=2. En mi caso lo tengo entre fsck.repair=yes y rootwait.

Con esto el Raspberry Linux arranca sabiendo en que modo tiene que ensamblar el RAID.

Espero que sea útil. Ya me diréis en los comentarios.

Comentarios

Entradas populares