RAID por software: mdadm, RAID 0/1/5/6/10, /proc/mdstat

Introducción

RAID (Redundant Array of Independent Disks) combina múltiples discos para ofrecer redundancia, rendimiento o ambos. Linux implementa RAID por software a través del módulo md (multiple devices) gestionado con la herramienta mdadm. No requiere controladora hardware especial.

Niveles de RAID

  • RAID 0 (striping) — divide los datos entre todos los discos. Rendimiento máximo, cero redundancia. Si falla un disco se pierde todo. Capacidad = suma de todos los discos.
  • RAID 1 (mirroring) — copia idéntica en cada disco. Tolera el fallo de todos los discos menos uno. Capacidad = tamaño del disco más pequeño.
  • RAID 5 — striping con paridad distribuida. Mínimo 3 discos, tolera el fallo de 1. Capacidad = (N-1) × tamaño disco.
  • RAID 6 — striping con doble paridad. Mínimo 4 discos, tolera el fallo de 2. Capacidad = (N-2) × tamaño disco.
  • RAID 10 (1+0) — mirror de stripes. Mínimo 4 discos, alto rendimiento + redundancia. Capacidad = 50% de la suma total.

Crear arrays RAID con mdadm


# Instalación
apt install mdadm     # Debian/Ubuntu
dnf install mdadm     # Red Hat

# Crear RAID 1 con 2 discos
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc

# Crear RAID 5 con 3 discos
mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd

# Crear RAID 5 con 3 discos + 1 spare (repuesto caliente)
mdadm --create /dev/md0 --level=5 --raid-devices=3 \
    /dev/sdb /dev/sdc /dev/sdd \
    --spare-devices=1 /dev/sde

# Crear RAID 10 con 4 discos
mdadm --create /dev/md0 --level=10 --raid-devices=4 \
    /dev/sdb /dev/sdc /dev/sdd /dev/sde

# Crear RAID 0 con 2 discos
mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb /dev/sdc

# Formatear y montar el array
mkfs.ext4 /dev/md0
mkdir /mnt/raid
mount /dev/md0 /mnt/raid
          

/proc/mdstat — Estado del RAID


# Ver estado de todos los arrays
cat /proc/mdstat

# Ejemplo de salida durante sincronización:
# Personalities : [raid1] [raid6] [raid5] [raid4]
# md0 : active raid5 sdd[2] sdc[1] sdb[0]
#       2930276352 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
#
# [UUU] = todos los discos activos y sincronizados
# [UU_] = un disco faltante (degradado)

# Durante una reconstrucción muestra el progreso:
# [====>................] recovery = 23.4% (685879808/2930276352)
#       finish=195.2min speed=174968K/sec

# Monitorizar en tiempo real
watch cat /proc/mdstat
          

Inspección y gestión del array


# Ver detalles del array
mdadm --detail /dev/md0

# Ver detalles de un disco miembro
mdadm --examine /dev/sdb

# Ver todos los arrays
mdadm --detail --scan

# Comprobar el estado rápidamente
mdadm --query /dev/md0
          

Persistencia — mdadm.conf y fstab


# Guardar la configuración del array en mdadm.conf
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
# o en Red Hat:
mdadm --detail --scan >> /etc/mdadm.conf

# Actualizar el initramfs para que el RAID se monte en el arranque
update-initramfs -u        # Debian/Ubuntu
dracut -f                  # Red Hat

# Añadir el array a /etc/fstab usando UUID
blkid /dev/md0
# Añadir línea a /etc/fstab:
# UUID=xxx...  /mnt/raid  ext4  defaults  0  2

# Iniciar/parar el array manualmente
mdadm --stop /dev/md0
mdadm --assemble /dev/md0 /dev/sdb /dev/sdc /dev/sdd
          

Simular fallo y sustituir un disco


# Marcar un disco como fallido (simular fallo para pruebas)
mdadm --fail /dev/md0 /dev/sdc

# Ver el estado degradado
cat /proc/mdstat    # aparecerá [UU_] en RAID 5

# Eliminar el disco fallido del array
mdadm --remove /dev/md0 /dev/sdc

# (Físicamente sustituir el disco si es hardware real)

# Añadir el disco nuevo (o el sustituido ya inicializado)
mdadm --add /dev/md0 /dev/sdc

# La reconstrucción empieza automáticamente
cat /proc/mdstat    # ver progreso

# Añadir un spare (repuesto caliente, se usa automáticamente)
mdadm --add-spare /dev/md0 /dev/sde
          

Ampliar un array RAID


# Ampliar RAID 5 de 3 a 4 discos
mdadm --add /dev/md0 /dev/sde
mdadm --grow /dev/md0 --raid-devices=4

# Ver el progreso de la expansión
cat /proc/mdstat

# Tras la expansión, ampliar el sistema de archivos
# (el array debe estar montado para ext4 y xfs)
resize2fs /dev/md0       # ext4
xfs_growfs /mnt/raid     # xfs
          

Combinación RAID + LVM

Es habitual combinar ambas tecnologías: RAID para redundancia y LVM para flexibilidad. El array RAID actúa como volumen físico de LVM.


# 1. Crear array RAID 1
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc

# 2. Inicializar el array como PV LVM
pvcreate /dev/md0

# 3. Crear VG sobre el array
vgcreate vg_raid /dev/md0

# 4. Crear LVs
lvcreate -L 50G -n datos vg_raid
lvcreate -l 100%FREE -n backups vg_raid

# 5. Formatear y montar
mkfs.xfs /dev/vg_raid/datos
mount /dev/vg_raid/datos /mnt/datos
          

RAID no es un sustituto de los backups — protege contra fallos de disco, no contra borrado accidental o corrupción de datos. Para servidores de producción: RAID 1 (2 discos) o RAID 5/6 (3-4+ discos) según el balance entre coste y rendimiento.

Sistemas de paquetes Debian: dpkg y apt

Índice de la sección

Índice del curso