Crear un RAID 5 en Linux (Raspbian)

Con mdadm se puede crear un RAID y poner tres o más discos con la información repartida entre ellos. Si falla uno siguen los otros, sin cortes de funcionamiento. Con la información de los discos restantes se puede regenerar la información del disco fallido.

La herramienta mdadm (algo así como Multi Device Administrator) permite crear RAID de varios niveles (organizaciones de los datos entre los discos) y es la que utilizo en este artículo.

El RAID de nivel 5 (o RAID 5) consiste en repartir la información en tres o más discos duros. Todos los discos duros tienen el contenido repartido entre ellos y con información de paridad (comprobación de errores), de forma que si uno deja de funcionar, los otros sigue fnuncionando sin que ningún usuario note nada. En cuanto se reemplace el disco erróneo, con la información del resto de discos se regenerará el disco fallido y el sistema volverá a estar funcionando. Salvo que se estropeen dos discos duros a la vez, el sistema no dejará de funcionar.

El problema hoy en día es que los discos son muy grandes y es muy fácil encontrar un error minúsculo. Si al regenerar un disco falla otro, el RAID no se puede regenerar y queda inservible. Por este motivo mucha gente desaconseja utilizar RAID de nivel 5.

En el ejemplo he utilizado tres particiones de diferentes tamaños para crear el RAID. Dos de las tres particiones están en el mismo disco duro cuando deberían estar en discos independientes. Los discos son /dev/sdb/dev/sdd. El RAID resultante se llama /dev/md0. El sistema operativo es Raspbian y lo tengo instalado en una tarjeta SD (/dev/mmcblk0) que no influye en este artículo. Todos los discos duros son muy antiguos puesto que son para hacer pruebas.

Otros artículos relacionados

En mi web hay varios artículos relacionados con RAID:

Preparación del sistema

Tengo un artículo que explica cómo identificar discos duros en Linux.

Primero es necesario conocer los nombres de los discos duros. Personalmente suelo hacer un listado del directorio /dev/disk/by-id para mostrarme los discos duros y ver un pequeño nombre descriptivo de cada uno, lo cual me permite identificarlos.

En este caso me sirve con ver el tamaño para reconocerlos, así que me sirve con un lsblk:

root@wasge-raspberrypi4:/home/pi# lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sdb           8:16   0 465.8G  0 disk
├─sdb1        8:17   0   250G  0 part
└─sdb2        8:18   0 215.8G  0 part
sdc           8:32   0  76.3G  0 disk
└─sdc1        8:33   0  76.3G  0 part
sdd           8:48   0 232.9G  0 disk
└─sdd1        8:49   0 232.9G  0 part
mmcblk0     179:0    0   3.6G  0 disk
├─mmcblk0p1 179:1    0  41.8M  0 part  /boot
└─mmcblk0p2 179:2    0   3.6G  0 part  /

De ésta información se deduce que tengo tres discos duros con sus particiones:

  • /dev/sdb es un disco de 500GB
    • /dev/sdb1 es la primera partición.
    • /dev/sdb2 es la segunda partición
  • /dev/sdc es un disco de 80GB
    • /dev/sdc1 es la primera partición.
  • /dev/sdd es un disco de 250GB
    • /dev/sdd1 Es la primera partición.

En mi caso, teniendo en cuenta que ésto es una prueba, he utilizado dos particiones del mismo disco duro. Esto no tiene sentido, pero sirve para demostrar el funcionamiento y probar que mdadm funciona con varias particiones, estén donde estén, sean discos, SSDs, o unidades remotas, todo mezclado.

Después hay que instalar (si no está instalada) la herramienta mdadm para gestionar el RAID.

apt-get install mdadm

Crear el RAID

Una vez preparado el sistema se crea el RAID. Aquí explico el comando utilizado:

  • mdadm (Herramienta para gestionar el RAID)
    • --create (Crear un RAID)
    • --verbose (Mostrar texto para indicar el proceso)
    • /dev/md0 (El nombre del nuevo RAID, tradicionalmente se utiliza md0)
    • --level=5 (Nivel del RAID, en este caso nivel 5)
    • --raid-devices=3 (Cuántos dispositivos se utilizan, en este caso dos discos duros)
    • /dev/sdb1 (Nombre de la primera partición del primer disco duro)
    • /dev/sdb2 (Nombre de la segunda partición del primer disco duro)
    • /dev/sdd1 (Nombre de la primera partición del segundo disco duro)

Se ejecuta el comando y empieza el proceso. Es bastante rápido, prácticamente instantáneo, pero una vez creado el sistema tardará bastantes minutos en sincronizar ambos discos por primera vez.

root@wasge-raspberrypi4:/home/pi# mdadm --create --verbose  /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdb2 /dev/sdd1
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: /dev/sdd1 appears to contain an ext2fs file system
       size=244197560K  mtime=Thu Jan  1 01:00:00 1970
mdadm: /dev/sdd1 appears to be part of a raid array:
       level=raid0 devices=2 ctime=Mon May  7 23:35:07 2018
mdadm: size set to 226110464K
mdadm: automatically enabling write-intent bitmap on large array
mdadm: largest drive (/dev/sdb1) exceeds size (226110464K) by more than 1%
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

Una vez hecho esto, el sistema empezará a sincronizar los dos discos duros. Ahora mismo empieza el proceso de sincronización entre ambos discos.

Ver estado del RAID

Para ver los detalles del RAID se utiliza el comando mdadm --detail y se especifica el RAID que se quiere consultar.

root@wasge-raspberrypi4:/home/pi# mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Thu May 17 11:58:49 2018
     Raid Level : raid5
     Array Size : 452220928 (431.27 GiB 463.07 GB)
  Used Dev Size : 226110464 (215.64 GiB 231.54 GB)
   Raid Devices : 3
  Total Devices : 3
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Thu May 17 12:02:59 2018
          State : clean, degraded, recovering
 Active Devices : 2
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 512K

 Rebuild Status : 0% complete

           Name : wasge-raspberrypi4:0  (local to host wasge-raspberrypi4)
           UUID : fa0d1c78:63b06024:20e64739:602ea63b
         Events : 48

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       18        1      active sync   /dev/sdb2
       3       8       49        2      spare rebuilding   /dev/sdd1

En la parte inferior aparecen listados dos discos duros como "active sync", es decir, activos y sincronizados. El tercer disco aparece como "spare rebuilding" (de repuesto reconstruyendo) puesto que está generando los datos de paridad.

También se puede obtener información del RAID con otro comando, el cual genera información más detallada cuando se están sincronizando los discos. El comando es cat /proc/mdstat. Aquí se ve mejor que mdadm está "recuperando" un disco. Realmente lo está recuperando porque nunca lo ha tenido:

root@wasge-raspberrypi4:/home/pi# cat /proc/mdstat
Personalities : [raid0] [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[3] sdb2[1] sdb1[0]
      452220928 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
      [>....................]  recovery =  1.8% (4159476/226110464) finish=451.6min speed=8190K/sec
      bitmap: 0/2 pages [0KB], 65536KB chunk

unused devices: <none>

Formatear el nuevo RAID

El RAID ya está creado, ahora hay que formatearlo para poder empezar a utilizarlo. En el ejemplo he utilizado el sistema de archivos EXT 4.

mkfs.ext4 /dev/md0

Ahora ya está el RAID creado y formateado, pero estaría bien poder hacer algo con él, así que habrá que montarlo.

Montar el nuevo RAID

Para montarlo se puede utilizar un comando temporal, que durará hasta la próxima vez que se reinicie el sistema o hasta que se desmonte. El comando para montarlo es mount y el comando para desmontarlo es umount.

mount /dev/md0 /mnt/minuevoraid

En caso de que no haya habido problemas, la carmeta /mnt/minuevoraid contiene 80GB de espacio y es como cualquier otra carpeta del sistema, perfectamente funcional y sin ningún tipo de restricción

Fecha de creación: 6/5/2018 22:14:04 | Última modificación: 26/11/2020 19:05:47 | Hora del servidor: 7/5/2021 13:09:53