Creación de raids por software con mdadm en Debian 12

raid

¿Que es un RAID?

Un RAID (Redundant Array of Independent Disks) es una tecnología que combina varios discos duros en una sola unidad. Los RAID se utilizan para mejorar la tolerancia a fallos y el rendimiento de los discos duros.

Requisitos

  • Debian 12 instalado.
  • Acceso a internet.
  • privilegios de sudo o root.
  • 2 o más discos duros.

Instalación de mdadm

Para instalar mdadm en Debian 12 solo tenemos que ejecutar el siguiente comando:

root@raid:~# apt install mdadm -y

Creación de un RAID 0

Raid 0: Este tipo de RAID se conoce como “striping” y no ofrece redundancia. Los datos se escriben en dos o más discos duros. Este tipo de RAID ofrece un mejor rendimiento, pero si uno de los discos falla, se pierden todos los datos.

1. Creamos un RAID 0 con dos discos duros.

root@raid:~# mdadm --create /dev/md0 --level=raid0 --raid-devices=2 /dev/vd[b-c]1

2. Formateamos el RAID 0.

root@raid:~# mkfs.ext4 /dev/md0

3. Comprobamos el estado del RAID 0.

root@raid:~# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Mon Apr 29 16:15:40 2024
        Raid Level : raid0
        Array Size : 2088960 (2040.00 MiB 2139.10 MB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Mon Apr 29 16:15:40 2024
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

            Layout : -unknown-
        Chunk Size : 512K

Consistency Policy : none

              Name : raids:0  (local to host raids)
              UUID : 2946104b:520ee4fa:c5b3a7da:a8533ac8
            Events : 0

    Number   Major   Minor   RaidDevice State
       0     254       17        0      active sync   /dev/vdb1
       1     254       33        1      active sync   /dev/vdc1

4. Montamos el RAID 0.

root@raid:~# mount /dev/md0 /mnt

5. Comprobamos que el RAID 0 se ha montado correctamente.

root@raids:~# df -h
S.ficheros     Tamaño Usados  Disp Uso% Montado en
udev             962M      0  962M   0% /dev
tmpfs            197M   616K  197M   1% /run
/dev/vda1         11G   2,3G  8,0G  23% /
tmpfs            984M      0  984M   0% /dev/shm
tmpfs            5,0M      0  5,0M   0% /run/lock
tmpfs            197M      0  197M   0% /run/user/1001
/dev/md0         2,0G    24K  1,9G   1% /mnt

Creación de un RAID 1

Raid 1: Este tipo de RAID se conoce como “mirroring” y ofrece redundancia. Los datos se escriben en dos o más discos duros. Si uno de los discos falla, los datos se pueden recuperar del otro disco.

1. Creamos un RAID 1 con dos discos duros.

root@raid:~# mdadm --create /dev/md1 --level=raid1 --raid-devices=2 /dev/vd[b-c]1

2. Formateamos el RAID 1.

root@raid:~# mkfs.ext4 /dev/md1

3. Comprobamos el estado del RAID 1.

root@raids:~# mdadm --detail /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Mon Apr 29 16:24:56 2024
        Raid Level : raid1
        Array Size : 1045504 (1021.00 MiB 1070.60 MB)
     Used Dev Size : 1045504 (1021.00 MiB 1070.60 MB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Mon Apr 29 16:25:14 2024
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : raids:1  (local to host raids)
              UUID : dd1270d9:702f1aaf:4aa4325f:cdcbe6cc
            Events : 19

    Number   Major   Minor   RaidDevice State
       0     254       17        0      active sync   /dev/vdb1
       1     254       33        1      active sync   /dev/vdc1

4. Montamos el RAID 1.

root@raid:~# mount /dev/md1 /mnt

5. Comprobamos que el RAID 1 se ha montado correctamente.

root@raids:/mnt# df -h
S.ficheros     Tamaño Usados  Disp Uso% Montado en
udev             962M      0  962M   0% /dev
tmpfs            197M   624K  197M   1% /run
/dev/vda1         11G   2,3G  8,0G  23% /
tmpfs            984M      0  984M   0% /dev/shm
tmpfs            5,0M      0  5,0M   0% /run/lock
tmpfs            197M      0  197M   0% /run/user/1001
/dev/md1         987M    64K  920M   1% /mnt

6. Creamos directorios y ficheros de prueba y los listamos.

root@raids:/mnt# mkdir directory{1..5} && touch file{1..3}
root@raids:/mnt# ls -l
total 20
drwxr-xr-x 2 root root 4096 abr 29 16:32 directory1
drwxr-xr-x 2 root root 4096 abr 29 16:32 directory2
drwxr-xr-x 2 root root 4096 abr 29 16:32 directory3
drwxr-xr-x 2 root root 4096 abr 29 16:32 directory4
drwxr-xr-x 2 root root 4096 abr 29 16:32 directory5
-rw-r--r-- 1 root root    0 abr 29 16:32 file1
-rw-r--r-- 1 root root    0 abr 29 16:32 file2
-rw-r--r-- 1 root root    0 abr 29 16:32 file3

7. Comprobamos la tolerancia a fallos del RAID 1 marcando uno de los discos como fallido.

root@raids:/mnt# mdadm --manage /dev/md1 --fail /dev/vdc1
mdadm: set /dev/vdc1 faulty in /dev/md1

8. Comprobamos el estado del RAID 1.

root@raids:/mnt# mdadm --detail /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Mon Apr 29 16:24:56 2024
        Raid Level : raid1
        Array Size : 1045504 (1021.00 MiB 1070.60 MB)
     Used Dev Size : 1045504 (1021.00 MiB 1070.60 MB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Mon Apr 29 16:29:59 2024
             State : clean, degraded
    Active Devices : 1
   Working Devices : 1
    Failed Devices : 1
     Spare Devices : 0

Consistency Policy : resync

              Name : raids:1  (local to host raids)
              UUID : dd1270d9:702f1aaf:4aa4325f:cdcbe6cc
            Events : 21

    Number   Major   Minor   RaidDevice State
       0     254       17        0      active sync   /dev/vdb1
       -       0        0        1      removed

       1     254       33        -      faulty   /dev/vdc1

9. Revisamos que no se ha perdido la información.

root@raids:/mnt# ls -l
total 20
drwxr-xr-x 2 root root 4096 abr 29 16:32 directory1
drwxr-xr-x 2 root root 4096 abr 29 16:32 directory2
drwxr-xr-x 2 root root 4096 abr 29 16:32 directory3
drwxr-xr-x 2 root root 4096 abr 29 16:32 directory4
drwxr-xr-x 2 root root 4096 abr 29 16:32 directory5
-rw-r--r-- 1 root root    0 abr 29 16:32 file1
-rw-r--r-- 1 root root    0 abr 29 16:32 file2
-rw-r--r-- 1 root root    0 abr 29 16:32 file3

10. Añaadimos un nuevo disco al RAID 1.

root@raids:/mnt# mdadm --manage /dev/md1 --add /dev/vdd1
mdadm: added /dev/vdd1

11. Comprobamos el estado del RAID 1.

root@raids:/mnt# mdadm --manage /dev/md1 --add /dev/vdd1
mdadm: added /dev/vdd1
root@raids:/mnt# mdadm --detail /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Mon Apr 29 16:24:56 2024
        Raid Level : raid1
        Array Size : 1045504 (1021.00 MiB 1070.60 MB)
     Used Dev Size : 1045504 (1021.00 MiB 1070.60 MB)
      Raid Devices : 2
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Mon Apr 29 16:34:28 2024
             State : clean, degraded, recovering
    Active Devices : 1
   Working Devices : 2
    Failed Devices : 1
     Spare Devices : 1

Consistency Policy : resync

    Rebuild Status : 85% complete

              Name : raids:1  (local to host raids)
              UUID : dd1270d9:702f1aaf:4aa4325f:cdcbe6cc
            Events : 42

    Number   Major   Minor   RaidDevice State
       0     254       17        0      active sync   /dev/vdb1
       2     254       49        1      spare rebuilding   /dev/vdd1

       1     254       33        -      faulty   /dev/vdc1

12. Eliminamos el disco fallido del RAID 1.

root@raids:/mnt# mdadm --manage /dev/md1 --remove /dev/vdc1
mdadm: hot removed /dev/vdc1 from /dev/md1

Detalles de mdadm y resto de raids

mdadm permite crear los raids de nivel 0, 1, 4, 5, 6 y 10.

Al crear un raid con el comando mdadm --create se puede especificar el nivel del raid con la opción --level, el número de dispositivos con la opción --raid-devices y los dispositivos que formarán parte del raid.

Para comprobar el estado de un raid se puede utilizar el comando mdadm --detail seguido del dispositivo raid.

Si tenemos por ejemplo un raid 4 con 4 discos duros y añadimos un quinto disco, con el comando mdadm --manage /dev/md0 --add este quinto disco se añadirá como disco de reserva. Si un disco falla, el disco de reserva se añadirá automáticamente al raid.

Para eliminar un disco de un raid se puede utilizar el comando mdadm --manage /dev/md0 --remove /dev/sdX.

Para eliminar un raid se puede utilizar el comando mdadm --stop /dev/md0.

Raid4: Este tipo de RAID se conoce como “dedicated parity” y ofrece redundancia. Los datos se escriben en tres o más discos duros. Un disco se utiliza para almacenar la paridad de los datos. Si un disco falla, los datos se pueden recuperar del disco de paridad.

Un inconveniente de este tipo de RAID es que si el disco que falla es el de paridad, el raid no puede utilizar los discos de reserva para recuperarse. Para que vuelva a funcionar el raid, tenemos que parar el raid con el comando mdadm --stop /dev/md0 y volver a crear el raid con los mismos discos excepto para el de paridad, que será uno diferente. No formateamos el raid, ya que los datos siguen estando en los discos.

Raid5: Este tipo de RAID se conoce como “distributed parity” y ofrece redundancia. Los datos se escriben en tres o más discos duros. La paridad se distribuye entre los discos. Si un disco falla, los datos se pueden recuperar del disco de paridad. Pero si dos discos fallan, los datos se pierden.

Raid6: Este tipo de RAID se conoce como “dual parity” y ofrece redundancia. Los datos se escriben en cuatro o más discos duros. En este caso tenemos 2 bloques de paridad por disco y es distribuida entre los discos. Si dos discos fallan, los datos se pueden recuperar. Si tres discos fallan, los datos se pierden.

Creación de un RAID 10

Raid10: Este tipo de RAID se conoce como “striping” y “mirroring” y ofrece redundancia. Es un raid 0 principal con dos subniveles de raid 1. Los datos se escriben en dos o más discos duros y se duplican en otros dos o más discos duros. Si un disco falla, los datos se pueden recuperar del otro disco.

1. Creamos un RAID 10 con cuatro discos duros.

root@raid:~# mdadm --create /dev/md10 --level=raid10 --raid-devices=4 /dev/vd[b-e]1

2. Formateamos el RAID 10.

root@raid:~# mkfs.ext4 /dev/md10

3. Añaadimos dos discos de reserva al RAID 10.

root@raid:~# mdadm --manage /dev/md10 --add /dev/vdf1 /dev/vdg1
mdadm: added /dev/vdf1
mdadm: added /dev/vdg1

4. Comprobamos el estado del RAID 10.

root@raids:/# mdadm --detail /dev/md10
/dev/md10:
           Version : 1.2
     Creation Time : Mon Apr 29 17:17:05 2024
        Raid Level : raid10
        Array Size : 2088960 (2040.00 MiB 2139.10 MB)
     Used Dev Size : 1044480 (1020.00 MiB 1069.55 MB)
      Raid Devices : 4
     Total Devices : 6
       Persistence : Superblock is persistent

       Update Time : Mon Apr 29 17:18:29 2024
             State : clean
    Active Devices : 4
   Working Devices : 6
    Failed Devices : 0
     Spare Devices : 2

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

              Name : raids:10  (local to host raids)
              UUID : caf49618:c9ddc610:8296dca9:5d441fe6
            Events : 19

    Number   Major   Minor   RaidDevice State
       0     254       17        0      active sync set-A   /dev/vdb1
       1     254       33        1      active sync set-B   /dev/vdc1
       2     254       49        2      active sync set-A   /dev/vdd1
       3     254       65        3      active sync set-B   /dev/vde1

       4     254       81        -      spare   /dev/vdf1
       5     254       97        -      spare   /dev/vdg1

5. Montamos el RAID 10.

root@raid:~# mount /dev/md10 /mnt

6. Comprobamos que el RAID 10 se ha montado correctamente.

root@raids:/mnt# df -h
S.ficheros     Tamaño Usados  Disp Uso% Montado en
udev             962M      0  962M   0% /dev
tmpfs            197M   624K  197M   1% /run
/dev/vda1         11G   2,3G  8,0G  23% /
tmpfs            984M      0  984M   0% /dev/shm
tmpfs            5,0M      0  5,0M   0% /run/lock
tmpfs            197M      0  197M   0% /run/user/1001
/dev/md10        2,0G    44K  1,9G   1% /mnt

7. Creamos directorios y ficheros de prueba y los listamos.

root@raids:/mnt# mkdir directory{1..5} && touch file{1..3}
root@raids:/mnt# ls -l
total 36
drwxr-xr-x 2 root root  4096 abr 29 17:19 directory1
drwxr-xr-x 2 root root  4096 abr 29 17:19 directory2
drwxr-xr-x 2 root root  4096 abr 29 17:19 directory3
drwxr-xr-x 2 root root  4096 abr 29 17:19 directory4
drwxr-xr-x 2 root root  4096 abr 29 17:19 directory5
-rw-r--r-- 1 root root     0 abr 29 17:19 file1
-rw-r--r-- 1 root root     0 abr 29 17:19 file2
-rw-r--r-- 1 root root     0 abr 29 17:19 file3
drwx------ 2 root root 16384 abr 29 17:18 lost+found

8. Comprobamos la tolerancia a fallos del RAID 10 marcando uno de los discos como fallido.

root@raids:/mnt# mdadm --manage /dev/md10 --fail /dev/vde1
mdadm: set /dev/vde1 faulty in /dev/md10

9. Comprobamos el estado del RAID 10.

root@raids:/mnt# mdadm --detail /dev/md10
/dev/md10:
           Version : 1.2
     Creation Time : Mon Apr 29 17:17:05 2024
        Raid Level : raid10
        Array Size : 2088960 (2040.00 MiB 2139.10 MB)
     Used Dev Size : 1044480 (1020.00 MiB 1069.55 MB)
      Raid Devices : 4
     Total Devices : 6
       Persistence : Superblock is persistent

       Update Time : Mon Apr 29 17:21:35 2024
             State : clean, degraded, recovering
    Active Devices : 3
   Working Devices : 5
    Failed Devices : 1
     Spare Devices : 2

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

    Rebuild Status : 85% complete

              Name : raids:10  (local to host raids)
              UUID : caf49618:c9ddc610:8296dca9:5d441fe6
            Events : 36

    Number   Major   Minor   RaidDevice State
       0     254       17        0      active sync set-A   /dev/vdb1
       1     254       33        1      active sync set-B   /dev/vdc1
       2     254       49        2      active sync set-A   /dev/vdd1
       5     254       97        3      spare rebuilding   /dev/vdg1

       3     254       65        -      faulty   /dev/vde1
       4     254       81        -      spare   /dev/vdf1

10. Compobamos que no se ha perdido la información.

root@raids:/mnt# ls -l
total 36
drwxr-xr-x 2 root root  4096 abr 29 17:19 directory1
drwxr-xr-x 2 root root  4096 abr 29 17:19 directory2
drwxr-xr-x 2 root root  4096 abr 29 17:19 directory3
drwxr-xr-x 2 root root  4096 abr 29 17:19 directory4
drwxr-xr-x 2 root root  4096 abr 29 17:19 directory5
-rw-r--r-- 1 root root     0 abr 29 17:19 file1
-rw-r--r-- 1 root root     0 abr 29 17:19 file2
-rw-r--r-- 1 root root     0 abr 29 17:19 file3
drwx------ 2 root root 16384 abr 29 17:18 lost+found

Y con esto ya hemos visto como crear raids por software en Debian 12 y varias de las opciones que nos ofrece mdadm para la gestión de los raids.