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:
Existen 8 modos básicos RAID.
Los conjuntos RAID más utilizados, y en los que nos centraremos, son :
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.
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.
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
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:
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.
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.
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).
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)
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>
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)
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.
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.