Categorías Linux

RAID por software en Linux | mdadm

Vamos a ver cómo crear un RAID por software en Linux con mdadm.

 

La configuración RAID realiza combinaciones entre discos para mejorar el funcionamiento y la fiabilidad.
 
Nosotros vamos a crear ficheros como si fueran discos duros, y los vamos a utilizar para practicar el RAID.
 
Para este ejercicio con MDADM, vamos a utilizar pseudo-discos (dispositivos de bloque) y el comando losetup para asociar dispositivos de bucle (Loop) a esos dispositivos de bloque creados para la práctica.

 

 
Contenidos de este artículo:

 

 

1. MODOS DE RAID

Existen 8 modos básicos RAID.

  • RAID0
  • RAID1
  • RAID2
  • RAID3
  • RAID4
  • RAID5
  • RAID6
  • RAID5E y RAID6E

 

Los conjuntos RAID más utilizados, y en los que nos centraremos, son :

  • RAID 0: Data Stripping o Volumen dividido. Se distribuyen los datos entre los discos (dos o más). No proporciona paridad (corrección de errores). Su característica princial es que proporciona un alto rendimiento de escritura, al escribir los datos en dos o más discos de forma paralela.

 

  • RAID 1: Mirrioring (Espejo). Usa dos discos mínimo. Crea una copia exacta del disco. Usa dos o más discos. Si un disco falla, se pone en acción el segundo disco, que tiene la misma información.

 

  • RAID 5: Distribuido con paridad. Es popular debido a su bajo coste de redundancia. Necesita un mínimo de 3 discos.

 

 
Como en esta práctica vamos a trabajar el RAID en una máquina virtual, realizaremos las pruebas sobre pseudo-discos (dispositivos de bloque habilitados sobre dispositivos Loop) que crearemos con el comando dd.
 

 

1.1 RESUMEN: Creación de RAID por Software con MDADM

 
Tras preparar las particiones o discos que incluiremos en el conjunto RAID, ejecutaremos el comando mdadm, con las opciones:

[modo] dispositivo-raid [opciones] dispositivos-integrantes

 
–> Creación básica de un sistema RAID:

mdadm --create dispositivo-raid nivel-raid numero-dispositivos-raid nombres-archivo-dispositivos-integrantes

 
–> Opciones level mdadm:

--level=
opciones: linear, raid0, 0, stripe, raid1, 1, mirror, raid4, 4, raid5, 5, raid6, 6, raid10, 10, multipath, mp, faulty, container

 

–> Si deseamos hacer la práctica sobre discos virtuales o pseudo-discos, los crearemos con el comando dd.

–> Luego asociaremos los nuevos discos virtuales a dispositivos Loop, con el comando losetup.

–> Y después crearemos el RAID con esos pseudo-discos.

 

 

2. Instalación de mdadm

 

Primero Instalaremos el paquete mdadm

 

apt install mdadm

o

apt-get install mdadm

 

Después, aparecerá la configuración de mdadm

 

mdadm nos preguntará sobre los Arrays MD necesarios para el sistema de ficheros raíz.

Podemos elegir entre todos (all), ninguno (none) o los dispositivos separados por espacios, por ejemplo “md0 md1”


 

 

A continuación veremos el paquete mdadm instalándose:


 

 

Preconfigurando paquete mdadm:


 

 

Al haber instalado el paquete mdadm, ya podremos ver que se ha creado el fichero /etc/mdstat

 

 

3. creamos pseudo-discos (ficheros como dispositivos de bloque) en dispositivos loop

 
con el comando dd, crearemos los pseudo-discos que utilizaremos en el sistema RAID.
 
Ya sabemos que con el comando dd podemos ejecutar muchas tareas, como por ejemplo borrar el contenido de una partición. Así:

dd if=/dev/zero of=/dev/sdb2

 
De esta forma borraríamos el contenido de la partición /dev/sdb2

 

Pero en este caso vamos a crear unos ficheros .raw, que serán tratados como un dispositivo de bloques; y utilizaremos el comando losetup para asociar el fichero a un dispositivo loop (Los dispositivos Loop son pseudo-dispositivos que precisamente facilitan el poder acceder a ficheros como si fueran dispositivos de bloques, es decir, un disco duro).

 

 
Para que el sistema trate el fichero como un dispositivo de bloques y no como un fichero normal, vamos a utilizar la instrucción losetup que asocia el fichero que le demos al dispositivo Loop elegido.
 

 

Crearemos 2 pseudo-discos (dispositivos de bloque); y los asociamos a los dispositivos Loop (dispositivos de bucle) lo haremos con :

dd if=/dev/zero of=/srv/disk1.raw bs=1M count=512 ; losetup /dev/loop1 /srv/disk1.raw

dd if=/dev/zero of=/srv/disk2.raw bs=1M count=512 ; losetup /dev/loop2 /srv/disk2.raw

 
En este caso estamos creando pseudo-discos de 512 MB.

 

Creando los pseudo-discos ficheros como dispositivos de bloque linux:

 

 

3.1 mostramos dispositivos Loop creados, y dónde están montados

 
Mostraremos los dispositivos Loop montados, con el comando losetup;
 
en la captura de pantalla vemos que además de los dispositivos disk1.raw y disk2.raw, tenemos otros dispositivos más que por ahora no usaremos.
 

 

 

 

4. Asociar con el comando losetup los dispositivos Loop a los pseudo-discos creados anteriormente

 
Con losetup asociaremos los dispositivos Loop a los dispositivos de bloque creados anteriormente en srv/
 
Aunque ya lo hemos hecho a la vez que creábamos los dispositivos de bloque con el comando dd, está bien que lo tengamos en cuenta por si debemos asociar los dipositivos de bloque a los dispositivos de bucle (Loop) de nuevo.
 

 

 

5. Crear RAID

 

5.1 Crear RAID 0

 

Si deseamos crear un RAID 0, ejecutaremos estos comandos MDADM:

mdadm --create /dev/md0 --raid-devices=2 --level=0 /dev/loop1 /dev/loop2

es decir, creamos el dispositivo raid /dev/md0, con los dispositivos /dev/loop1 y /dev/loop2, usando un raid 0 (–level=0).
 

 

5.2 Crear RAID 1

 

Si deseamos crear un RAID 1, ejecutaremos:

mdadm --create /dev/md0 --raid-devices=2 --level=1 /dev/loop1 /dev/loop2

 

 

Aparecerá el mensaje:

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
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata 

 
Continue creating array?

Pulsamos y (yes)

 

 

5.3 Comprobamos el RAID activado y los discos asociados: Vemos que el RAID 1 está activado y sincronizando (resync)

 
Podemos ver que se ha creado un raid, llamado md0, con los dispositivos loop1 y loop2, y que el raid se encuentra sincronizando de disco a disco (puesto que RAID 1 utiliza la configuración Mirroring)
 

root@debian:/#cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 loop2[1] loop1[0]
523712 blocks super 1.2 [2/2] [UU]
[==>..................]   resync = 12.5% (65536/523712) finish=0.2min speed
= 32768K/sec

 

Vemos que la información entre los discos se está sincronizando (resync = 12.5 %), ya que se trata de un RAID 1, y los discos funcionan en modo espejo (el uno es una copia del otro).
 

 

Un tiempo después, ejecutamos de nuevo el comando, y veremos el RAID 1 ya sincronizado totalmente:

root@debian:/#cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 loop2[1] loop1[0]
523712 blocks super 1.2 [2/2] [UU]

unused devices : <none>

 

 

6. Usar el sistema RAID

 
Utilizamos el dispositivo raid como si fuera un archivo de dispositivo.
 
Primero ejecutamos mkfs y luego montamos el dispositivo con mount.

mkfs -t ext4/ dev/md0

mount /dev/md0 /mnt

 

Si queremos que el sistema RAID se monte en cada inicio, debemos añadir entradas en /etc/fstab (sustituyendo /dev/md0 por nombres de archivo de partición como /dev/sda1)

 

 

7. Posible error: error al configurar dispositivo de bucle: dispositivo o recurso ocupado

 
Puede ocurrir que al intentar asociar un dispositivo loop a uno de los pseudo-discos (o disco virtual) creado, recibamos el mensaje:
 

root@debian:/home# losetup /dev/loop1 /srv/hdd1.raw
losetup: /srv/hdd1.raw: error al configurar dispositivo de bucle: Dispositivo o recurso ocupado

error al configurar el dispositivo de bucle: Dispositivo o recurso ocupado


 
En caso de recibir dicho mensaje, realizaremos una desasociación de los dispositivos Loop, para después volver a realizar la asociación.
 

 

7.1.  desasociar todos dispositivos loop

 

para desasociar todos los dispositivos Loop, ejecutaremos:

losetup -D

 

 

Hemos visto cómo crear RAID por software con mdadm, cómo crear dispositivos virtuales o pseudo-discos, y utilizarlos para el RAID por medio de su asociación a dispositivos Loop o dispositivos de bucle, con el comando losetup.

 

 

Fuentes y agradecimientos:

 

Los comentarios de Disqus están cargando....