Crear RAID1 con mdadm y mover LVM a RAID
Este artículo guía paso a paso cómo crear arreglos RAID1 con mdadm (/dev/md0 y /dev/md1), preparar /boot y LVM para arrancar desde RAID, y cómo migrar datos desde discos individuales a los arreglos RAID. Incluye comprobaciones, solución de problemas comunes, una lista de verificación para el equipo y criterios de aceptación.
Introducción
En este documento vamos a crear dos arreglos RAID1 con mdadm: /dev/md0 para /boot (no LVM) y /dev/md1 para usar como PV de LVM. Luego moveremos los volúmenes LVM desde /dev/sdaX a los arreglos RAID y configuraremos GRUB para arrancar desde RAID. Define: RAID1 — espejo de discos; LVM — gestor de volúmenes lógicos; mdadm — herramienta de software RAID en Linux.
Important: haz copias de seguridad antes de manipular particiones, LVM o el cargador de arranque. Estas operaciones pueden dejar el sistema no arrancable si se ejecutan incorrectamente.
4 Crear nuestros arreglos RAID
Vamos a crear los arreglos RAID /dev/md0 y /dev/md1. /dev/sdb1 se añadirá a /dev/md0 y /dev/sdb5 a /dev/md1. /dev/sda1 y /dev/sda5 no pueden añadirse todavía (el sistema está arrancando desde ellos), por eso usamos el placeholder 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/sdb5
Al ejecutar cada comando puede aparecer un mensaje preguntando si continuar; pulsa y para aceptar:
root@server1:~# mdadm –create /dev/md1 –level=1 –raid-disks=2 missing /dev/sdb5
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/md1 started.
root@server1:~#
Para comprobar el estado de los arreglos:
cat /proc/mdstat
Deberías ver dos arreglos RAID degradados. Indicadores: [U] o [U] están degradados; [UU] está correcto:
root@server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sdb5[1]
4989940 blocks super 1.2 [2/1] [_U]
md0 : active raid1 sdb1[1]
248820 blocks super 1.2 [2/1] [_U]
unused devices:
root@server1:~#
A continuación creamos un sistema de ficheros ext2 en nuestro RAID no-LVM /dev/md0:
mkfs.ext2 /dev/md0
Ahora preparamos el RAID LVM /dev/md1 para LVM:
pvcreate /dev/md1
Y lo añadimos al grupo de volúmenes server1:
vgextend server1 /dev/md1
Verifica los PVs:
pvdisplay
Salida esperada (ejemplo):
root@server1:~# pvdisplay
— Physical volume —
PV Name /dev/sda5
VG Name server1
PV Size 4.76 GiB / not usable 2.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 1218
Free PE 0
Allocated PE 1218
PV UUID 8p9j8i-cc9a-bAJq-LFP9-CBMF-JrPl-SDbx4X
— Physical volume —
PV Name /dev/md1
VG Name server1
PV Size 4.76 GiB / not usable 1012.00 KiB
Allocatable yes
PE Size 4.00 MiB
Total PE 1218
Free PE 1218
Allocated PE 0
PV UUID W4I07I-RT3P-DK1k-1HBz-oJvp-6in0-uQ53KS
root@server1:~#
Verifica el VG:
vgdisplay
Salida esperada (ejemplo):
root@server1:~# vgdisplay
— Volume group —
VG Name server1
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 9.52 GiB
PE Size 4.00 MiB
Total PE 2436
Alloc PE / Size 1218 / 4.76 GiB
Free PE / Size 1218 / 4.76 GiB
VG UUID m99fJX-gMl9-g2XZ-CazH-32s8-sy1Q-8JjCUW
root@server1:~#
Actualizar mdadm.conf
Ajusta /etc/mdadm/mdadm.conf para que describa los arreglos creados:
cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
Ver el contenido:
cat /etc/mdadm/mdadm.conf
En el archivo deberías ver ahora las entradas para los arreglos (ejemplo):
DEVICE partitions
CREATE owner=root group=disk mode=0660 auto=yes
HOMEHOST
MAILADDR root
ARRAY /dev/md/0 metadata=1.2 UUID=6cde4bf4:7ee67d24:b31e2713:18865f31 name=server1.example.com:0
ARRAY /dev/md/1 metadata=1.2 UUID=3ce9f2f2:ac89f75a:530c5ee9:0d4c67da name=server1.example.com:1
Modificar /etc/fstab y /etc/mtab
Edita /etc/fstab: comenta la entrada antigua de /boot y añade la nueva para /dev/md0:
vi /etc/fstab
Contenido ejemplo:
proc /proc proc defaults 0 0
/dev/mapper/server1-root / ext3 errors=remount-ro 0 1
#UUID=9b817b3e-2cea-4505-b1be-5ca9fd67f2ff /boot ext2 defaults 0 2
/dev/md0 /boot ext2 defaults 0 2
/dev/mapper/server1-swap_1 none swap sw 0 0
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto 0 0
Sustituye /dev/sda1 por /dev/md0 en /etc/mtab para que refleje el montaje actual:
vi /etc/mtab
Ejemplo:
/dev/mapper/server1-root / ext3 rw,errors=remount-ro 0 0
tmpfs /lib/init/rw tmpfs rw,nosuid,mode=0755 0 0
proc /proc proc rw,noexec,nosuid,nodev 0 0
sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0
udev /dev tmpfs rw,mode=0755 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
/dev/md0 /boot ext2 rw 0 0
Configurar GRUB2 para arrancar desde RAID
Crea /etc/grub.d/09_swraid1_setup copiando 40_custom:
cp /etc/grub.d/40_custom /etc/grub.d/09_swraid1_setup
vi /etc/grub.d/09_swraid1_setup
Contenido ejemplo (usa la versión de kernel correcta):
#!/bin/sh exec tail -n +3 $0
menuentry ‘Debian GNU/Linux, with Linux 2.6.32-5-amd64’ –class debian –class gnu-linux –class gnu –class os {
insmod raid
insmod mdraid
insmod part_msdos
insmod ext2
set root='(md/0)'
echo 'Loading Linux 2.6.32-5-amd64 ...'
linux /vmlinuz-2.6.32-5-amd64 root=/dev/mapper/server1-root ro quiet
echo 'Loading initial ramdisk ...'
initrd /initrd.img-2.6.32-5-amd64
}
Asegúrate de usar la versión de kernel y el VG correctos. Consulta con:
uname -r
y revisa las entradas actuales en /boot/grub/grub.cfg para confirmar root=/dev/mapper/…
Importante: la línea set root=’(md/0)’ instruye a GRUB a arrancar desde /dev/md0 (que contiene /boot), de modo que el sistema pueda arrancar si falla uno de los discos.
Como no usaremos UUIDs para dispositivos de bloque, habilita la opción correspondiente en /etc/default/grub:
vi /etc/default/grub
Descomenta la línea:
GRUB_DISABLE_LINUX_UUID=true
Antes de ejecutar update-grub, añade /dev/sdb en /boot/grub/device.map para evitar errores de grub-probe:
vi /boot/grub/device.map
Añade:
(hd0) /dev/sda
(hd1) /dev/sdb
Ahora actualiza GRUB:
update-grub
Y regenera el initramfs:
update-initramfs -u
5 Mover nuestros datos al RAID
Habiendo modificado la configuración, copiamos el contenido de /dev/sda a /dev/sdb y movemos los volúmenes LVM a /dev/md1.
Mover la partición LVM /dev/sda5 a /dev/md1:
pvmove -i 2 /dev/sda5 /dev/md1
Esta operación puede tardar; ten paciencia.
Después, elimina /dev/sda5 del VG server1:
vgreduce server1 /dev/sda5
Y evita que el sistema lo use como PV:
pvremove /dev/sda5
Verifica:
pvdisplay
Salida esperada: solo /dev/md1 aparece como PV activo.
Cambia el tipo de partición de /dev/sda5 a Linux raid autodetect y añádelo a /dev/md1:
fdisk /dev/sda
Ejemplo de sesión:
root@server1:~# fdisk /dev/sda
WARNING: DOS-compatible mode is deprecated. It’s strongly recommended to
switch off the mode (command ‘c’) and change display units to
sectors (command ‘u’).
Command (m for help): <– t
Partition number (1-5): <– 5
Hex code (type L to list codes): <– fd
Changed system type of partition 5 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 or after you run partprobe(8) or kpartx(8)
Syncing disks.
root@server1:~#
Añade la partición a md1:
mdadm --add /dev/md1 /dev/sda5
Comprueba el progreso:
cat /proc/mdstat
Ejemplo de sincronización en curso:
root@server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda5[2] sdb5[1]
4989940 blocks super 1.2 [2/1] [_U]
[====>…………….] recovery = 22.5% (1127872/4989940) finish=0.3min speed=161124K/sec
md0 : active raid1 sdb1[1]
248820 blocks super 1.2 [2/1] [_U]
unused devices:
root@server1:~#
Puedes usar:
watch cat /proc/mdstat
para ver la sincronización en vivo. Salir con CTRL+C.
Cuando termine, el estado mostrará [UU] para md1:
root@server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda5[2] sdb5[1]
4989940 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sdb1[1]
248820 blocks super 1.2 [2/1] [_U]
unused devices:
root@server1:~#
Ahora monta /dev/md0:
mkdir /mnt/md0
mount /dev/md0 /mnt/md0
Comprueba montajes:
mount
Ejemplo:
root@server1:~# mount
/dev/mapper/server1-root on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/md0 on /boot type ext2 (rw)
/dev/md0 on /mnt/md0 type ext2 (rw)
root@server1:~#
Copia los contenidos de /dev/sda1 a /dev/md0 montado en /mnt/md0:
cd /boot
cp -dpRx . /mnt/md0
Comprobaciones finales
- mdadm: mdadm –examine –scan debe listar arrays en /etc/mdadm/mdadm.conf
- /etc/fstab y /etc/mtab deben apuntar a /dev/md0 para /boot
- update-grub no debe dar errores
- initramfs debe incluir soporte mdraid
- cat /proc/mdstat debe mostrar ambos arrays como [UU]
Notas importantes
- Si tu bootloader no soporta metadata 1.2 en el inicio, considera usar –metadata=0.90 al crear el array /dev/md0. metadata 1.2 coloca la metadata al inicio del dispositivo y puede causar problemas con algunos cargadores.
- Siempre confirma la versión de kernel y rutas de volúmenes antes de editar los archivos de GRUB.
Apéndice: listas, comprobaciones y métodos rápidos
Heurístico rápido para migrar a RAID
- Crear arrays con missing para las particiones del disco activo.
- Formatear / crear PV en el array LVM.
- Extender VG con el nuevo PV.
- Mover datos (pvmove).
- Cambiar tipo de partición, añadir al array y esperar sincronización.
- Actualizar GRUB y initramfs, comprobar arranque.
Checklist para el administrador (antes de empezar)
- Copia de seguridad completa y verificada.
- Plan de rollback documentado (reversión de mdadm, restauración de fstab).
- Acceso a una consola de rescate/LiveCD en caso de fallo de arranque.
- Permisos root y conocimiento de los dispositivos afectados.
Checklist para el operador (durante la migración)
- Comprobar estado de /proc/mdstat regularmente.
- Verificar output de pvdisplay y vgdisplay después de vgextend y pvmove.
- Confirmar que update-grub no arroja errores.
- No reiniciar hasta verificar que /boot está correctamente sincronizado y GRUB actualizado.
Criterios de aceptación
- Ambos arreglos RAID están [UU] en /proc/mdstat.
- /boot está montado desde /dev/md0 en /etc/mtab y /etc/fstab.
- vgdisplay muestra solo /dev/md1 como PV activo para el VG migrado.
- update-grub e update-initramfs se ejecutaron sin errores.
- El sistema arranca desde RAID (ver en un reinicio controlado si es posible).
Comprobaciones de prueba (test cases)
- Test 1: Apagar y desconectar físicamente uno de los discos; el sistema debe arrancar y mostrar el array degradado en /proc/mdstat.
- Test 2: Reconectar el disco y añadirlo al array; el arreglo debe sincronizarse.
- Test 3: Ejecutar pvmove y verificar que todos los LVs permanecen montables durante y después de la operación.
Posibles fallos comunes y cómo tratarlos
- update-grub falla con “Couldn’t find PV pv1”: revisa /boot/grub/device.map y añade todos los discos de arranque (hd0/hd1).
- GRUB no encuentra root=… en el arranque: confirma set root=’(md/0)’ en la entrada de GRUB y que initramfs contiene soporte mdraid.
- mdadm muestra metadata incompatible: recrea el array con –metadata=0.90 si necesitas compatibilidad con cargadores antiguos para /boot.
- fdisk no puede re-leer la tabla de particiones: usa partprobe o reinicia en ventana de mantenimiento si es seguro hacerlo.
Mapa de decisión (flujo resumido)
flowchart TD
A[¿/boot en disco activo?] -->|Sí| B[Crear md0 con missing + sdb1]
A -->|No| C[Crear md0 con discos disponibles]
B --> D[mkfs.ext2 /dev/md0]
D --> E[Configurar /etc/fstab y /etc/mtab]
E --> F[Configurar GRUB set root=''md/0'']
F --> G[update-grub && update-initramfs]
G --> H[Crear md1, pvcreate /dev/md1, vgextend]
H --> I[pvmove desde /dev/sda5 a /dev/md1]
I --> J[fdisk cambiar tipo a fd y mdadm --add /dev/md1 /dev/sda5]
J --> K[Esperar sincronización y verificar /proc/mdstat]
Mantenimiento y seguridad
- Añade entradas de monitoreo para mdadm (mdadm –monitor) y notificaciones por correo.
- Comprueba periódicamente /proc/mdstat y los logs del sistema para detectar lecturas/escrituras erráticas que indiquen fallos de disco.
- Mantén actualizados kernel y utilidades mdadm para compatibilidad con metadata.
Resumen
- Creamos dos arreglos RAID1: /dev/md0 para /boot y /dev/md1 para LVM.
- Preparamos /dev/md1 como PV y extendimos el VG antes de mover datos con pvmove.
- Actualizamos mdadm.conf, /etc/fstab, GRUB y initramfs para arrancar desde RAID.
- Verificamos sincronización y montajes, y realizamos comprobaciones finales para asegurar la capacidad de arranque desde RAID.
Notas: sigue las listas de verificación y realiza pruebas de arranque controladas antes de desplegar en producción.
Materiales similares
Proxy Squid + DansGuardian: guía NTLM

Crear y usar VHD en Windows — guía práctica

Habilitar cámara lenta en cualquier Android

Solución INET_E_RESOURCE_NOT_FOUND en Windows 10

Vaciar Papelera automáticamente en Windows 10
