RAID: Debian GNU/Linux

9 minuto(s) de lectura

Debian

RAID es un acrónimo del inglés que significa Redundant Array of Independent Disks, literalmente matriz de discos independientes redundantes, aunque no todos los sistemas RAID proporcionan redundancia.

La finalidad de un sistema RAID de discos consiste en crear un único volumen con varios discos duros funcionando en conjunto:

  • Redundancia: Tolerancia a fallos en el caso de que uno falle, conocido como disk mirroring
  • Mayor velocidad: Haciendo que ese conjunto sea en realidad un tándem, conocido como disk striping

Tipos Sistemas RAID

Un sistema RAID se puede crear de las siguientes formas:

  • Hardware: Se puede usar hardware dedicado llamado controladores RAID o tarjetas RAID para configurar y administrar RAID independientemente del sistema operativo. Los verdaderos controladores RAID de hardware tendrán un procesador dedicado para administrar dispositivos RAID.
    • Ventajas: Rendimiento, sencillez y disponibilidad desde el arranque
    • Desventajas: Dependencias de un proveedor y alto coste
  • Software: Configurado por el propio sistema operativo. Dado que la relación de los discos entre sí se define dentro del sistema operativo en lugar del firmware de un dispositivo de hardware.
    • Ventajas: Flexibilidad, código abierto y sin costes adicionales de hardware específico
    • Desventajas: Implementación específica según Sistema Operativo y leve carga adicional al procesador
  • Fake-RAID (Hardware asistido por Software): Por lo general, este se encuentra en la funcionalidad RAID dentro de las propias placas base. El software RAID asistido por hardware es una implementación que usa firmware en el controlador o la tarjeta para administrar el RAID, pero usa la CPU normal para manejar el procesamiento.
    • Ventajas: Compatibilidad con varios sistemas operativos
    • Desventajas: Limitado soporte RAID 0/1, hardware específico y sobrecarga de rendimiento

Tipos Configuración RAID

Las características de una matriz están determinadas por la configuración y la relación de los discos, conocida como su nivel RAID. Los niveles RAID más comunes son:

  • Mínimo dos discos duros:
    • RAID 0: Este tipo de RAID supone el concepto principal que proporciona mayor velocidad al sistema. La información se va escribiendo en dos discos de manera alterna, es decir, un bit en uno, y otro bit en otro, de manera que el ancho de banda es literalmente el doble y por eso se mejora notablemente el rendimiento en este modo. Además, se duplica la capacidad del volumen, es decir, si usamos dos discos duros de 1 TB cada uno, tendríamos un volumen de 2 TB. La contrapartida de este tipo de RAID es que si fallara alguno de los dos discos duros, la información de los dos se echaría a perder puesto que se encontraría repartida entre ambos.
    • RAID 1: Este es el otro tipo básico de RAID, y supone el concepto principal de redundancia. En este modo, los datos se escriben en los dos discos de manera simultánea, siendo el uno una copia exacta del otro, motivo por el que se conoce a este modo como «mirroring». En este caso, si se estropeara uno de los dos discos no pasaría nada porque los datos estarían todavía en el otro, y bastaría con reemplazar el disco estropeado por uno nuevo para volver a restablecer el RAID 1. El tamaño del volumen será el del disco de menor capacidad. Es decir, si usáramos un disco de 1 TB y otro de 500 GB, tendríamos un volumen de 500 GB en RAID 1.
  • Mínimo tres discos duros:
    • RAID 5: En este tipo se incrementa el rendimiento de lectura del volumen, multiplicando éste por tantos discos como conformen el RAID menos uno. Es decir, si tuviéramos 5 discos duros en RAID 5, la velocidad se multiplicaría por 4. Además, tendríamos tolerancia a fallos de un disco: si falla un disco, no se pierde nada, se cambia el disco y listo. La parte mala de este sistema RAID de discos duros es que si fallaran dos discos, sí que tendríamos pérdida de datos.
  • Mínimo cuatro discos duros:
    • RAID 6: Es una variante del RAID 5 pero que emplea dos discos como backup en lugar de uno, y por lo tanto la velocidad es de n-2, siendo n el total de discos del conjunto. Es un RAID 5 pero un poco más seguro, con mayor gasto en inversión inicial.
    • RAID 10 (RAID 1+0): En esta variante consiste en hacer primero dos RAID 1 y luego un RAID 0 entre ellos, teniendo así en total 4 discos duros con 2 discos de tolerancia a fallos uno por cada RAID 1 y en RAID 0 para una mayor velocidad.

Para configurar sobre nuestra base GNU/Linux Debian, he querido añadir este mini-tutorial basado en un RAID de Software que sería extensible a otras arquitecturas.

Instalar dependencias

Comenzamos satisfaciendo las dependencias que necesitaremos:

sudo apt-get update && \
sudo apt-get -y install mdadm

Y posteriormente identificando los discos duros/memorias USB:

lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

En mi caso obtengo los siguientes datos:

pi@overclock:~$ lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
NAME     SIZE FSTYPE TYPE MOUNTPOINT
sdc       16G        disk
sdd       16G        disk
sde       16G        disk
sdf       16G        disk
sda      465G        disk 
├─sda1     1K        part /
├─sda2   450G ext4   part /
└─sda5    15G swap   part
sdb      3,7T        disk 
└─sdb1   3,7T ext4   part /media/rednas

Ya preparado el entorno, voy a exponer por segmentos como podriamos configurar diferentes RAID´s.

Configurar RAID0

Comenzamos creando la estructura:

sudo mdadm --create --verbose /dev/md0 --level=0 \
--raid-devices=2 /dev/sdc /dev/sdd

Comprobamos que ha sido creado correctamente:

cat /proc/mdstat

En mi caso obtengo el siguiente resultado:

pi@overclock:~$ cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid0 sdd[1] sdc[0]
      209584128 blocks super 1.2 512k chunks

unused devices: <none>

Formateamos el sistema de ficheros de nuestro RAID:

sudo mkfs.ext4 -F /dev/md0

Creamos una carpeta para montar el sistema de ficheros:

sudo mkdir -p /media/raid0

Lo montamos para comprobar correcto funcionamiento:

sudo mount /dev/md0 /media/raid0

Comprobamos el espacio disponible:

df -h -x devtmpfs -x tmpfs

En mi caso obtengo el siguiente resultado:

pi@overclock:~$ df -h .x devtmpfs -x tmpfs
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       443G   29G  391G   7% /
/dev/sdb1       3,6T  2.8T  702G  80% /media/rednas
/dev/md0         31G   60M   28G   1% /media/raid0

Solamente faltaría añadirlo a nuestro arranque del sistema para que sea cargado tras reiniciar el sistema de forma automática.

Configurar RAID1

Comenzamos creando la estructura:

sudo mdadm --create --verbose /dev/md0 --level=1 \
--raid-devices=2 /dev/sdc /dev/sdd

Si los discos duros/memorias USB no llevan activa la casilla de arranque nos mostrara la siguiente advertencia a la que decimos de continuar (y):

mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
mdadm: size set to 104792064K
Continue creating array? y

Comprobamos que ha sido creado correctamente:

cat /proc/mdstat

En mi caso obtengo el siguiente resultado:

pi@overclock:~$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdd[1] sdc[0]
      104792064 blocks super 1.2 [2/2] [UU]
      [====>................]  resync = 20.2% (21233216/104792064) finish=6.9min speed=199507K/sec

unused devices: <none>

Formateamos el sistema de ficheros de nuestro RAID:

sudo mkfs.ext4 -F /dev/md0

Creamos una carpeta para montar el sistema de ficheros:

sudo mkdir -p /media/raid1

Lo montamos para comprobar correcto funcionamiento:

sudo mount /dev/md0 /media/raid1

Comprobamos el espacio disponible:

df -h -x devtmpfs -x tmpfs

En mi caso obtengo el siguiente resultado:

pi@overclock:~$ df -h .x devtmpfs -x tmpfs
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       443G   29G  391G   7% /
/dev/sdb1       3,6T  2.8T  702G  80% /media/rednas
/dev/md0         16G   60M   14G   1% /media/raid1

Un detalle a tener en cuenta sobre este tipo de RAID como explicamos al principio, si un disco duro se avería, este se podría sacar de servicio y meter otro en sustitución para volver a tener backup. Esto lo podríamos comprobar con el siguiente comando:

sudo mdadm --detail /dev/md0

Suponiendo que nos fallara el disco /dev/sdc, tendriamos que marcarlo como fallido y sacarlo de servicio:

sudo mdadm --manage /dev/md0 --fail /dev/sdc && \
sudo mdadm --manage /dev/md0 --remove /dev/sdc

Y para agregar nuevamente otro:

sudo mdadm --manage /dev/md0 --add /dev/sdc

Solamente faltaría añadirlo a nuestro arranque del sistema para que sea cargado tras reiniciar el sistema de forma automática.

Configurar RAID5

Comenzamos creando la estructura:

sudo mdadm --create --verbose /dev/md0 --level=5 \
--raid-devices=3 /dev/sdc /dev/sdd /dev/sde

Comprobamos que ha sido creado correctamente:

cat /proc/mdstat

En mi caso obtengo el siguiente resultado:

pi@overclock:~$ cat /proc/mdstat 
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid5 sde[3] sdd[1] sdc[0]
      209584128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>

Formateamos el sistema de ficheros de nuestro RAID:

sudo mkfs.ext4 -F /dev/md0

Creamos una carpeta para montar el sistema de ficheros:

sudo mkdir -p /media/raid5

Lo montamos para comprobar correcto funcionamiento:

sudo mount /dev/md0 /media/raid5

Comprobamos el espacio disponible:

df -h -x devtmpfs -x tmpfs

En mi caso obtengo el siguiente resultado:

pi@overclock:~$ df -h .x devtmpfs -x tmpfs
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       443G   29G  391G   7% /
/dev/sdb1       3,6T  2.8T  702G  80% /media/rednas
/dev/md0         31G   60M   28G   1% /media/raid5

Solamente faltaría añadirlo a nuestro arranque del sistema para que sea cargado tras reiniciar el sistema de forma automática.

Configurar RAID6

Comenzamos creando la estructura:

sudo mdadm --create --verbose /dev/md0 --level=6 \
--raid-devices=4 /dev/sdc /dev/sdd /dev/sde /dev/sdf

Comprobamos que ha sido creado correctamente:

cat /proc/mdstat

En mi caso obtengo el siguiente resultado:

pi@overclock:~$ cat /proc/mdstat 
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid6 sdf[3] sde[2] sdd[1] sdc[0]
      209584128 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/4] [UUUU]
      [===>.................]  recovery = 0.6% (668572/104792064) finish=10.3min speed=200808K/sec

unused devices: <none>

Formateamos el sistema de ficheros de nuestro RAID:

sudo mkfs.ext4 -F /dev/md0

Creamos una carpeta para montar el sistema de ficheros:

sudo mkdir -p /media/raid6

Lo montamos para comprobar correcto funcionamiento:

sudo mount /dev/md0 /media/raid6

Comprobamos el espacio disponible:

df -h -x devtmpfs -x tmpfs

En mi caso obtengo el siguiente resultado:

pi@overclock:~$ df -h .x devtmpfs -x tmpfs
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       443G   29G  391G   7% /
/dev/sdb1       3,6T  2.8T  702G  80% /media/rednas
/dev/md0         31G   60M   28G   1% /media/raid6

Solamente faltaría añadirlo a nuestro arranque del sistema para que sea cargado tras reiniciar el sistema de forma automática.

Configurar RAID10

Comenzamos creando la estructura:

sudo mdadm --create --verbose /dev/md0 --level=10 \
--layout=o3 --raid-devices=4 /dev/sdc /dev/sdd /dev/sde /dev/sdf

Comprobamos que ha sido creado correctamente:

cat /proc/mdstat

En mi caso obtengo elsiguiente resultado:

pi@overclock:~$ cat /proc/mdstat 
Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10] 
md0 : active raid10 sdf[3] sde[2] sdd[1] sdc[0]
      209584128 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
      [===>.................]  resync = 18.1% (37959424/209584128) finish=13.8min speed=206120K/sec

unused devices: <none>

Formateamos el sistema de ficheros de nuestro RAID:

sudo mkfs.ext4 -F /dev/md0

Creamos una carpeta para montar el sistema de ficheros:

sudo mkdir -p /media/raid10

Lo montamos para comprobar correcto funcionamiento:

sudo mount /dev/md0 /media/raid10

Comprobamos el espacio disponible:

df -h -x devtmpfs -x tmpfs

En mi caso obtengo el siguiente resultado:

pi@overclock:~$ df -h .x devtmpfs -x tmpfs
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       443G   29G  391G   7% /
/dev/sdb1       3,6T  2.8T  702G  80% /media/rednas
/dev/md0         31G   60M   28G   1% /media/raid10

Solamente faltaría añadirlo a nuestro arranque del sistema para que sea cargado tras reiniciar el sistema de forma automática.

Configurar RAID: Arranque Sistema

Independiente del tipo de RAID que elijamos el montado del mismo al arranque del sistema es común y se realiza de la siguiente forma:

sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf

Posteriormente, regeneramos initramfs (sistema de archivos RAM inicial), para que la matriz esté disponible durante el proceso de arranque inicial:

sudo update-initramfs -u

Agregamos la información a nuestro fstab, recuerda cambiar el valor /media/raid1 por el tipo de RAID que has elegido, por ejemplo: /media/raid5

echo '/dev/md0 /media/raid1 ext4 defaults,nofail,discard 0 0' | \
sudo tee -a /etc/fstab

Reiniciamos el sistema:

sudo reboot

Y listo!