Domingo, 09 Febrero 2020 17:02

RAID por software en Linux Destacado

Escrito por
Valora este artículo
(0 votos)

En informática, el acrónimo RAID (del inglés Redundant Array of Independent Disks, originalmente Redundant Array Inexpensive Disks), traducido como «conjunto redundante de discos independientes», hace referencia a un sistema de almacenamiento de datos que usa múltiples discos duros o SSD entre los que se distribuyen o replican los datos. Dependiendo de su configuración (a la que suele llamarse «nivel»), los beneficios de un RAID respecto a un único disco son uno o varios de los siguientes: mayor integridad, mayor tolerancia a fallos, mayor throughput (rendimiento) y mayor capacidad. En sus implementaciones originales, su ventaja clave era la habilidad de combinar varios dispositivos de bajo coste y tecnología más antigua en un conjunto que ofrecía mayor capacidad, fiabilidad, velocidad o una combinación de éstas que un solo dispositivo de última generación y coste más alto.

Antes de comenzar te recomiendo que visiones estos 2 vídeos (en el segundo se pierde el sonido pero se ve perfectamente cómo se hace). Al principio del primero se cuenta un poco de teoría para tener una idea clara del concepto y tipos de RAID y en el resto del metraje se explica paso por paso el montaje de un RAID5 por software en Ubuntu, práctica que luego tendrás que reproducir y entregar.

QR Code - 03_Raid 5 en Ubuntu (1/2)
QR Code - 03_Raid 5 en Ubuntu (2/2)

Principalmente veremos estos 4 niveles de RAID:

  • RAID 0: proporciona mayor velocidad de lectura/escritura dado que distribuye los datos equitativamente entre dos o más discos a la vez. La desventaja es que si un disco acaba fallando se pierde la información.
  • RAID 1: crea una copia exacta (o espejo) de un conjunto de datos en dos o más discos a la vez. Ventajas: mejora el rendimiento en lectura y mayor seguridad en caso de que un disco falle. Desventaja: el tamaño de un disco está desaprovechado.
  • RAID 5: también llamado distribuido con paridadventajas: ofrece tolerancia al fallo, pero además, optimiza la capacidad del sistema permitiendo una utilización de hasta el 80% de la capacidad del conjunto de discos. Lo consigue mediante el cálculo de información de paridad y su almacenamiento alternativo por bloques en todos los discos del conjunto, de esta manera, si cualquiera de las unidades de disco falla, se puede recuperar la información en tiempo real, sobre la marcha, a partir de esa información.
  • RAID 6: igual que RAID5 pero con un disco más de tolerancia a fallos, es decir, pueden fallar hasta 2 discos a la vez y no se perdería la información. Por lo tanto el mínimo de discos para crear un RAID6 sería uno más, es decir 4. RAID5 cuando hay fallos, sobrecarga mucho los discos que se reponen con la nueva información hasta el punto de reducir su vida útil o hacer que vuelvan a fallar, RAID6 además de ser más seguro es más eficiente en este sentido y por tanto muy utilizado en sector empresarial.

Para que te hagas una idea precisa de cómo funcionan estos 3 niveles te dejo esta simulación (zip - 1.04 MB) que utilizo en el segundo vídeo.

mdadm para crear RAIDs por software

Para la creación y administración de una RAID por software necesitaremos el paquete mdadm. La antigua colección de utilidades para RAID de los paquetes raidtools y raidtools2 se ha dejado de usar. Desde agosto de 2001, existe la herramienta mdadm (multiple devices admin), éste paquete nos permite gestionar las RAIDs por software de una manera mucho más simple y robusta. Actualmente se ha convertido en un estándar.

$ sudo aptitude install mdadm

Preparación de los discos o particionamiento

Debemos tener en cuenta, que puesto que vamos a crear un RAID por software vamos a utilizar particiones en lugar de discos. Sin perjuicio que cada disco contenga una sola partición con la totalidad del tamaño del disco, como de hecho es recomendado.

Para esto antiguamente se utilizaba una herramienta de particionamiento donde además de crear la partición se activaba un flag/bandera/bit que indicaba que ese disco formaba parte de un RAID. Ahora ya no es necesario, el programa mdadm es capaz de coger los discos en crudo (recién comprados) y prepararlos para funcionar como un array de discos sin hacer nada previo. No obstante, se incluye esta información en el apartado siguiente como histórico y para entender qué es lo que hace mdadm cuando prepara los discos, es importante porque cuando el disco deja de pertenecer a un RAID hay que quitarle esa bandera de pertenencia al mismo para poder usarlo de manera independiente.

Preparación de discos con Gparted (obsoleto)

En nuestro caso vamos a utilizar GParted, una herramienta gráfica de fácil uso. Puesto que Ubuntu no la lleva instalada por defecto la instalaremos mediante el Gestor de paquetes Synaptic, o bien con aptitude mediante comandos:

$ sudo aptitude install gparted

Una vez instalado GParted, procedemos a crear una partición para la totalidad de cada uno de los discos idénticos de los que disponemos para crear la RAID. Debemos crear una partición sin formato, puesto que el formato de la RAID lo daremos cuando esta esté construida. A parte del formato debemos indicar que se tratará de un disco para crear una RAID. Esto lo podemos hacer de manera fácil con GParted, seleccionando la partición con el botón derecho del ratón y elegir "Gestionar opciones" y marcando la bandera "RAID":

Con fdisk veremos este hecho marcado como "Autodetección Linux raid" (Linux raid autodetect). Una vez acabado el proceso podemos ver con fdisk -l un listado de las particiones. Podemos observar que la columna "Id" muestra el valor "fd" esto es debido a que lo hemos marcado como "Autodetección Linux raid" (Linux raid autodetect).

Creación del RAID

Primeramente antes de crear la RAID podemos ver en el fichero /proc/mdstat si hay algún otro array:

cat /proc/mdstat 

Luego vamos a crear el raid

$  sudo  mdadm  --create  /dev/md/pcdelarioja:raid5  --level=raid5  --raid-devices=3 /dev/sdc /dev/sdd /dev/sde

 Detalles del comando mdadm:

  • En --create /dev/md/pcdelarioja:raid5 le indicaremos el identificador con el que vamos a designar el array. Tiene que ser un nombre compuesto con el caracter dos puntos en medio (p. ej. fernando:0, raid5:grande, raid5:0, raid5:1, etc.). El sistema crea un enlace simbólico con ese nombre en la carpeta /dev/md/ que apunta al dispositivo real que maneja mdadm en la carpeta /dev con nombre md# (siendo # un número) de manera que el primer Raid que se crea es /dev/md127. De esta manera, cuando queramos monitorizarlo podemos utilizar: mdadm -D /dev/md/pcdelarioja:raid5 o también mdadm -D /dev/md127
  • En --level=raid5 indicaremos el tipo de raid que queremos que sea. Los valores validos aquí son: raid0, raid1, raid5 …
  • Como vemos debemos indicarle los discos o particiones con las que hacer el RAID, así como el número de discos/particiones (en el ejemplo hemos utilizado el tercer, cuarto y quinto discos duros SATA/SCSI): --raid-devices=3 /dev/sdc /dev/sdd /dev/sde

Una vez ha terminado el proceso de construcción de la raid podemos ver de nuevo en el fichero /proc/mdstat el estado de nuestro array. O también con el comando:

Montar el RAID

Lo podemos montar como un dispositivo más. Para ello, habrá que formatearlo con un sistema de ficheros, por ejemplo ext4.

 $ sudo mkfs.ext4 /dev/md/pcdelarioja:raid5

Después ya lo podremos montar como un dispositivo más.

$ sudo mount –t ext4 /dev/md/pcdelarioja:raid5 /media/raid5

Montaje de RAID en el arranque

Para ello, habrá que poner la línea de montaje en el fichero /etc/fstab

/dev/md/pcdelarioja:raid5       /media/raid5     ext4    defaults         0          0

Y además hay que configurar un fichero especial, el fichero /etc/mdadm/mdadm.conf

Tenemos que escribir en él los dispositivos que se utilizan para el RAID así como el resultado del comando: mdadm --detail --scan
Podemos hacerlo, empezando una Shell de root (sudo -i) y añadiendo esta información con la redirección >> por si hubiera una configuración previamente establecida:

# echo "DEVICE /dev/sdc /dev/sdd /dev/sde" >> /etc/mdadm/mdadm.conf
# mdadm --detail --scan >> /etc/mdadm/mdadm.conf

Para darle una etiqueta al raid puedes utilizar el comando:

# e2label /dev/md/pcdelarioja:raid5 vol.RAID5

Monitorización del RAID

Una vez montado podremos escribir en él normalmente. Para observar su funcionamiento: cat /proc/mdstat
o mejor por ser más detallados:

mdadm --query /dev/md/pcdelarioja:raid5 
mdadm --detail /dev/md/pcdelarioja:raid5

Administración de un RAID

Podemos realizar muchas funciones con un raid, dos son básicas. Establecer un disco como fallo y eliminarlo:

$ sudo mdadm --fail /dev/md/pcdelarioja:raid5 /dev/sdd1

raid-faulty-spare

Podemos comprobar como lo marca como "con fallo" y lo deja en reserva (faulty spare), es decir, todavía no lo ha eliminado, procedamos:

$ sudo mdadm --remove /dev/md/pcdelarioja:raid5 /dev/sdd1

 raid-removed

Añadir un disco Nuevo:

$ sudo mdadm --add /dev/md/pcdelarioja:raid5 /dev/sdf

Nota importante: Usando VMware, no detecta la inserción de un disco duro en caliente, así que hay forzar la detección de un disco nuevo poniendo esta línea como root:

# echo "- - -" > /sys/class/scsi_host/host2/scan
donde host2 es el identificador del bus scsi/sata en donde VMware inserta los discos virtuales. Este identificador suele cambiar y para dar con él hay que hacer un:
 
# cat /proc/scsi/scsi
 
De esta manera podemos comprobar como el disco se añade inmediatamente:
raid-spare-rebuiding
y empieza el proceso de reconstrucción (rebuilding) de la información a partir de los datos y bits de paridad existentes en los otros 2 discos en este caso. En la captura lo pone como reservar (spare) porque todavía no está activo en cuanto termine el proceso de reconstrucción pasará a estado "activo".
Otra posibilidad para hacer la práctica podría haber sido añadir (--add) el disco en reserva justo después de crear el raid (--create), así justo después de marcar un disco como fallado se habría puesto "en acción" el disco en reserva al instante. Esta política es más precabida.
Para eliminar definitivamente el raid:

# umount /dev/md/pcdelarioja:raid5
# umount -l /dev/md/pcdelarioja:raid5
-l Lazy unmount. Detach the filesystem from the filesystem hierarchy now, and cleanup all references to the filesystem 
as soon as it is not busy anymore. (Requires kernel 2.4.11 or later.)
# mdadm --stop /dev/md/pcdelarioja:raid5
# mdadm --remove /dev/md127
# mdadm --zero-superblock /dev/sdc /dev/sdd /dev/sde

Para saber más: También existe la posibilidad de poner el disco spare al crear el raid o añadirlo a posteriori de manera que el raid en vez de dejarlo en standby por si falla (inactivo mientras no falle nada) lo añada al raid para que tenga un disco más activo y por tanto con más tamaño (en vez de 3 discos por ejemplo, con 4 discos). En este caso habría que utilizar:

$ sudo mdadm --add /dev/md/pcdelarioja:raid5 /dev/sdf
$ sudo mdadm --grow --raid-devices=4 /dev/md/pcdelarioja:raid5
Visto 5330 veces Modificado por última vez en Domingo, 16 Febrero 2020 21:10
Fernando Barcina

Autor y director de la web

Deja un comentario

Asegúrese de introducir toda la información requerida, indicada por un asterisco (*). No se permite código HTML.