RAID5

En este documento se detallan los pasos a seguir para poder realizar un RAID 5 con tres discos en Linux.

Por ello, este ejemplo se realizará en un entorno virtualizad con VirtualBox haciendo uso de tres discos virtuales de una capacidad de 2GB cada uno en una máquina con Ubuntu instalado.

Imagen de discos virtuales en la MV

Dependencias

Es necesario tener instalado mdadm:

sudo apt update
sudo apt install mdadm -y

Formatear discos

Como siguiente paso, será necesario localizar los discos que se usarán para el RAID:

$ lsblk
sda      8:0    0    40G  0 disk 
├─sda1   8:1    0     1M  0 part 
└─sda2   8:2    0    40G  0 part /
sdb      8:16   0     2G  0 disk 
sdc      8:32   0     2G  0 disk 
sdd      8:48   0     2G  0 disk 
sr0     11:0    1  1024M  0 rom

En mi caso, son sdb, sdc y sdd.

El proceso para formatear los discos será el mismo en los tres casos: se usará fdisk.

$ sudo fdisk /dev/sda

Commande (m pour l'aide) : n
Type de partition
   p   primaire (0 primary, 0 extended, 4 free)
   e   étendue (conteneur pour partitions logiques)
Sélectionnez (p par défaut) : p
Numéro de partition (1-4, 1 par défaut) : 1
Premier secteur (2048-4194303, 2048 par défaut) : 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-4194303, 4194303 par défaut) : 

Une nouvelle partition 1 de type « Linux » et de taille 2 GiB a été créée.

Commande (m pour l'aide) : t
Partition 1 sélectionnée
Hex code or alias (type L to list all): fd
Type de partition « Linux » modifié en « Linux raid autodetect ».

Commande (m pour l'aide) : w
La table de partitions a été altérée.
Appel d'ioctl() pour relire la table de partitions.
Synchronisation des disques.

Crear el array RAID5

Usando mdadm, se creará un disco virtual, /dev/md0 haciendo uso de los tres discos previamente formateados:

sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1

Para ver el proceso:

$ cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdd1[3] sdc1[1] sdb1[0]
      4188160 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
      
unused devices: <none>

Para ver la información del RAID5 creado:

$ sudo mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Tue Jan 20 08:39:24 2026
        Raid Level : raid5
        Array Size : 4188160 (3.99 GiB 4.29 GB)
     Used Dev Size : 2094080 (2045.00 MiB 2144.34 MB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Tue Jan 20 08:39:39 2026
             State : clean 
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : docker-VirtualBox:0  (local to host docker-VirtualBox)
              UUID : e667b64c:4d125144:b56e73a0:2ec88c62
            Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       3       8       49        2      active sync   /dev/sdd1

Crear el sistema de archivos

Para poder usar el disco /dev/md0 es necesario crear un sistema de archivos, por ejemplo, ext4:

mkfs.ext4 /dev/md0

Ahora, ya se puede montar el disco. Para ello, creo una carpeta en la raíz llamada /raid y monto el disco virtual allí de la siguiente manera:

mkdir /raid
sudo mount /dev/md0 /raid

Y para hacerlo persistente, es necesario editar el archivo /etc/fstab y añadir lo siguiente:

$ cat /etc/fstab                                              
/dev/md0 /raid ext4 defaults 0 0

Y la comprobación de que ya está montado:

$ df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
tmpfs              392M    1,7M  390M   1% /run
/dev/sda2           40G     18G   20G  47% /
tmpfs              2,0G       0  2,0G   0% /dev/shm
tmpfs              5,0M    8,0K  5,0M   1% /run/lock
Partagé            465G    423G   42G  91% /home/docker/Documents/Compartida
tmpfs              392M    140K  392M   1% /run/user/1000
/dev/md0           3,9G     24K  3,7G   1% /raid

Comprobaciones

Una vez visto que el RAID5 está en marcha, es la hora de la verdad y probar si realmente es un RAID5 o no.

Para ello, como primer paso crearé un archivo dentro del RAID:

echo "Hola Plaiaundi" >> /raid/test.txt

De momento, con tres discos, el archivo se encuentra intacto:

$cat /raid/test.txt 
Hola Plaiaundi

Caso disco roto

He tenido mala suerte y uno de mis discos se ha estropeado, pues ya no aparece en mi máquina:

Imagen de solo dos discos en la MV

He eliminado el disco RAID5_3.vdi para simular el caso.

Si ahora intentamos acceder al sistema, no es posible pues, pese a que teóricamente, gracias a la propia naturaleza del RAID5 debería ser posible acceder a los datos, mdadm no se atreve a montar el raid con solo dos discos:

$mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
        Raid Level : raid5
     Total Devices : 2
       Persistence : Superblock is persistent

             State : inactive
   Working Devices : 2

              Name : docker-VirtualBox:0  (local to host docker-VirtualBox)
              UUID : e667b64c:4d125144:b56e73a0:2ec88c62
            Events : 18

    Number   Major   Minor   RaidDevice

       -       8       33        -        /dev/sdc1
       -       8       17        -        /dev/sdb1

Para solucionarlo, se debe detener el raid actual:

sudo mdadm --stop /dev/md0

Y nuevamente montar el RAID5 pero con los dos discos restantes:

sudo mdadm --assemble --force /dev/md0 /dev/sdb1 /dev/sdc1
sudo mount /dev/md0 /raid

Y el archivo seguirá ahí:

$ sudo cat /raid/test.txt 
Hola Plaiaundi

Agregar nuevo disco

Ahora, sabiendo que uno de los discos está muerto, es hora de agregar un nuevo disco al raid:

Imagen del disco de repuesto

Primeramente se debe formatear.

Posteriormente, se debe detener el raid actual no sin antes desmontar la unidad:

sudo umount /raid
sudo mdadm --stop /dev/md0

Por último, solo toca volver a montarlo ahora con el nuevo disco:

$ sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
mdadm: /dev/sdb1 appears to be part of a raid array:
       level=raid5 devices=3 ctime=Tue Jan 20 08:39:24 2026
mdadm: /dev/sdc1 appears to be part of a raid array:
       level=raid5 devices=3 ctime=Tue Jan 20 08:39:24 2026
Continue creating array? yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

Si todo va bien, el archivo que se creó seguirá ahí y el raid estará sano:

$ sudo mount /dev/md0  /raid 
$ cd /raid/
$ ls
lost+found  test.txt
$ cat test.txt 
Hola Plaiaundi

Eliminar dos discos

Antes de nada, es importante comentar la línea añadida al archivo /etc/fstab o de lo contrario el sistema no arrancará.

Si ahora se arranca el sistema con esta configuración:

Imagen MV con un solo disco

Se puede apreciar que que ya no existe el raid:

$ sudo mdadm --detail /dev/md0
mdadm: cannot open /dev/md0: No such file or directory
$ lsblk
NAME      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda         8:0    0    40G  0 disk 
├─sda1      8:1    0     1M  0 part 
└─sda2      8:2    0    40G  0 part /
sdb         8:16   0     2G  0 disk 
└─sdb1      8:17   0     2G  0 part 
  └─md127   9:127  0     0B  0 md 

Quedando obsoleto el RAID5.