Cómo redimensionar particiones RAID1 de software 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
- Arranca un sistema de rescate si vas a redimensionar la partición raíz.
- Carga módulos necesarios:
modprobe md
modprobe linear
modprobe multipath
modprobe raid0
modprobe raid1
modprobe raid5
modprobe raid6
modprobe raid10
- 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
- Inicia LVM:
/etc/init.d/lvm start
- Antes de cualquier cambio, comprueba el sistema de archivos y la integridad del LV que vas a modificar:
e2fsck -f /dev/server1/root
- 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:
- Ejecuta e2fsck en el LV:
e2fsck -f /dev/server1/root
- 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.
- Reduce el LV a un tamaño ligeramente mayor que el FS (ej. 2.5G):
lvreduce -L2.5G /dev/server1/root
- 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.
- Reduce el PV al tamaño deseado (3G en el ejemplo) usando pvresize –setphysicalvolumesize:
pvresize --setphysicalvolumesize 3G /dev/md1
- 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
- Ajusta el PV para usar el nuevo máximo disponible (si quieres expandir hasta el máximo disponible):
pvresize /dev/md1
- Reconstruye el LV swap si lo habías eliminado:
lvcreate --name swap_1 -l 66 server1
mkswap /dev/server1/swap_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
- Ejecuta e2fsck final:
e2fsck -f /dev/server1/root
- 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:
Identifica las fallas en dmesg / syslog para localizar el offset aproximado del fallo (sectores). No uses valores exactos sin entender la geometría.
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.
Añade la partición del disco reemplazado al arreglo:
mdadm --add /dev/md1 /dev/sda5
- Supervisa la resynchronización:
watch -n 5 cat /proc/mdstat
- 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
- 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
- Planificar ventana de mantenimiento.
- Hacer backup y snapshot si procede.
- Arrancar Live-CD si el FS raíz se va a tocar.
- Cargar módulos md y levantar arreglos.
- e2fsck en los FS a modificar.
- resize2fs (reduce FS) -> lvreduce -> pvresize (setphysicalvolumesize) -> mdadm –grow –size.
- pvresize para ajustar PV a nuevo md.
- lvcreate/mkswap si recreaste swap.
- lvextend + resize2fs si quieres recuperar espacio.
- e2fsck final y reinicio.
- 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:
- Detener y documentar: no reiniciar innecesariamente.
- Restaurar desde copia de seguridad completa (si existe) o desde snapshot.
- Si solo hay un LV afectado, intenta p2v (si procede) o montar el LV en modo “ro” en otro host para extraer datos.
- 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.
Materiales similares
Instalar Ubuntu 8.04 con RAID1 por software
Crear arreglos RAID y ajustar sistema RAID1

Beeftext: ahorrar tiempo con snippets de texto

Cómo desbloquear un iPhone si olvidaste el código
Redimensionar RAID1 con LVM: Reducir y Ampliar
