RAID en GNU/Linux

RedHat/Centos 7 soporta los siguientes niveles RAID:

  • RAID-0
  • RAID-1
  • RAID-4
  • RAID-5
  • RAID-6
  • RAID-10

La herramienta principal con la que vamos a administrar los RAID en GNU/Linux es mdadm. El nombre mdadm viene de Multi Disk ADMinistration. Por ello, debemos comprobar que dicha herramienta está instalada.

RAID-0

Para crear un RAID-O, se necesitan al menos 2 discos. Podemos comprobar con qué configuración de disco contamos:

lsblk

Para comprobar el particionado de un disco, el espacio libre que le queda, crear nuevas particiones, etcétera, existe una herramienta llamada parted. Con parted podemos hacer lo mismo que con fdisk, aunque de manera algo más amigable.

El comando help nos permite comprobar las acciones posibles con parted. En el siguiente ejemplo, lo que se hace es:

  1. Seleccionar un disco
  2. Crear una tabla de particiones MBR
  3. Crear una partición primaria con formato xfs de 500MB al principio del disco
  4. Crear una segunda partición primaria con formato xfs de 500MB a continuación
select /dev/sdb mklabel msdos mkpart primary xfs 0% 500MB mkpart primary xfs 500MB 1GB quit

Preparar las particiones

Necesitamos tener al menos 2 particiones de igual tamaño para crear un RAID-0. Supongamos que contamos con las siguientes particiones:

  • /dev/sdb1 - 500MB
  • /dev/sdc1 - 500MB

Para crear el RAID-0, ejecutamos uno de los siguientes comandos (que son equivalentes):

# mdadm --create /dev/md0 --level=raid0 --raid-devices=2 /dev/sd[b-c]1 # mdadm -C /dev/md0 -l raid0 -n 2 /dev/sd[b-c]1

Una vez ejecutado el comando, y el raid ha sido creado, podemos comprobar su estado mediante cualquiera de los comandos siguientes:

# cat /proc/mdstat # mdadm --examine /dev/sd[b-c]1 # mdadm --detail /dev/md0

A partir de este momento, ya podemos usar la unidad /dev/md0 como una partición más. Es decir, podemos llevar a cabo cualquiera de las acciones siguientes:

  • formatear /dev/md0
  • montar /dev/md0 en un punto de montaje
  • añadir /dev/md0 a fstab
  • añadir /dev/md0 a un pool LVM

Guardando la configuración del RAID

Para que mdadm monte el raid tras cada reinicio, debemos guardar la configuración del mismo. Para ello, ejecutamos el siguiente comando:

# mdadm --detail --scan --verbose >> /etc/mdadm.conf

Actividad 1. Utilizando 2 discos 5GB, crear sendas particiones de 1GB. Después crea sobre ellas un RAID-0. Finalmente, añade el raid a fstab para que se monte automáticamente durante el próximo reinicio en /mnt/raid0. Guarda la configuración del raid en /etc/mdadm.conf.

Reinicia y comprueba que el RAID está disponible.

Ejecuta el comando lsblk y toma una captura llamada Act1-raidlinux.png

Para poder eliminar un volumen raid como el creado en el ejercicio anterior (por ejemplo, /dev/md0), es preciso hacer lo siguiente:

mdadm --stop /dev/md0 mdadm --remove /dev/md0

Para poder hacer esto, el volumen no puede estar montado.

RAID-1

El RAID-1 requiere al menos dos discos. Para crear un RAID-1, el procedimiento es similar al empleado para crear un RAID-0. Supongamos que tenemos las particiones siguientes:

  • /dev/sdb1 - 500MB
  • /dev/sdc1 - 500MB

Para crear un RAID-1, haremos lo siguiente:

# mdadm --create /dev/md1 --level=raid1 --raid-devices=2 /dev/sd[b-c]1

Una vez ejecutado el comando, y el raid ha sido creado, podemos comprobar su estado mediante cualquiera de los comandos siguientes:

# cat /proc/mdstat # mdadm --examine /dev/sd[b-c]1 # mdadm --detail /dev/md1

A partir de este momento, ya podemos usar la unidad /dev/md0 como una partición más. Es decir, podemos llevar a cabo cualquiera de las acciones siguientes:

  • formatear /dev/md1
  • montar /dev/md1 en un punto de montaje
  • añadir /dev/md1 a fstab
  • añadir /dev/md1 a un pool LVM

Guardando la configuración del RAID

Para que mdadm monte el raid tras cada reinicio, debemos guardar la configuración del mismo. Para ello, ejecutamos el siguiente comando:

# mdadm --detail --scan --verbose >> /etc/mdadm.conf

Actividad 2. Utilizando los 2 discos del ejercicio 1, crea sendas particiones de 1GB. Después crea sobre ellas un RAID-1 y formatéalo como XFS. Finalmente, añade el raid a fstab para que se monte automáticamente durante el próximo reinicio en /mnt/raid1. Guarda la configuración del raid en /etc/mdadm.conf.

Reinicia y comprueba que el RAID está disponible.

Ejecuta el comando mdadm --detail /dev/md1 donde md1 es el nombre de tu raid y toma una captura llamada Act1-raidlinux.png

Sustituir un disco y reconstruir el RAID-1

Vamos a suponer que se ha producido un fallo de disco. Para comprobar el estado del raid, ejecutamos el comando siguiente:

# mdadm --detail /dev/md1 /dev/md1: Version : 1.2 Creation Time : Sat Jul 2 13:56:38 2011 Raid Level : raid1 Array Size : 26212280 (25.00 GiB 26.84 GB) Used Dev Size : 26212280 (25.00 GiB 26.84 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Sat Jul 2 13:56:47 2011 State : clean, resyncing Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Rebuild Status : 10% complete Name : bcane.virtuals.local:10 (local to host bcane.virtuals.local) UUID : 10a96ed5:92dc48e6:04b2bf43:3539e089 Events : 1 Number Major Minor RaidDevice State 0 8 33 0 active sync /dev/sdb1 1 8 49 1 active sync /dev/sdc1

A través de este comando podemos comprobar si se está dando algúnf fallo en alguna de las unidades.

Para cambiar un disco, primero debe ser marcado como "defectuoso" (faulty). Por ejemplo, si queremos marcar como faulty la unidad /dev/sdc1, haremos lo siguiente:

# mdadm /dev/md1 -f /dev/sdc1

Si volvemos a analizar el estado del raid:

# mdadm --detail /dev/md1 /dev/md1: Version : 1.2 Creation Time : Sat Jul 2 13:56:38 2011 Raid Level : raid1 Array Size : 26212280 (25.00 GiB 26.84 GB) Used Dev Size : 26212280 (25.00 GiB 26.84 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Sat Jul 2 14:00:18 2011 State : active, degraded Active Devices : 1 Working Devices : 1 Failed Devices : 1 Spare Devices : 0 Name : bcane.virtuals.local:10 (local to host bcane.virtuals.local) UUID : 10a96ed5:92dc48e6:04b2bf43:3539e089 Events : 19 Number Major Minor RaidDevice State 0 0 0 0 removed 1 8 49 1 active sync /dev/sdb1 0 8 33 - faulty spare /dev/sdc1

Para eliminar el disco del raid, ejecutamos el comando siguiente:

# mdadm /dev/md1 --remove /dev/sdc1

Si volvemos a consultar el estado del raid:

# mdadm --detail /dev/md1 /dev/md1: Version : 1.2 Creation Time : Sat Jul 2 13:56:38 2011 Raid Level : raid1 Array Size : 26212280 (25.00 GiB 26.84 GB) Used Dev Size : 26212280 (25.00 GiB 26.84 GB) Raid Devices : 2 Total Devices : 1 Persistence : Superblock is persistent Update Time : Sat Jul 2 14:02:04 2011 State : active, degraded Active Devices : 1 Working Devices : 1 Failed Devices : 0 Spare Devices : 0 Name : bcane.virtuals.local:10 (local to host bcane.virtuals.local) UUID : 10a96ed5:92dc48e6:04b2bf43:3539e089 Events : 20 Number Major Minor RaidDevice State 1 8 49 1 active sync /dev/sdb1 0 0 0 0 removed

Supongamos que tenemos otro disco, /dev/sdd, que contiene una partición de igual tamaño a /dev/sdb1. A continuación, podemos añadir una nueva partición al raid, mediante el siguiente comando:

# mdadm /dev/md1 --add /dev/sdd1

Si volvemos a examinar el raid:

# mdadm --detail /dev/md1 /dev/md1: Version : 1.2 Creation Time : Sat Jul 2 13:56:38 2011 Raid Level : raid1 Array Size : 26212280 (25.00 GiB 26.84 GB) Used Dev Size : 26212280 (25.00 GiB 26.84 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Sat Jul 2 18:02:21 2011 State : clean, degraded, recovering Active Devices : 1 Working Devices : 2 Failed Devices : 0 Spare Devices : 1 Rebuild Status : 4% complete Name : bcane.virtuals.local:10 (local to host bcane.virtuals.local) UUID : 10a96ed5:92dc48e6:04b2bf43:3539e089 Events : 23 Number Major Minor RaidDevice State 1 8 49 1 active sync /dev/sdb1 0 8 33 0 spare rebuilding /dev/sdd1

Actividad 3. Cambia uno de los discos del raid 1, y sustitúyelo por otro.

Ejecuta una captura del comando mdadm --detail antes de marcar el disco como defectuoso, después de marcarlo, y tras añadir el nuevo disco, y toma capturas con el nombre Act3.1-raidlinux.png, Act3.2-raidlinux.png y Act3.3-raidlinux.png.

RAID-5

El RAID-5 requiere al menos dos discos. Para crear un RAID-5, el procedimiento es similar al empleado para crear un RAID-1. Supongamos que tenemos las particiones siguientes:

  • /dev/sdb1 - 500MB
  • /dev/sdc1 - 500MB
  • /dev/sdd1 - 500MB

Para crear un RAID-5, haremos lo siguiente:

# mdadm --create /dev/md1 --level=raid5 --raid-devices=3 /dev/sd[b-d]1

Una vez ejecutado el comando, y el raid ha sido creado, podemos comprobar su estado mediante cualquiera de los comandos siguientes:

# cat /proc/mdstat # mdadm --examine /dev/sd[b-d]1 # mdadm --detail /dev/md1

Guardando la configuración del RAID

Para que mdadm monte el raid tras cada reinicio, debemos guardar la configuración del mismo. Para ello, ejecutamos el siguiente comando:

# mdadm --detail --scan --verbose >> /etc/mdadm.conf

Actividad 4. Agrega un nuevo disco de 5GB. Utilizando este disco junto con los 2 discos del ejercicio 2, crea tres particiones de 1GB. Después crea sobre ellas un RAID-5 y formatéalo como XFS. Finalmente, añade el raid a fstab para que se monte automáticamente durante el próximo reinicio en /mnt/raid5. Guarda la configuración del raid en /etc/mdadm.conf.

Reinicia y comprueba que el RAID está disponible.

Ejecuta el comando mdadm --detail /dev/md5 donde md5 es el nombre de tu raid y toma una captura llamada Act4-raidlinux.png

Discos spare

Los discos spare (espera en caliente) permiten disponer de un disco que en caso de fallo de uno de los discos, pasa a formar parte del raid, reconstruyendo y resincronizando el raid. Para crear un disco spare, debemos contar con una partición del mismo tamaño que las otras particiones del raid. Supongamos que tenemos un raid-5 (/dev/md1) que incluye los siguientes discos:

  • /dev/sdb1 - 1GB
  • /dev/sdc1 - 1GB
  • /dev/sdd1 - 1GB

Necesitamos una nueva partición en otro disco, sea /dev/sde1 de 1GB. Partiendo de esta partición ya creada, hacemos lo siguiente:

# mdadm --add /dev/md1 /dev/sde1

Para comprobar el estado del raid, ejecutaremos el siguiente comando:

# mdadm --detail /dev/md1 [...] Active Devices : 3 Working Devices : 4 Failed Devices : 0 Spare Devices : 1 [...]

Actividad 5. Partiendo del RAID-5 que creaste en el ejercicio 3, añade un disco spare.

Ejecuta el comando mdadm --detail /dev/md5 y toma una captura con el nombre Act5-raidlinux.png

Comprobando la tolerancia a fallos de RAID-5

Partiendo de la configuración comentada, podemos simular un fallo en la partición /dev/sdc1 (por ejemplo) y comprobar como el disco spare se pone en marcha:

mdadm --manage --fail /dev/md1 /dev/sdc1

Hecho esto, podemos comprobar de nuevo el estado del raid mediante el comando:

mdadm --detail /dev/md1

Actividad 6. Provoca un fallo en uno de los discos activos del RAID-5. Después comprueba cómo el raid se reconstruye a partir del disco spare.

Una vez que el disco falla, el disco "spare" se activa y el raid se reconstruye. De modo que trans reconstruirse, podremos ver 1 disco fallando, 3 discos activos, 0 discos "spare" y el estado del raid "clean". Ejecuta el comando mdadm --detail /dev/md5 y toma una captura con el nombre Act6-raidlinux.png donde se puedan ver estos datos.

RAID 6 y RAID 10

Además de las configuraciones tradicionales RAID-0, RAID-1 y RAID-5, existen otras configuraciones disponibles, como RAID-6 y RAID-10. La construcción de un RAID-6 o un RAID-10, es similar a la contrucción de cualquier otro raid con MD. Sin embargo existen diferencias fundamentales:

RAID 6

RAID 6 utiliza dos discos para almacenar la información de paridad. Lo que quiere decir que cuantos más discos se utilizan, menos información se pierde en paridad.

RAID 6 es más exigente desde un punto de vista computacional que RAID 10. De hecho, es más lento que los demás niveles de raid.

RAID 6 permite dos fallos simultáneos de disco, sean cuales sean los discos.

RAID 6 es más lento en la reconstrucción que raid 10.

RAID 10

RAID 10 utiliza solamente la mitad de discos para almacenamiento.

RAID 10 combina la velocidad de RAID-0 y la seguridad de RAID-1.

RAID 10 permite hasta dos fallos de disco, pero sólamente si los fallos se producen en espejos diferentes. En caso de producirse en el mismo espejo, los datos se perderán.

Construcción de RAID 6

La construcción de RAID 6 es similar a la construcción de RAID 5, pero emplemando un mínimo de 4 discos.

Actividad 7. Crea un RAID 6, con el nombre /dev/md6, utilizando para ello cuatro particiones. Después móntalo en el punto de montaje /mnt/raid6.

Ejecuta el comando mdadm --detail /dev/md6 y toma una captura con el nombre Act7-raidlinux.png

Actividad 8. Provoca un fallo en dos discos de /dev/md6. Después comprueba que puedes seguir utilizando los datos almacenando los datos en el raid.

Ejecuta el comando mdadm --detail /dev/md6 y toma una captura con el nombre Act8-raidlinux.png

Construcción de RAID 10

La configuración de RAID 10 se puede hacer de dos formas diferentes:

Método 1: Utilizando el mismo método empleado hasta ahora para crear cualquier otro raid.

Método 2: Creando dos RAID 1 primero (/dev/md11 y /dev/md12, por ejemplo), y creando un RAID 0 sobre los RAID 1 creados (/dev/md10 por ejemplo, sobre /dev/md11 y /dev/md12).

Actividad 9. Crea un raid 10, empleando el segundo método comentado anteriormente. Para ello, sigue los siguientes pasos:

  1. Crea un RAID 1, con el nombre /dev/md11
  2. Crea un RAID 1, con el nombre /dev/md12
  3. Crea un RAID 0, con el nombre /dev/md10, sobre /dev/md11 y /dev/md12.

Finalmente, monta el raid 10 en el punto de montaje /mnt/raid10

Toma tres capturas para los siguientes comandos:
mdadm --detail /dev/md11
mdadm --detail /dev/md12
mdadm --detail /dev/md10
lsblk

RAID y LVM

Observa la siguiente imagen:

Es posible utilizar LVM sobre RAID, y de este modo sacar partido de las ventajas de ambas tecnologías.

Actividad 10. Crea la siguiente infraestructura combinando LVM y RAID, siguiendo las indicaciones de la imagen:

Ten en cuenta que cada partición (desde /dev/sdb1 hasta /dev/sdd2) tienen un tamaño de 1GB.

vol1 tiene un tamaño de 1,5GB

vol2 tiene un tamaño de 3GB

vol3 tiene un tamaño de 1,5GB

Para poder entregar este ejercicio, deberás hacer lo siguiente:
mdadm --detail /dev/md51 guardado en una imagen llamada ac10.1-raidlinux.png
mdadm --detail /dev/md52 guardado en una imagen llamada act10.2-raidlinux.png
ssm list guardado en una imagen llamada act10.3-raidlinux.png