mdadm es la herramienta estándar para crear y administrar RAID por software en Linux. Combina varios discos en un único dispositivo (/dev/md0) que el kernel gestiona sin necesidad de una controladora RAID dedicada. En este tutorial crearás un RAID 1 (espejo) con dos discos en Ubuntu 24.04, lo montarás de forma persistente, configurarás las alertas y practicarás la sustitución de un disco averiado. Al final verás cómo crear otros niveles, como RAID 5 o RAID 10.
Requisitos previos
- Un servidor con Ubuntu 24.04 LTS con al menos dos discos adicionales vacíos del mismo tamaño, por ejemplo un servidor dedicado de CubePath. En los ejemplos son
/dev/sdby/dev/sdc. - Un usuario no root con privilegios
sudo.
Advertenciacrear un array destruye los datos de todos los discos que lo forman. Verifica los nombres de dispositivo antes de cada comando.
ImportanteRAID protege frente a la avería de un disco, no frente a un borrado accidental, un ransomware o un sistema de archivos dañado. Sigue necesitando copias de seguridad.
Los comandos de mdadm son iguales en Debian 12. En Rocky Linux 9 el archivo de configuración es /etc/mdadm.conf y el initramfs se regenera con sudo dracut -f.
Elegir el nivel de RAID
| Nivel | Discos mínimos | Capacidad útil | Discos que pueden fallar | Uso típico |
|---|---|---|---|---|
| RAID 0 | 2 | 100 % | Ninguno | Datos temporales donde solo importa la velocidad |
| RAID 1 | 2 | 50 % | Todos menos uno | Disco del sistema, bases de datos pequeñas |
| RAID 5 | 3 | (N-1) discos | 1 | Almacenamiento con más lecturas que escrituras |
| RAID 6 | 4 | (N-2) discos | 2 | Arrays grandes con discos de mucha capacidad |
| RAID 10 | 4 | 50 % | 1 por pareja espejo | Bases de datos y cargas con muchas escrituras |
RAID 1 es el punto de partida más sencillo y el que se usa en esta guía. Con discos grandes, la reconstrucción de un RAID 5 tarda horas y durante ese tiempo otro fallo supone perder el array, por lo que en esos casos RAID 6 o RAID 10 son preferibles.
Paso 1: Instalar mdadm e identificar los discos
Instala mdadm (en muchas instalaciones de Ubuntu Server ya viene):
sudo apt update
sudo apt install mdadm
Si apt propone instalar y configurar un servidor de correo como Postfix, puedes elegir "Sin configuración" por ahora y configurarlo después si quieres recibir alertas por email.
Identifica los discos vacíos:
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS
NAME SIZE TYPE FSTYPE MOUNTPOINTS
sda 100G disk
├─sda1 1M part
└─sda2 100G part ext4 /
sdb 500G disk
sdc 500G disk
Comprueba que no tienen restos de un RAID o sistema de archivos anterior:
sudo mdadm --examine /dev/sdb /dev/sdc
sudo wipefs /dev/sdb /dev/sdc
Si mdadm --examine responde No md superblock detected y wipefs no imprime nada, los discos están limpios. Si encuentras firmas antiguas que puedes borrar, elimínalas con sudo wipefs -a /dev/sdb /dev/sdc.
Paso 2: Crear el array RAID 1
Crea el array /dev/md0 con los dos discos:
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
mdadm avisa de que los metadatos están al principio del disco y pide confirmación. Responde y:
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
mdadm: array /dev/md0 started.
El aviso solo importa si pretendes arrancar desde este array; para un disco de datos no afecta.
Paso 3: Seguir la sincronización inicial
Al crearse, el array copia el contenido de un disco al otro. Consulta el progreso en /proc/mdstat:
cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdc[1] sdb[0]
524155904 blocks super 1.2 [2/2] [UU]
[==>..................] resync = 12.6% (66191360/524155904) finish=38.2min speed=199580K/sec
bitmap: 4/4 pages [16KB], 65536KB chunk
unused devices: <none>
[2/2] [UU] indica que los dos discos están activos y sanos. Un guion bajo ([U_]) indicaría un disco que falta o ha fallado. Para seguir el progreso en directo, usa watch cat /proc/mdstat y sal con Ctrl+C.
No hace falta esperar a que termine: puedes crear el sistema de archivos y usar el array mientras se sincroniza, aunque irá algo más lento hasta entonces.
Paso 4: Crear el sistema de archivos y montarlo
Crea un sistema de archivos ext4 sobre el array:
sudo mkfs.ext4 -L raid1 /dev/md0
Crea el punto de montaje y monta el array:
sudo mkdir -p /mnt/raid1
sudo mount /dev/md0 /mnt/raid1
df -h /mnt/raid1
Filesystem Size Used Avail Use% Mounted on
/dev/md0 492G 28K 467G 1% /mnt/raid1
Paso 5: Hacer la configuración persistente
Si no se registra en la configuración, el array puede aparecer como /dev/md127 tras reiniciar o no montarse al arrancar. Añade la definición del array a /etc/mdadm/mdadm.conf:
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
ARRAY /dev/md0 metadata=1.2 UUID=8f2a1c3b:4d5e6f70:81920a1b:2c3d4e5f
Actualiza el initramfs para que el array se ensamble al principio del arranque:
sudo update-initramfs -u
Obtén el UUID del sistema de archivos (distinto del UUID del array que acabas de ver):
sudo blkid /dev/md0
/dev/md0: LABEL="raid1" UUID="b7d4e2a9-1c3f-4a6b-8e5d-0f9c2a7b3e61" BLOCK_SIZE="4096" TYPE="ext4"
Abre /etc/fstab:
sudo nano /etc/fstab
Añade esta línea al final con tu UUID:
UUID=b7d4e2a9-1c3f-4a6b-8e5d-0f9c2a7b3e61 /mnt/raid1 ext4 defaults,nofail 0 2
nofail permite que el servidor arranque aunque el array no se ensamble. Comprueba la entrada antes de reiniciar:
sudo umount /mnt/raid1
sudo systemctl daemon-reload
sudo mount -a
findmnt /mnt/raid1
Reinicia y confirma que /dev/md0 sigue existiendo y está montado:
sudo reboot
cat /proc/mdstat
findmnt /mnt/raid1
Paso 6: Configurar las alertas
mdadm incluye un servicio de monitorización que avisa cuando un disco falla o el array se degrada. Comprueba que está activo:
systemctl status mdmonitor
El destinatario de las alertas se define con MAILADDR en /etc/mdadm/mdadm.conf:
sudo nano /etc/mdadm/mdadm.conf
Sustituye el valor por tu dirección:
MAILADDR [email protected]
Para que el correo salga, el servidor necesita un agente de correo configurado (Postfix como relay, por ejemplo). Reinicia el servicio y envía una alerta de prueba:
sudo systemctl restart mdmonitor
sudo mdadm --monitor --scan --test --oneshot
Deberías recibir un correo cuyo asunto empieza por TestMessage event on /dev/md0. Si no llega, revisa el registro del agente de correo con sudo journalctl -u postfix.
Consulta también el estado detallado del array cuando quieras:
sudo mdadm --detail /dev/md0
La línea State : clean y los dos discos como active sync indican que todo está bien.
Paso 7: Sustituir un disco averiado
Practicar la sustitución antes de necesitarla es la mejor forma de no cometer errores con un disco real fallando. Marca /dev/sdc como averiado:
sudo mdadm /dev/md0 --fail /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md0
El array sigue funcionando con un solo disco, en estado degradado:
cat /proc/mdstat
md0 : active raid1 sdc[1](F) sdb[0]
524155904 blocks super 1.2 [2/1] [U_]
Retira el disco del array:
sudo mdadm /dev/md0 --remove /dev/sdc
Con un disco realmente averiado, este es el momento de sustituirlo físicamente. Antes, anota su número de serie para cambiar el disco correcto: lsblk -o NAME,SERIAL o ls -l /dev/disk/by-id/. Si el disco nuevo no está vacío, límpialo con wipefs -a.
Añade el disco nuevo (en esta práctica, el mismo /dev/sdc) al array:
sudo mdadm /dev/md0 --add /dev/sdc
La reconstrucción empieza automáticamente:
cat /proc/mdstat
md0 : active raid1 sdc[2] sdb[0]
524155904 blocks super 1.2 [2/1] [U_]
[>....................] recovery = 3.1% (16384000/524155904) finish=41.3min speed=204800K/sec
Cuando termine, el estado vuelve a [2/2] [UU]. No es necesario tocar mdadm.conf ni /etc/fstab, porque el array se identifica por su UUID.
Otros niveles de RAID
La creación solo cambia en --level y el número de discos. El resto de pasos (sistema de archivos, mdadm.conf, update-initramfs, /etc/fstab) son idénticos.
RAID 5 con tres discos:
sudo mdadm --create /dev/md1 --level=5 --raid-devices=3 /dev/sdd /dev/sde /dev/sdf
RAID 10 con cuatro discos:
sudo mdadm --create /dev/md2 --level=10 --raid-devices=4 /dev/sdd /dev/sde /dev/sdf /dev/sdg
Para añadir un disco de repuesto que entre automáticamente cuando otro falle, usa --add sobre un array que ya está completo: el disco queda marcado como spare.
sudo mdadm /dev/md0 --add /dev/sdd
Eliminar un array
Si necesitas deshacer el array para reutilizar los discos, desmóntalo, elimina su línea de /etc/fstab y de /etc/mdadm/mdadm.conf, detenlo y borra los metadatos de cada disco:
sudo umount /mnt/raid1
sudo mdadm --stop /dev/md0
sudo mdadm --zero-superblock /dev/sdb /dev/sdc
sudo update-initramfs -u
Solución de problemas
El array aparece como /dev/md127 tras reiniciar. Falta la línea ARRAY en /etc/mdadm/mdadm.conf o no se regeneró el initramfs. Añádela con mdadm --detail --scan, elimina duplicados si los hay y ejecuta sudo update-initramfs -u. Montar por UUID en /etc/fstab evita que el cambio de nombre afecte al montaje.
El array está inactive en /proc/mdstat. Deténlo y vuelve a ensamblarlo a partir de los metadatos de los discos:
sudo mdadm --stop /dev/md0
sudo mdadm --assemble --scan
La reconstrucción va muy lenta. El kernel limita la velocidad para no afectar al resto de la E/S. Consulta los límites con sysctl dev.raid.speed_limit_min dev.raid.speed_limit_max y sube temporalmente el mínimo, por ejemplo sudo sysctl -w dev.raid.speed_limit_min=100000 (en KB/s).
Un disco se marca como averiado repetidamente. Revisa su estado SMART con sudo smartctl -a /dev/sdc (paquete smartmontools). Errores de sectores reasignados o pendientes en aumento indican que hay que sustituirlo.
Conclusión
Has creado un RAID 1 con mdadm, lo has montado de forma persistente por UUID, has configurado las alertas y has practicado la sustitución de un disco sin perder datos. Como siguientes pasos, puedes crear un grupo de volúmenes LVM sobre /dev/md0 para repartir y ampliar el espacio con flexibilidad, vigilar la salud de los discos con smartmontools y programar copias de seguridad externas, que RAID no sustituye.
