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

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