Guía de tecnologías

Cómo redimensionar particiones RAID1 de software con LVM (Reducir y Ampliar)

10 min read DevOps Actualizado 13 Oct 2025
Redimensionar RAID1 con LVM: Reducir y Ampliar
Redimensionar RAID1 con LVM: Reducir y Ampliar

1 Nota preliminar

Hace unos días detecté que uno de mis servidores tenía un arreglo RAID1 degradado (/dev/md1, formado por /dev/sda5 y /dev/sdb5; /dev/sda5 había fallado, /dev/sdb5 todavía estaba activo). El motivo fue que durante la resincornización apareció un error I/O en sectores finales de /dev/sdb5.

Salida de ejemplo de /proc/mdstat:

server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb5[1]
4988032 blocks [2/1] [_U]

md0 : active raid1 sda1[0] sdb1[1]
248896 blocks [2/2] [UU]

unused devices: 
server1:~#

Registro de kernel que mostró errores I/O:

Nov 22 18:51:06 server1 kernel: sdb: Current: sense key: Aborted Command
Nov 22 18:51:06 server1 kernel: end_request: I/O error, dev sdb, sector 1465142856

En el peor de los casos, un disco está muerto y el otro está fallando. La idea fue: reducir /dev/md1 para excluir los sectores dañados al final de /dev/sdb5, añadir la partición del disco reemplazado, dejar que termine la sincronización, retirar la partición defectuosa y volver a expandir el conjunto RAID.

Este artículo describe tanto el procedimiento para un arreglo íntegro como para uno degradado. He probado esto con volúmenes lógicos que usan ext3/ext4. No garantizo que funcione en todos los entornos: siempre haga copias de seguridad y pruebe en un sistema no productivo primero.

Nota terminológica (1 línea): RAID1 = espejo; LVM = gestor de volúmenes lógicos; PV = volumen físico; VG = grupo de volúmenes; LV = volumen lógico.

Important: Si vas a redimensionar la partición raíz (/) necesitarás arrancar desde un sistema de rescate (por ejemplo, una Live-CD como Knoppix) y asegurarte de que los LV estén desmontados.

2 Estado inicial del sistema de ejemplo

Salida de ejemplo: uso de disco y LVM en el sistema origen usado para esta guía.

server1:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/server1-root
4.5G  741M  3.5G  18% /
tmpfs                 126M     0  126M   0% /lib/init/rw
udev                    10M   68K   10M   1% /dev
tmpfs                 126M     0  126M   0% /dev/shm
/dev/md0              236M   18M  206M   8% /boot
server1:~#
server1:~# pvdisplay
--- Physical volume ---
PV Name               /dev/md1
VG Name               server1
PV Size               4.75 GB / not usable 0
Allocatable           yes (but full)
PE Size (KByte)       4096
Total PE              1217
Free PE               0
Allocated PE          1217
PV UUID               Ntrsmz-m0o1-WAPD-xhsb-YpH7-0okm-qfdBQG
server1:~#
server1:~# vgdisplay
--- Volume group ---
VG Name               server1
Format                lvm2
Metadata Areas        1
VG Size               4.75 GB
PE Size               4.00 MB
Total PE              1217
Alloc PE / Size       1217 / 4.75 GB
Free  PE / Size       0 / 0
server1:~#
server1:~# lvdisplay
--- Logical volume ---
LV Name               /dev/server1/root
VG Name               server1
LV Size               4.50 GB
--- Logical volume ---
LV Name               /dev/server1/swap_1
LV Size               264.00 MB
server1:~#

Fact box: claves observables

  • Tamaño del arreglo /dev/md1 en el ejemplo: 5 GB (4988032 bloques en /proc/mdstat).
  • Tamaño del PV antes del cambio: 4.75 GB.
  • PE Size (LVM): 4 MB.
  • El comando mdadm –grow requiere tamaño en KiBytes y que sea divisible por 64 en este ejemplo.

3 Pasos previos y comprobaciones

  1. Arranca un sistema de rescate si vas a redimensionar la partición raíz.
  2. Carga módulos necesarios:
modprobe md
modprobe linear
modprobe multipath
modprobe raid0
modprobe raid1
modprobe raid5
modprobe raid6
modprobe raid10
  1. Reconstruye / detecta arreglos y actualiza mdadm.conf:
cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
mdadm -A --scan
  1. Inicia LVM:
/etc/init.d/lvm start
  1. Antes de cualquier cambio, comprueba el sistema de archivos y la integridad del LV que vas a modificar:
e2fsck -f /dev/server1/root
  1. Identifica la ubicación de los LV dentro del PV y su orden: si vas a reducir el PV, el LV que esté al final deberá moverse o eliminarse.

Important: No continues si no entiendes cómo están colocados los LVs en el PV. Mover LVs o eliminarlos sin copia puede provocar pérdida de datos.

4 Reducción de un arreglo íntegro (procedimiento paso a paso)

Escenario objetivo: reducir /dev/md1 de 5 GB a 4 GB.

Resumen de la estrategia: reducir primero el sistema de archivos dentro del LV, luego reducir el LV, ajustar el PV a un tamaño menor, y finalmente reducir el MD (RAID). Después devolver espacio al PV y al LV si es necesario.

Pasos detallados:

  1. Ejecuta e2fsck en el LV:
e2fsck -f /dev/server1/root
  1. Reduce el sistema de archivos del LV a un tamaño seguro (ej. 2G en el ejemplo). Asegúrate de que quepa todo lo que hay en el LV.
resize2fs /dev/server1/root 2G

Explicación: resize2fs reduce el sistema de archivos ext3/ext4. El tamaño final del FS debe ser <= tamaño del LV.

  1. Reduce el LV a un tamaño ligeramente mayor que el FS (ej. 2.5G):
lvreduce -L2.5G /dev/server1/root
  1. Si el LV swap está al final del PV y bloquea el espacio, elimínalo temporalmente (o mueve los LVs si prefieres):
lvremove /dev/server1/swap_1

Nota: solo elimina swap si puedes recrearlo después y si no es crítico en ese momento. Alternativamente, mueve datos con pvmove.

  1. Reduce el PV al tamaño deseado (3G en el ejemplo) usando pvresize –setphysicalvolumesize:
pvresize --setphysicalvolumesize 3G /dev/md1
  1. Reduce el arreglo RAID al nuevo tamaño. mdadm requiere el valor en Kibibytes y que sea divisible por 64. Para 4 GiB: 4 1024 1024 = 4194304
mdadm --grow /dev/md1 --size=4194304
  1. Ajusta el PV para usar el nuevo máximo disponible (si quieres expandir hasta el máximo disponible):
pvresize /dev/md1
  1. Reconstruye el LV swap si lo habías eliminado:
lvcreate --name swap_1 -l 66 server1
mkswap /dev/server1/swap_1
  1. Extiende de nuevo el LV raíz para usar el espacio libre del VG:
lvextend -l +317 /dev/server1/root
resize2fs /dev/server1/root
  1. Ejecuta e2fsck final:
e2fsck -f /dev/server1/root
  1. Reinicia al sistema normal y comprueba que /dev/md1 tenga el nuevo tamaño:
cat /proc/mdstat
pvdisplay
vgdisplay
lvdisplay

Resultado esperado: /dev/md1 reportando ~4.00 GB y LVs ajustados.

Notes: Si el sistema no es raíz y los LVs están desmontados, podrías hacer muchas operaciones en caliente, pero la reducción del FS requiere que el FS esté desmontado o que el LV esté inactivo.

5 Procedimiento para un arreglo degradado (flujo recomendado)

Escenario: uno de los miembros del RAID está defectuoso o muestra errores en sectores. Objetivo: excluir los sectores defectuosos y reconstruir el arreglo usando el disco nuevo.

Estrategia general:

  • Identificar los sectores defectuosos y determinar cuánto espacio final del dispositivo es inseguro.
  • Reducir el tamaño del arreglo para excluir los sectores defectuosos (si están al final) o reemplazar la unidad si no es posible excluirlos.
  • Añadir la partición correspondiente del disco nuevo y dejar que la resync termine.

Pasos sugeridos:

  1. Identifica las fallas en dmesg / syslog para localizar el offset aproximado del fallo (sectores). No uses valores exactos sin entender la geometría.

  2. Si los errores están al final del dispositivo y existe suficiente espacio seguro, determina nuevo tamaño objetivo del arreglo y redúcelo como en la sección anterior mediante mdadm –grow –size. Asegúrate que el valor final sea divisible por 64.

  3. Añade la partición del disco reemplazado al arreglo:

mdadm --add /dev/md1 /dev/sda5
  1. Supervisa la resynchronización:
watch -n 5 cat /proc/mdstat
  1. Una vez completada la resync, marca el dispositivo defectuoso como removido y reemplázalo físicamente. Luego crea particiones equivalentes en el nuevo disco y añádelas al arreglo:
mdadm --fail /dev/md1 /dev/sdb5
mdadm --remove /dev/md1 /dev/sdb5
# crear /dev/sdb5 en el nuevo disco (fdisk/parted) y luego:
mdadm --add /dev/md1 /dev/sdb5
  1. Si en lugar de excluir sectores quieres clonar y migrar LVM a otro PV, considera pvmove para migrar LVs a otro dispositivo disponible antes de tocar el MD.

Warnings: Si el disco defectuoso tiene errores intermitentes, la resync puede fallar. En esos casos, reemplaza físicamente ese disco y reconstruye desde el espejo sano.

6 Riesgos y mitigaciones

Riesgos principales:

  • Reducción de un FS a un tamaño menor que sus datos: pérdida de datos.
  • Error durante resync con discos que presentan sectores defectuosos: resync incompleta.
  • Error humano al indicar tamaños o dispositivos incorrectos.

Mitigaciones:

  • Hacer copia de seguridad completa antes de comenzar.
  • Verificar múltiples veces nombres de dispositivos (usar blkid, lsblk, fdisk -l).
  • Probar el procedimiento en un entorno no productivo.
  • En operaciones críticas, tomar una imagen del disco (ddrescue) si sospechas sectores defectuosos.

7 Enfoques alternativos

  • pvmove + migración: en lugar de reducir PV/PVresize, si tienes otro disco disponible puedes crear un nuevo PV en el disco de reemplazo, usar pvmove para migrar LVs y luego reconfigurar el arreglo RAID.
  • Re-sincronización completa: si los sectores defectuosos están esporádicos, reemplazar el disco defectuoso inmediatamente y reconstruir desde cero.
  • Uso de LVM sobre RAID vs RAID sobre LVM: evaluar diseño. En algunos casos es preferible RAID bajo LVM (como el escenario aquí); en otros, LVM sobre RAID ofrece flexibilidad distinta.

8 Modelo mental y heurística

  • Piensa en capas: Dispositivo físico -> md (RAID) -> PV -> VG -> LV -> FS. Siempre ajusta de arriba abajo: primero FS, luego LV, luego PV, luego MD cuando reduces; y en el orden inverso cuando expandes.
  • Regla de oro: nunca reduces el LV por debajo del tamaño del FS.
  • Verifica consistencia tras cada cambio (vgdisplay, pvdisplay, lvdisplay, cat /proc/mdstat, e2fsck).

9 Lista de verificación por rol

Administrador de sistemas (antes de empezar):

  • Copia de seguridad reciente confirmada.
  • Acceso a consola física o KVM.
  • Live-CD/entorno de rescate disponible.
  • Documentación de particionado original y mdadm.conf.

Técnico de almacenamiento (durante la operación):

  • Confirmar dispositivos con lsblk, blkid, mdadm –detail.
  • Ejecutar e2fsck antes de reducir FS.
  • Monitorizar /proc/mdstat durante resync.
  • Registrar timestamps y outputs críticos.

Operador de cambio (post-operación):

  • Comprobar logs de kernel por I/O errors.
  • Verificar fstab y UUIDs si se recrearon LVs.
  • Monitorizar rendimiento y estabilidad 24–48 horas.

10 Playbook (SOP) condensado

  1. Planificar ventana de mantenimiento.
  2. Hacer backup y snapshot si procede.
  3. Arrancar Live-CD si el FS raíz se va a tocar.
  4. Cargar módulos md y levantar arreglos.
  5. e2fsck en los FS a modificar.
  6. resize2fs (reduce FS) -> lvreduce -> pvresize (setphysicalvolumesize) -> mdadm –grow –size.
  7. pvresize para ajustar PV a nuevo md.
  8. lvcreate/mkswap si recreaste swap.
  9. lvextend + resize2fs si quieres recuperar espacio.
  10. e2fsck final y reinicio.
  11. Validación: mdstat, vgdisplay, lvdisplay, pvdisplay, df -h.

11 Criterios de aceptación

  • /dev/md1 reporta el tamaño esperado en /proc/mdstat.
  • vgdisplay y pvdisplay muestran el PV/VG con los tamaños esperados.
  • lvdisplay muestra LVs en estado “available” y tamaños correctos.
  • Los sistemas de archivos pasan e2fsck -f sin errores.
  • Si se reemplazó un disco: resync completado y estado [UU] en mdstat.

12 Casos de prueba y aceptación

  • Caso 1: Reducción en entorno de prueba. Validar que el FS no pierde datos tras reducir de 4.5G a 3.7G.
  • Caso 2: Arreglo degradado con sectores finales dañados. Reducir dejando fuera esos sectores y reconstruir con disco nuevo.
  • Caso 3: Error durante mdadm –grow; comprobar rollback (revertir cambios solo si tienes snapshot/backup).

Criterios de éxito: integridad de datos verificada y sistema arrancando en modo normal.

13 Runbook de incidente y rollback

Si la operación falla o detectas corrupción:

  1. Detener y documentar: no reiniciar innecesariamente.
  2. Restaurar desde copia de seguridad completa (si existe) o desde snapshot.
  3. Si solo hay un LV afectado, intenta p2v (si procede) o montar el LV en modo “ro” en otro host para extraer datos.
  4. Si el MD está en mal estado y hay sectores defectuosos, reemplaza la unidad y reconstruye desde el espejo sano.

Importante: Tener imágenes ddrescue puede permitir recuperar estructura LVM y datos parciales.

14 Mini-glosario (1 línea por término)

  • RAID1: espejo de discos.
  • mdadm: herramienta para gestionar arreglos RAID por software en Linux.
  • LVM: gestor de volúmenes lógicos (PV, VG, LV).
  • pvresize: ajusta el tamaño del PV.
  • mdadm –grow: cambia el tamaño/parametrización de un MD existente.

15 Buenas prácticas y notas finales

  • Mantén mdadm.conf actualizado.
  • Usa etiquetas y UUIDs en fstab para evitar confusiones si cambian los dispositivos.
  • Revisa SMART periódicamente para detectar discos con sectores en remapeo.
  • Practica estos procedimientos en entornos no productivos antes de aplicarlos en producción.

Resumen: Reducir y ampliar arreglos RAID con LVM requiere trabajar con cuidado en la secuencia FS -> LV -> PV -> MD y viceversa. Con planificación, backups y monitorización podrás excluir sectores defectuosos, reemplazar discos y recuperar un arreglo sano.

Fin del artículo.

Autor
Edición

Materiales similares

Instalar Ubuntu 8.04 con RAID1 por software
Linux

Instalar Ubuntu 8.04 con RAID1 por software

Crear arreglos RAID y ajustar sistema RAID1
Sysadmin

Crear arreglos RAID y ajustar sistema RAID1

Beeftext: ahorrar tiempo con snippets de texto
Productividad

Beeftext: ahorrar tiempo con snippets de texto

Cómo desbloquear un iPhone si olvidaste el código
Soporte técnico

Cómo desbloquear un iPhone si olvidaste el código

Redimensionar RAID1 con LVM: Reducir y Ampliar
DevOps

Redimensionar RAID1 con LVM: Reducir y Ampliar

Ver archivos abiertos recientemente en Windows
Guía técnica

Ver archivos abiertos recientemente en Windows