Crear RAID con mdadm y migrar datos
Intento principal
Crear arreglos RAID y migrar los datos del disco original a los nuevos arreglos RAID, manteniendo la capacidad de arrancar si un disco falla.
Variantes relacionadas
- crear raid mdadm
- mdadm con LVM
- migrar LVM a RAID
- RAID1 centos/grub
- pvmove vgextend
1 Preparación (resumen rápido)
- Asegúrese de tener backups recientes antes de tocar particiones o LVM.
- Compruebe los dispositivos (por ejemplo /dev/sda y /dev/sdb).
- Tenga acceso de consola física o KVM en caso de fallo de arranque.
Importante: No continúe sin copia de seguridad completa. Si el sistema de arranque falla y no tiene acceso físico, la recuperación puede requerir rescate desde medios externos.
2 Crear los arreglos RAID
Ahora vamos a crear los arreglos RAID /dev/md0 y /dev/md1. /dev/sdb1 se añadirá a /dev/md0 y /dev/sdb2 a /dev/md1. /dev/sda1 y /dev/sda2 no se pueden añadir todavía (el sistema está arrancando desde ellos), por eso usamos el marcador missing en los siguientes comandos:
mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb2
El comando
cat /proc/mdstat
debería ahora mostrar que tiene dos arreglos RAID degradados ([U] o [U] significa que un arreglo está degradado; [UU] significa que el arreglo está OK):
| [root@server1 ~]# cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md1 : active raid1 sdb2[1] 10377920 blocks [2/1] [_U] md0 : active raid1 sdb1[1] 104320 blocks [2/1] [_U] unused devices:
|
Crear sistema de ficheros en /dev/md0 (no-LVM)
Creamos un sistema de ficheros ext3 en nuestro arreglo RAID no-LVM /dev/md0:
mkfs.ext3 /dev/md0
Preparar /dev/md1 para LVM
Para usar /dev/md1 como PV en LVM:
pvcreate /dev/md1
Añadimos /dev/md1 al grupo de volúmenes VolGroup00:
vgextend VolGroup00 /dev/md1
Puede comprobar los volúmenes físicos con:
pvdisplay
El resultado debería ser similar al siguiente ejemplo (salida de ejemplo conservada):
| [root@server1 ~]# pvdisplay --- Physical volume --- PV Name /dev/sda2 VG Name VolGroup00 PV Size 9.90 GB / not usable 22.76 MB Allocatable yes (but full) PE Size (KByte) 32768 Total PE 316 Free PE 0 Allocated PE 316 PV UUID aikFEP-FB15-nB9C-Nfq0-eGMG-hQid-GOsDuj --- Physical volume --- PV Name /dev/md1 VG Name VolGroup00 PV Size 9.90 GB / not usable 22.69 MB Allocatable yes PE Size (KByte) 32768 Total PE 316 Free PE 316 Allocated PE 0 PV UUID u6IZfM-5Zj8-kFaG-YN8K-kjAd-3Kfv-0oYk7J [root@server1 ~]#
|
Compruebe también el grupo de volúmenes:
vgdisplay
Ejemplo de salida:
| [root@server1 ~]# vgdisplay --- Volume group --- VG Name VolGroup00 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 2 Act PV 2 VG Size 19.75 GB PE Size 32.00 MB Total PE 632 Alloc PE / Size 316 / 9.88 GB Free PE / Size 316 / 9.88 GB VG UUID ZPvC10-cN09-fI0S-Vc8l-vOuZ-wM6F-tlz0Mj [root@server1 ~]#
|
Volcado de mdadm.conf
Registre los arreglos en /etc/mdadm.conf para que el sistema los reconozca tras reinicios:
mdadm --examine --scan > /etc/mdadm.conf
Ver el contenido:
cat /etc/mdadm.conf
Debería contener entradas como:
| ARRAY /dev/md0 level=raid1 num-devices=2 UUID=0a96be0f:bf0f4631:a910285b:0f337164 ARRAY /dev/md1 level=raid1 num-devices=2 UUID=f9e691e2:8d25d314:40f42444:7dbe1da1
|
Actualizar fstab y mtab
Modifique /etc/fstab: reemplace LABEL=/boot (o /dev/sda1) por /dev/md0 para montar /boot desde el RAID:
vi /etc/fstab
Contenido esperado:
| /dev/VolGroup00/LogVol00 / ext3 defaults 1 1 /dev/md0 /boot ext3 defaults 1 2 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 /dev/VolGroup00/LogVol01 swap swap defaults 0 0
|
Edite también /etc/mtab para reflejar /dev/md0 en /boot (esto suele ser temporal hasta el siguiente reinicio):
vi /etc/mtab
Ejemplo:
| /dev/mapper/VolGroup00-LogVol00 / ext3 rw 0 0 proc /proc proc rw 0 0 sysfs /sys sysfs rw 0 0 devpts /dev/pts devpts rw,gid=5,mode=620 0 0 /dev/md0 /boot ext3 rw 0 0 tmpfs /dev/shm tmpfs rw 0 0 none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0 sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
|
Actualizar GRUB
Abra /boot/grub/menu.lst y añada fallback=1 justo después de default=0:
vi /boot/grub/menu.lst
| [...] default=0 fallback=1 [...]
|
Copie la primera entrada del kernel y péguela antes de la primera, cambiando root (hd0,0) por root (hd1,0) para que haya una entrada que arranque desde el otro disco (sdb):
| [...] title CentOS (2.6.18-128.el5) root (hd1,0) kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.18-128.el5.img title CentOS (2.6.18-128.el5) root (hd0,0) kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.18-128.el5.img
|
Esto hace que si el primer kernel falla, el sistema intente arrancar con la entrada de fallback.
Regenerar ramdisk
Guarde el initrd original y genere uno nuevo para la versión actual del kernel:
mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img_orig
mkinitrd /boot/initrd-`uname -r`.img `uname -r`
3 Mover los datos al RAID y completar la sincronización
Ahora que los archivos de configuración están ajustados, moveremos los datos de /dev/sda a /dev/sdb (incluyendo los cambios de configuración).
Mover LVM a /dev/md1
Para mover el contenido del PV /dev/sda2 a /dev/md1 use pvmove:
pvmove /dev/sda2 /dev/md1
Este proceso puede tardar bastante; sea paciente. Cuando termine, reduzca el VG para eliminar /dev/sda2:
vgreduce VolGroup00 /dev/sda2
Y marque /dev/sda2 para no usarse como PV:
pvremove /dev/sda2
Comprobación:
| [root@server1 ~]# pvdisplay --- Physical volume --- PV Name /dev/md1 VG Name VolGroup00 PV Size 9.90 GB / not usable 22.69 MB Allocatable yes (but full) PE Size (KByte) 32768 Total PE 316 Free PE 0 Allocated PE 316 PV UUID u6IZfM-5Zj8-kFaG-YN8K-kjAd-3Kfv-0oYk7J [root@server1 ~]#
|
Preparar la partición /dev/sda2 para integrarla al RAID
Cambie el tipo de partición de /dev/sda2 a Linux raid autodetect y añádala a /dev/md1:
fdisk /dev/sda
Ejemplo de sesión interactiva (tras pulsar t para cambiar tipo y w para escribir):
| [root@server1 ~]# fdisk /dev/sda The number of cylinders for this disk is set to 1305. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): <-- t Partition number (1-4): <-- 2 Hex code (type L to list codes): <-- fd Changed system type of partition 2 to fd (Linux raid autodetect) Command (m for help): <-- w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot. Syncing disks. [root@server1 ~]#
|
A continuación añada la partición al arreglo:
mdadm --add /dev/md1 /dev/sda2
Verifique la sincronización:
cat /proc/mdstat
Ejemplo:
| [root@server1 ~]# cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md1 : active raid1 sda2[2] sdb2[1] 10377920 blocks [2/1] [_U] [====>................] recovery = 23.4% (2436544/10377920) finish=2.0min speed=64332K/sec md0 : active raid1 sdb1[1] 104320 blocks [2/1] [_U] unused devices:
|
Puede monitorizar con:
watch cat /proc/mdstat
(Mientras watch está activo, salga con CTRL+C.)
Espere a que la sincronización termine; cuando termine verá [UU] en lugar de [_U].
Montar y copiar /boot a /dev/md0
Monte /dev/md0 y copie los ficheros de /boot:
mkdir /mnt/md0
mount /dev/md0 /mnt/md0
Compruebe con mount:
| [root@server1 ~]# mount /dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) /dev/md0 on /boot type ext3 (rw) tmpfs on /dev/shm type tmpfs (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) /dev/md0 on /mnt/md0 type ext3 (rw) [root@server1 ~]#
|
Copiar datos de /boot (con preservación de permisos y enlaces):
cd /boot
cp -dpRx . /mnt/md0
4 Mini-metodología: Planificar, Ejecutar, Verificar, Revertir
- Planificar: identificar discos, tamaño, backups, ventanas de mantenimiento.
- Preparar: crear arreglos degradados, configurar mdadm.conf, extender VG.
- Ejecutar: pvmove, vgreduce, pvremove, añadir particiones al RAID y esperar sincronización.
- Verificar: pvdisplay, vgdisplay, cat /proc/mdstat, probar reinicio en entorno controlado.
- Revertir: plan de rollback (ver sección de playbook abajo).
5 Checklist por rol
Administrador (quien ejecuta los comandos):
- Backup completo reciente disponible.
- Acceso físico o KVM listo.
- mdadm.conf generado y verificado.
- fstab y grub modificados.
- Sincronizaciones completadas ([UU] en /proc/mdstat).
Operaciones (quien monitorea):
- Monitorizar pvmove y mdadm –detail.
- Revisar logs syslog/dmesg para errores de disco.
- Confirmar montajes y accesibilidad de servicios.
Auditoría/Compliance:
- Registrar cambios en CMDB.
- Guardar copia de /etc/mdadm.conf y /etc/fstab antes/después.
6 Playbook rápido de rollback (pasos de emergencia)
- Si el servidor no arranca desde RAID:
- Arrancar desde medio de rescate o disco original.
- Montar sistema de archivos raíz y /boot desde disco original.
- Restaurar /etc/fstab y /boot/grub/menu.lst desde copia previa.
- Ejecutar grub-install si fue necesario en el disco de arranque.
Importante: practicar este rollback en un entorno de ensayo evita sorpresas en producción.
7 Cuándo falla este enfoque (contraejemplos) y alternativas
- Contraejemplo 1: discos físicos con sectores defectuosos elevados. Si hay errores de lectura masiva, la reconstrucción puede fallar o degradarse permanentemente. Alternativa: clonar el disco a uno nuevo (dd/rescue) y reemplazar hardware defectuoso.
- Contraejemplo 2: limitaciones del controlador/BIOS para arrancar desde discos RAID software. Alternativa: usar RAID por hardware o conservar /boot en disco separado que el BIOS pueda leer fácilmente.
- Alternativas: usar rsync o clonezilla para copiar particiones en lugar de pvmove; usar RAID a nivel de hardware; migrar a soluciones modernas como mdadm con systemd-boot o GRUB2 según la distribución.
8 Comprobaciones y criterios de aceptación
- /proc/mdstat muestra [UU] para cada arreglo cuando la sincronización ha terminado.
- pvdisplay y vgdisplay muestran el PV y VG con el espacio correctamente asignado.
- /boot está montado desde /dev/md0 y contiene los mismos ficheros que antes del copiado.
- El sistema arranca correctamente desde el disco secundario (prueba controlada) y, en caso de fallo del disco primario, el sistema utiliza la entrada de fallback.
9 Solución de problemas rápida
- mdadm no reconoce un disco: comprobar dmesg y smartctl para errores de hardware.
- pvmove se queda parado: comprobar actividad I/O con iostat o vmstat; revisar LVM locks (/var/lock/lvm).
- Al reiniciar, kernel no encuentra root: comprobar que initrd contiene los módulos md/raid y lvm; regenerar initrd con mkinitrd y comprobar /boot.
10 Heurísticos y modelos mentales
- Modelo: piense en RAID1 como espejo; inicialmente creamos un espejo degradado y lo completamos añadiendo la otra pieza más tarde.
- Regla práctica: siempre configure arranque y /boot antes de mover la raíz para minimizar ventanas de no-arranque.
11 Plantilla rápida de comandos (cheat sheet)
- Crear RAID degradado: mdadm –create /dev/mdX –level=1 –raid-disks=2 missing /dev/sdY
- Preparar LVM: pvcreate /dev/mdX; vgextend VolGroup00 /dev/mdX
- Mover PV: pvmove /dev/sda2 /dev/md1
- Añadir partición al RAID: mdadm –add /dev/md1 /dev/sda2
- Ver estado RAID: cat /proc/mdstat
- Regenerar initrd: mkinitrd /boot/initrd-
uname -r
.imguname -r
12 Resumen y siguientes pasos
Resumen: hemos creado arreglos RAID1 degradados, preparado uno como PV LVM, extendido el grupo de volúmenes, movido datos con pvmove, añadido la partición original al RAID y copiado /boot al RAID. Antes de reiniciar, verifique cuidadosamente /proc/mdstat, pvdisplay y que GRUB y fstab están correctamente apuntando a los dispositivos RAID.
Siguientes pasos recomendados:
- Programar una ventana de reinicio controlada para verificar arranque desde RAID y fallback.
- Hacer pruebas de extracción simulada de disco para validar la redundancia.
- Automatizar alertas de SMART y comprobación periódica de mdadm.
Puntos clave:
- Mantenga siempre backups completos antes de tocar discos o LVM.
- Verifique mdadm.conf, /etc/fstab y GRUB antes de reiniciar.
- Espere a que las sincronizaciones terminen ([UU]) antes de dar por finalizada la migración.