Guía de tecnologías

Crear arreglos RAID y mover datos a RAID en Linux

6 min read Almacenamiento Actualizado 28 Sep 2025
Configurar RAID y migrar datos en Linux
Configurar RAID y migrar datos en Linux

4 Crear nuestros 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 pueden añadirse ahora (porque el sistema se está ejecutando sobre ellas), por lo que usamos el placeholder missing en los siguientes dos 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 mostrar ahora que tiene dos arreglos RAID degradados ([U] o [U] significa que un arreglo está degradado mientras que [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]  
      5036288 blocks [2/1] [_U]  
  
md0 : active raid1 sdb1[1]  
      200704 blocks [2/1] [_U]  
  
unused devices:   
[root@server1 ~]#

A continuación creamos un sistema de ficheros (ext3) en nuestro arreglo RAID no LVM /dev/md0:

mkfs.ext3 /dev/md0

Ahora pasamos a nuestro arreglo RAID para LVM: /dev/md1. Para prepararlo para LVM ejecutamos:

pvcreate /dev/md1

Luego añadimos /dev/md1 al grupo de volúmenes VolGroup00:

vgextend VolGroup00 /dev/md1

La salida de

pvdisplay

debería ser similar a esta:

[root@server1 ~]# pvdisplay  
  --- Physical volume ---  
  PV Name               /dev/sda2  
  VG Name               VolGroup00  
  PV Size               4.80 GB / not usable 22.34 MB  
  Allocatable           yes  
  PE Size (KByte)       32768  
  Total PE              153  
  Free PE               1  
  Allocated PE          152  
  PV UUID               op2n3N-rck1-Pywc-9wTY-EUxQ-KUcr-2YeRJ0  
  
  --- Physical volume ---  
  PV Name               /dev/md1  
  VG Name               VolGroup00  
  PV Size               4.80 GB / not usable 22.25 MB  
  Allocatable           yes  
  PE Size (KByte)       32768  
  Total PE              153  
  Free PE               153  
  Allocated PE          0  
  PV UUID               pS3xiy-AEnZ-p3Wf-qY2D-cGus-eyGl-03mWyg  
  
[root@server1 ~]#

La salida de

vgdisplay

debe ser similar a la siguiente:

[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               9.56 GB  
  PE Size               32.00 MB  
  Total PE              306  
  Alloc PE / Size       152 / 4.75 GB  
  Free  PE / Size       154 / 4.81 GB  
  VG UUID               jJj1DQ-SvKY-6hdr-3MMS-8NOd-pb3l-lS7TA1  
  
[root@server1 ~]#

A continuación creamos /etc/mdadm.conf así:

mdadm --examine --scan > /etc/mdadm.conf

Mostramos el contenido del fichero:

cat /etc/mdadm.conf

En el archivo ahora debe ver detalles sobre nuestros dos arreglos RAID (degradados):

| ARRAY /dev/md0 level=raid1 num-devices=2 UUID=7d2bf9c3:7cd9df21:f782dab8:9212d7cb ARRAY /dev/md1 level=raid1 num-devices=2 UUID=d93a2387:6355b5c5:25ed3e50:2a0e4f96 |

A continuación modificamos /etc/fstab. Reemplazar LABEL=/boot por /dev/md0 para que el archivo quede así:

vi /etc/fstab

| /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 |

A continuación reemplace /dev/sda1 por /dev/md0 en /etc/mtab:

vi /etc/mtab

| /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 |

Ahora llegamos al cargador de arranque 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 [...] |

Esto hace que si el primer kernel falla en arrancar, se intente arrancar el kernel #2.

En el mismo fichero, vaya al final, donde encontrará entradas de kernel (stanzas). Copie la primera y péguela antes de la primera entrada existente; reemplace root (hd0,0) por root (hd1,0):

| [...] title Fedora (2.6.23.1-42.fc8) root (hd1,0) kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.23.1-42.fc8.img title Fedora (2.6.23.1-42.fc8) root (hd0,0) kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.23.1-42.fc8.img |

El archivo completo debería parecerse a esto:

| # grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00 # initrd /initrd-version.img #boot=/dev/sda default=0 fallback=1 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Fedora (2.6.23.1-42.fc8) root (hd1,0) kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.23.1-42.fc8.img title Fedora (2.6.23.1-42.fc8) root (hd0,0) kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.23.1-42.fc8.img |

root (hd1,0) se refiere a /dev/sdb, que ya forma parte de nuestros arreglos RAID. Reiniciaremos el sistema en unos minutos; el sistema intentará arrancar desde los arreglos RAID (aun degradados); si falla, arrancará desde /dev/sda gracias a fallback=1.

A continuación ajustamos el ramdisk a la nueva situación:

mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img_orig  
mkinitrd /boot/initrd-`uname -r`.img `uname -r`

5 Mover nuestros datos a los arreglos RAID

Ahora que hemos modificado todos los ficheros de configuración, podemos copiar el contenido de /dev/sda a /dev/sdb (incluyendo los cambios de configuración realizados).

Para mover el contenido de la partición LVM /dev/sda2 a nuestro arreglo LVM /dev/md1 usamos el comando pvmove:

pvmove /dev/sda2 /dev/md1

Esto puede tardar; tenga paciencia.

Después eliminamos /dev/sda2 del grupo de volúmenes VolGroup00…

vgreduce VolGroup00 /dev/sda2

… y decimos al sistema que no use /dev/sda2 más para LVM:

pvremove /dev/sda2

La salida de

pvdisplay

debería ahora ser la siguiente:

[root@server1 ~]# pvdisplay  
  --- Physical volume ---  
  PV Name               /dev/md1  
  VG Name               VolGroup00  
  PV Size               4.80 GB / not usable 22.25 MB  
  Allocatable           yes  
  PE Size (KByte)       32768  
  Total PE              153  
  Free PE               1  
  Allocated PE          152  
  PV UUID               pS3xiy-AEnZ-p3Wf-qY2D-cGus-eyGl-03mWyg  
  
[root@server1 ~]#

A continuación cambiamos el tipo de partición de /dev/sda2 a Linux raid autodetect y añadimos /dev/sda2 al arreglo /dev/md1:

fdisk /dev/sda

[root@server1 ~]# fdisk /dev/sda

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 ~]#

mdadm --add /dev/md1 /dev/sda2

Ahora mire

cat /proc/mdstat

… y debería ver que el arreglo RAID /dev/md1 se está sincronizando:

[root@server1 ~]# cat /proc/mdstat  
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]  
md1 : active raid1 sda2[2] sdb2[1]  
      5036288 blocks [2/1] [_U]  
      [=====>...............]  recovery = 28.8% (1454272/5036288) finish=2.8min speed=21132K/sec  
  
md0 : active raid1 sdb1[1]  
      200704 blocks [2/1] [_U]  
  
unused devices:   
[root@server1 ~]#

(Puede ejecutar

watch cat /proc/mdstat

para obtener una salida continua del proceso. Para salir de watch, pulse CTRL+C.)

Espere hasta que la sincronización haya terminado (la salida debería entonces ser así):

[root@server1 ~]# cat /proc/mdstat  
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]  
md1 : active raid1 sda2[0] sdb2[1]  
      5036288 blocks [2/2] [UU]  
  
md0 : active raid1 sdb1[1]  
      200704 blocks [2/1] [_U]  
  
unused devices:   
[root@server1 ~]#

Ahora montemos /dev/md0:

mkdir /mnt/md0
mount /dev/md0 /mnt/md0

Ahora debería encontrar el arreglo en la salida de

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 ~]#

Ahora copiamos el contenido de /dev/sda1 a /dev/md0 (montado en /mnt/md0):

cd /boot  
cp -dpRx . /mnt/md0

Verificación y comprobaciones (rápidas)

  • Compruebe /proc/mdstat para ver el estado de sincronización: cat /proc/mdstat.
  • Asegúrese de que /etc/fstab y /etc/mtab apunten a /dev/md0 para /boot.
  • Confirme que /etc/mdadm.conf contiene las entradas ARRAY para /dev/md0 y /dev/md1.
  • Verifique vgdisplay y pvdisplay para confirmar que el PV /dev/md1 está en VolGroup00.

Important: haga copia de seguridad de /boot y de la configuración del LVM antes de cambiar tablas de partición o mover PVs.

Lista de verificación antes del reinicio (playbook mínimo)

Para el administrador: siga estos pasos en orden y verifique cada punto:

  1. Confirmar que /dev/md1 muestra [UU] o está sincronizándose correctamente.
  2. /etc/fstab contiene /dev/md0 para /boot.
  3. /etc/mtab contiene /dev/md0 para /boot.
  4. /boot/grub/menu.lst contiene fallback=1 y una entrada con root (hd1,0).
  5. El initrd nuevo fue creado: /boot/initrd-uname -r.img existe.
  6. Backup: copiar /boot a /root/boot-backup antes del reinicio.
  7. Plan de rollback: acceso físico o consola remota disponible si el sistema no arranca.

Criterios de aceptación

  • El sistema arranca correctamente desde el RAID cuando se reinicia (o, en caso de fallo, desde el fallback).
  • /boot está montado desde /dev/md0 y contiene todos los kernels e initrds necesarios.
  • Los volúmenes lógicos y puntos de montaje del LVM están intactos y accesibles.
  • pvdisplay y vgdisplay muestran /dev/md1 como parte del grupo de volúmenes con espacio esperado.

Escenarios en los que este procedimiento puede fallar (y soluciones rápidas)

  • Error al relectura de la tabla de particiones (error 16): el kernel usa la tabla antigua hasta el reinicio. Solución: planifique un reinicio fuera de horas, o use partprobe si el sistema lo soporta.
  • GRUB no encuentra /boot en RAID tras reiniciar: arranque desde el CD/USB de rescate, monte /boot y compare los ficheros; reinstale grub si es necesario en ambos discos.
  • Sincronización lenta: compruebe la carga I/O y la prioridad de rescate (mdadm admite ajustar speed_limit_min/max).

Alternativas y consideraciones

  • Alternativa a RAID1: RAID10 si dispone de más discos y necesita mejor rendimiento. Requiere reorganizar particiones.
  • Si no desea LVM, puede mantener todo en particiones RAID sin PV/VG/LV.
  • Para sistemas más nuevos considere usar GRUB2 y device-mapper de forma nativa.

Lista de verificación por roles

  • Administrador de sistemas: validar sincronización RAID, actualizar GRUB, reiniciar y verificar arranque.
  • Responsable de backups: garantizar copia de seguridad de /boot y snapshots del LVM antes del pvmove.
  • Soporte en sitio: disponibilidad para acceso físico si el sistema no arranca.

Pequeña guía de recuperación rápida

  1. Si el sistema no arranca, usar consola remota o media de rescate.
  2. Compruebe /boot en ambas unidades: mount /dev/sdb1 /mnt y verifique ficheros.
  3. Reinstale GRUB en ambos discos: grub-install /dev/sda && grub-install /dev/sdb.
  4. Arranque y verifique /proc/mdstat y vgdisplay.

Mini-diagrama de decisión (mermaid)

graph TD
  A[¿Tiene 2 discos?] -->|Sí| B[Usar RAID1]
  A -->|No| C[Usar backup + disco único]
  B --> D[Crear mdadm y pvcreate]
  D --> E[vgextend + pvmove]
  E --> F[Actualizar GRUB y initrd]
  F --> G[Reiniciar y verificar]
  G --> H{Arranca correctamente?}
  H -->|Sí| I[Fin]
  H -->|No| J[Recuperación desde rescate]

Resumen

  • Cree los arreglos RAID con mdadm usando missing para los discos en uso.
  • Prepare /dev/md1 para LVM y treslade las PVs con pvmove.
  • Actualice /etc/mdadm.conf, /etc/fstab, /etc/mtab y GRUB para que apunten al RAID.
  • Copie /boot a /dev/md0, regenere initrd y pruebe el reinicio con fallback.

Notas: planifique ventanas de mantenimiento, haga respaldos y tenga acceso físico como plan de contingencia.

Autor
Edición

Materiales similares

Podman en Debian 11: instalación y uso
DevOps

Podman en Debian 11: instalación y uso

Apt-pinning en Debian: guía práctica
Sistemas

Apt-pinning en Debian: guía práctica

OptiScaler: inyectar FSR 4 en casi cualquier juego
Guía técnica

OptiScaler: inyectar FSR 4 en casi cualquier juego

Dansguardian + Squid NTLM en Debian Etch
Redes

Dansguardian + Squid NTLM en Debian Etch

Arreglar error de instalación Android en SD
Android

Arreglar error de instalación Android en SD

Conectar carpetas de red con KNetAttach
Redes

Conectar carpetas de red con KNetAttach