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