Reemplazo y prueba de disco en RAID1
Introducción
Este documento explica paso a paso cómo probar el reemplazo de un disco duro fallado en un arreglo RAID1 software (mdadm). Incluye los comandos, salidas de ejemplo, comprobaciones y procedimientos de recuperación y verificación. Está orientado a administradores de sistemas que ya conocen comandos básicos de Linux y RAID.
Nota: RAID1 replica datos entre discos; sustituir un disco consiste en marcarlo como fallado, quitarlo, preparar el nuevo disco y dejar que el array se resincronice.
Requisitos previos
- Acceso root o privilegios sudo.
- mdadm instalado y configurado en el sistema.
- Un disco nuevo (o imagen) para reemplazar el fallado.
- Copias de seguridad válidas si los datos son críticos.
1. Simular un fallo de disco
Puedes simular un fallo físico quitando el disco del equipo o, más cómodamente, marcar las particiones como falladas y retirarlas del array (soft-remove):
mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm --manage /dev/md1 --fail /dev/sdb2
mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm --manage /dev/md1 --remove /dev/sdb2
Luego apaga el sistema para intercambiar el disco si haces un reemplazo físico:
shutdown -h now
Arranca de nuevo (con el disco fallado ya retirado o físicamente sustituido). El sistema debería iniciar normalmente porque RAID1 tiene redundancia.
2. Comprobar el estado degradado del array
Ejecuta:
cat /proc/mdstat
Ejemplo de salida esperada cuando un disco falta:
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[0]
104320 blocks [2/1] [U_]
md1 : active raid1 sda2[0]
10377920 blocks [2/1] [U_]
unused devices:
[root@server1 ~]#
La marca [U_] indica que en cada array falta un miembro.
3. Verificar particiones y discos
Comprueba la tabla de particiones y el estado de los discos:
fdisk -l
Salida de ejemplo (resumida):
[root@server1 ~]# fdisk -l
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 fd Linux raid autodetect
/dev/sda2 14 1305 10377990 fd Linux raid autodetect
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdb doesn't contain a valid partition table
Disk /dev/md1: 10.6 GB, 10626990080 bytes
2 heads, 4 sectors/track, 2594480 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Disk /dev/md1 doesn't contain a valid partition table
Disk /dev/md0: 106 MB, 106823680 bytes
2 heads, 4 sectors/track, 26080 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Disk /dev/md0 doesn't contain a valid partition table
[root@server1 ~]#
En este ejemplo /dev/sdb no tiene tabla de particiones porque se ha retirado o es nuevo.
4. Clonar la tabla de particiones de /dev/sda a /dev/sdb
Copia la tabla de particiones exacta desde el disco sano (/dev/sda) al disco nuevo (/dev/sdb):
sfdisk -d /dev/sda | sfdisk /dev/sdb
Si surge un error relacionado con firmas de sector, puedes forzar la escritura:
sfdisk -d /dev/sda | sfdisk --force /dev/sdb
Ejemplo de interacción:
[root@server1 ~]# sfdisk -d /dev/sda | sfdisk /dev/sdb
Checking that no-one is using this disk right now ...
OK
Disk /dev/sdb: 1305 cylinders, 255 heads, 63 sectors/track
sfdisk: ERROR: sector 0 does not have an msdos signature
/dev/sdb: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0
Device Boot Start End #sectors Id System
/dev/sdb1 * 63 208844 208782 fd Linux raid autodetect
/dev/sdb2 208845 20964824 20755980 fd Linux raid autodetect
/dev/sdb3 0 - 0 0 Empty
/dev/sdb4 0 - 0 0 Empty
Successfully wrote the new partition table
Re-reading the partition table ...
If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
[root@server1 ~]#
5. Borrar restos de metadatos RAID en el disco nuevo
Antes de añadir el disco al array, elimina cualquier superblock de mdadm que pudiera existir:
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2
Esto evita conflictos por metadatos antiguos.
6. Añadir el disco nuevo al array y comprobar la sincronización
Añade las particiones del disco nuevo al array RAID1:
mdadm -a /dev/md0 /dev/sdb1
mdadm -a /dev/md1 /dev/sdb2
Comprueba el progreso de la reconstrucción con:
cat /proc/mdstat
Salida de ejemplo durante la recuperación:
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
104320 blocks [2/2] [UU]
md1 : active raid1 sdb2[2] sda2[0]
10377920 blocks [2/1] [U_]
[======>..............] recovery = 32.3% (3360768/10377920) finish=1.5min speed=74238K/sec
unused devices:
[root@server1 ~]#
Es normal que la reconstrucción tarde, dependiendo del tamaño del array y la velocidad de los discos. Espera a que ambos arrays muestren [UU].
7. Reinstalar GRUB en ambos discos
Para garantizar que la máquina arranque aunque falle un disco, instala el cargador de arranque en ambos discos (hd0 y hd1). Inicia grub y ejecuta:
grub
Dentro del prompt de grub:
root (hd0,0)
setup (hd0)
root (hd1,0)
setup (hd1)
quit
En sistemas modernos con grub2 o distribuciones distintas, usa grub-install en cada dispositivo, por ejemplo:
grub-install /dev/sda
grub-install /dev/sdb
(adapta según la versión y la configuración del sistema).
8. Verificación final
Tras la reconstrucción y la reinstalación del bootloader, comprueba:
- cat /proc/mdstat muestra [UU] para cada array.
- fdisk -l muestra particiones idénticas en ambos discos.
- El sistema arranca con cada disco individualmente (prueba opcional en entorno controlado).
Ejemplo de estado final:
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
104320 blocks [2/2] [UU]
md1 : active raid1 sdb2[1] sda2[0]
10377920 blocks [2/2] [UU]
unused devices:
[root@server1 ~]#
Criterios de aceptación
- Ambos arrays RAID muestran estado [UU] en /proc/mdstat.
- No hay errores en dmesg relacionados con md/particiones después de la operación.
- GRUB está instalado en ambos discos y el sistema arranca desde cada uno (si se prueba).
- Las particiones en /dev/sda y /dev/sdb coinciden en tamaño y tipo.
Lista de comprobación por rol
Administrador:
- Verificar backups antes de empezar.
- Confirmar identificación correcta de discos (/dev/sda vs /dev/sdb).
- Revisar logs (dmesg, /var/log/messages).
Operador de sala/técnico:
- Apagar el equipo si se va a cambiar el disco físicamente.
- Reemplazar hardware y conectar cables correctamente.
- Verificar leds y estado SMART del disco nuevo (si aplicable).
Soporte/Respaldos:
- Asegurar que existe una copia reciente y validada de datos críticos.
- Coordinar ventanas de mantenimiento si la reconstrucción afecta rendimiento.
Playbook (pasos rápidos)
- Marcar particiones como falladas y removerlas del array (o retirar el disco físicamente).
- Apagar e insertar disco nuevo si se requiere reemplazo físico.
- Iniciar sistema y verificar array degradado.
- Clonar tabla de particiones: sfdisk -d /dev/sda | sfdisk /dev/sdb.
- Borrar superblocks: mdadm –zero-superblock /dev/sdb1 /dev/sdb2.
- Añadir particiones al array: mdadm -a /dev/md0 /dev/sdb1 ; mdadm -a /dev/md1 /dev/sdb2.
- Esperar sincronización: monitorizar /proc/mdstat.
- Reinstalar GRUB en ambos discos.
- Comprobaciones finales y cerrar incidente.
Comprobaciones y soluciones a problemas comunes
Error: “sector 0 does not have an msdos signature” al usar sfdisk
- Es habitual en discos recién formateados. Usa –force si estás seguro de clonar la tabla.
Error: el array no reconstruye o está en estado “resync stuck”
- Revisa dmesg por errores de I/O. Puede haber problemas físicos o cables defectuosos.
- Ejecuta smartctl en los discos para comprobar salud SMART.
Problema: GRUB no instala en uno de los discos
- Usa grub-install explícito; verifica partición de arranque (flag boot) y tipo de tabla (msdos vs gpt).
Riesgo de confundir discos (sda vs sdb):
- Usa identificadores por UUID o consulta lsblk -o NAME,UUID,SERIAL antes de escribir tablas.
Matriz de riesgos y mitigaciones
Riesgo: escribir tabla de particiones en el disco equivocado.
- Mitigación: comprobar serial del disco y usar etiquetas físicas en el chasis.
Riesgo: falla durante la reconstrucción causando pérdida temporal de rendimiento.
- Mitigación: programar mantenimiento fuera de horas pico, y limitar velocidad de reconstrucción si es necesario.
Riesgo: GRUB mal instalado y equipo no arranca.
- Mitigación: mantener un medio de rescate/LiveUSB y probar arranque desde cada disco en entorno controlado.
Mini-cheat sheet de comandos
- Ver estado RAID: cat /proc/mdstat
- Marcar partición como fallada: mdadm –manage /dev/mdX –fail /dev/sdXN
- Remover partición del array: mdadm –manage /dev/mdX –remove /dev/sdXN
- Borrar superblock: mdadm –zero-superblock /dev/sdXN
- Añadir a array: mdadm -a /dev/mdX /dev/sdXN
- Clonar tabla: sfdisk -d /dev/sda | sfdisk /dev/sdb
- Reinstalar GRUB: grub-install /dev/sda
Nota sobre compatibilidad y versiones
Las instrucciones usan utilidades clásicas (mdadm, sfdisk, grub). En sistemas con GPT/UEFI o con Grub2, algunos comandos cambian (por ejemplo, gdisk para GPT, efibootmgr para UEFI, grub2-install). Adapta según la arquitectura y la distribución.
Glosario (una línea)
- RAID1: modo de RAID que mantiene una copia idéntica de datos en dos o más discos.
- mdadm: herramienta de administración de arreglos RAID software en Linux.
- sfdisk: utilidad para gestionar particiones en discos (tabla msdos/MBR).
- GRUB: cargador de arranque utilizado en sistemas Linux.
Enlaces y recursos
- The Software-RAID Howto: http://tldp.org/HOWTO/Software-RAID-HOWTO.html
- CentOS: http://www.centos.org/
Resumen final
Has aprendido a simular un fallo de disco en RAID1, clonar la tabla de particiones al disco de reemplazo, limpiar metadatos antiguos, añadir el disco al array, monitorizar la reconstrucción y reinstalar el cargador de arranque. Sigue la lista de comprobación y los criterios de aceptación para validar una recuperación completa.
Importante: siempre confirma la identidad del disco antes de escribir tablas o metadatos y asegúrate de disponer de copias de seguridad actualizadas.