Reducir un array RAID degradado (/dev/md1)
Contexto y objetivo
Este documento explica cómo reducir el tamaño de un array RAID degradado (/dev/md1) compuesto por /dev/sda5 y /dev/sdb5 cuando /dev/sda5 ha fallado. Además cubre el ajuste de los volúmenes LVM y la recreación del swap. Está dirigido a administradores de sistemas con experiencia básica en mdadm y LVM.
Definición rápida: un array degradado significa que uno o más dispositivos RAID están ausentes o marcados como defectuosos; el array sigue funcionado con capacidad reducida, pero las operaciones de cambio en su tamaño requieren precaución.
Diagnóstico inicial
Estos son los comandos y salidas originales que describen el estado del sistema. Mantengo los bloques tal cual para que puedas comparar con tu sistema.
cat /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:~#
df -h
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:~#
pvdisplay
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:~#
vgdisplay
server1:~# vgdisplay
--- Volume group ---
VG Name server1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 9
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 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
VG UUID X3ZYTy-39yq-20k7-GCGk-vKVU-Xe0i-REdEu0
server1:~#
lvdisplay
server1:~# lvdisplay
--- Logical volume ---
LV Name /dev/server1/root
VG Name server1
LV UUID 3ZgGnd-Sq1s-Rchu-92b9-DpAX-mk24-0aOMm2
LV Write Access read/write
LV Status available
# open 1
LV Size 4.50 GB
Current LE 1151
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:0
--- Logical volume ---
LV Name /dev/server1/swap_1
VG Name server1
LV UUID KM6Yq8-jQaQ-rkP8-6f4t-zrXA-Jk13-yFrWi2
LV Write Access read/write
LV Status available
# open 2
LV Size 264.00 MB
Current LE 66
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:1
server1:~#
Observaciones: el PV está en /dev/md1 (4.75 GB) y los LVs ocupan casi todo ese PV. El array md1 aparece como degradado ([2/1] [_U]). Antes de redimensionar, hay que asegurarse de que el dispositivo fallado está formalmente fuera del array y que la metadata de ese dispositivo se ha limpiado.
Procedimiento detallado paso a paso
Advertencia importante: estas operaciones pueden dejar el sistema inservible si se equivocan. Hacer copia de seguridad de datos críticos o probar el procedimiento en una máquina de laboratorio antes de aplicarlo en producción.
- Marcar y eliminar el dispositivo fallado del array
- Marcar /dev/sda5 como defectuoso y eliminarlo del array:
mdadm --manage /dev/md1 --fail /dev/sda5
mdadm --manage /dev/md1 --remove /dev/sda5
- Sobrescribir el superblock de /dev/sda5. Esto evita que el sistema intente reañadirlo automáticamente y que al arrancar el equipo el array quede confuso tras el redimensionado. Es crítico:
mdadm --zero-superblock /dev/sda5
Nota: si piensas volver a usar /dev/sda5 en el futuro para reconstruir el array, no olvides que tendrás que crear de nuevo la metadata apropiada cuando la vuelvas a añadir.
- Arrancar en un sistema de rescate y cargar módulos necesarios
Arranca con un live-CD o un entorno rescue y activa los módulos del kernel necesarios:
modprobe md
modprobe linear
modprobe multipath
modprobe raid0
modprobe raid1
modprobe raid5
modprobe raid6
modprobe raid10
- Activar arrays y LVM
Realiza una copia del fichero de configuración mdadm y recalcula la configuración detectada:
cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
mdadm -A --scan
Arranca los servicios LVM (o ejecuta los comandos equivalentes en tu entorno):
/etc/init.d/lvm start
- Verificar y reducir el sistema de ficheros del LV raíz
- Verifica el sistema de ficheros antes de reducirlo:
e2fsck -f /dev/server1/root
- El ejemplo requiere reducir el array md1 de ~5GB a 4GB. Para ello primero reducimos el sistema de ficheros dentro del LV /dev/server1/root a 2GB. Escoge un tamaño seguro que sea mayor que la cantidad de datos realmente almacenados:
resize2fs /dev/server1/root 2G
- Reducir el LV raíz
- Reduce el LV que contiene el sistema de ficheros:
lvreduce -L2.5G /dev/server1/root
Explicación: el sistema de ficheros queda en 2GB y el LV en 2.5GB para dejar espacio de seguridad.
- Eliminar o ajustar el LV swap si está al final
- Si el LV swap ocupa la última área del PV (como en este ejemplo), elimínalo para poder reducir el PV. Si swap no está al final, asegúrate de que el último LV del PV se reduce lo suficiente para liberar espacio contiguo.
lvremove /dev/server1/swap_1
- Reducir el PV al nuevo tamaño físico del RAID
- En este ejemplo reducimos el PV (el disco físico lógico /dev/md1) a 3GB:
pvresize --setphysicalvolumesize 3G /dev/md1
- Reducir el tamaño del array md1 con mdadm
- El parámetro –size de mdadm debe darse en KiB y ser divisible por 64. Para 4 GiB: 4 1024 1024 = 4194304 KiB.
mdadm --grow /dev/md1 --size=4194304
- Volver a expandir el PV al máximo en el nuevo dispositivo reducido
- Si quieres que LVM use todo el espacio disponible tras el cambio, haz:
pvresize /dev/md1
- Recrear LVs necesarios y ajustar tamaños
- Ahora verás espacio libre en el VG; recrea el swap con el número de PE requerido (66 en el ejemplo):
lvcreate --name swap_1 -l 66 server1
mkswap /dev/server1/swap_1
- Comprueba el estado del VG:
vgdisplay
- Extiende el LV raíz con los PE libres si lo deseas:
lvextend -l +317 /dev/server1/root
- Ajusta el sistema de ficheros a su nuevo tamaño máximo posible:
resize2fs /dev/server1/root
- Vuelve a comprobar el sistema de ficheros:
e2fsck -f /dev/server1/root
- Reiniciar sistema y reañadir el disco reemplazado
- Arranca el sistema normalmente y, cuando hayas reparado o reemplazado /dev/sda5, limpia su superblock y añádelo al array:
mdadm --zero-superblock /dev/sda5
mdadm -a /dev/md1 /dev/sda5
- Revisa la sincronización:
cat /proc/mdstat
Deberías ver el proceso de resync entre /dev/sdb5 y /dev/sda5.
Lista de comprobación rápida (antes de empezar)
- Copia de seguridad de datos críticos disponible.
- El disco defectuoso está marcado y eliminado del array.
- El superblock del disco eliminado fue limpiado con –zero-superblock.
- Arranque en entorno de rescate probado y módulos md/lvm disponibles.
- Espacio suficiente en LVs para reducirlos con seguridad (comprobar uso real con du -sh).
- Registro de los tamaños actuales y PE disponibles.
Criterios de aceptación
- El array /dev/md1 está reducido a 4GB y funciona sin errores.
- El VG y LVs están en un estado coherente; lvdisplay y vgdisplay muestran tamaños correctos.
- El sistema de ficheros raíz monta correctamente después del reinicio y pasa e2fsck.
- El disco reemplazado se reconstruye correctamente al array y finaliza el resync.
Riesgos y mitigaciones
Riesgo | Impacto | Mitigación |
---|---|---|
Reducir demasiado el sistema de ficheros | Pérdida de datos al truncar inodes | Estimar uso real con du, dejar margen de seguridad y hacer backup |
Olvidar zero-superblock antes de reboot | Sistema puede no arrancar o reañadir dispositivo viejo | Siempre ejecutar mdadm –zero-superblock en el disco eliminado |
Ejecutar comandos en el dispositivo equivocado | Daño irreversible | Confirmar rutas con lsblk y blkid antes de cada operación |
Interrumpir resync | Array degradado temporalmente | Planificar ventanas de mantenimiento y seguir monitoreo con cat /proc/mdstat |
Alternativas y cuándo elegir otra estrategia
- Si dispones de tiempo y hardware de repuesto, la opción más segura es reconstruir el array en un nuevo disco antes de tocar tamaños.
- Si no puedes permitir arrancar en modo rescate, considera usar herramientas en caliente (siempre que el array no esté usando el dispositivo fallado) y tener snapshots y copias fuera de línea.
- Para escenarios con RAID5/6 o arrays más complejos, la estrategia de reducir puede cambiar: en RAID con striping hay que considerar la geometría y el riesgo es mayor.
Cuándo este procedimiento falla (contraejemplos)
- Si el LV que quieres reducir no se puede reducir porque los datos están físicamente al final del LV (bloques usados), resize2fs fallará.
- Si el PV está completamente lleno y no es posible liberar espacio porque no hay LV que puedas eliminar ni reducir, no podrás reducir el PV.
- Si el array está en un estado crítico (metadata corrupta) puede que mdadm no permita cambios hasta que se restaure el estado previo.
Flujo de decisión (diagrama)
flowchart TD
A[¿El array está degradado?] -->|Sí| B[Marcar y remover disco fallado]
A -->|No| Z[Considerar reproducir procedimiento en ventana de mantenimiento]
B --> C[Zero superblock en disco fallado]
C --> D[Arrancar en rescue y cargar módulos]
D --> E[Activar mdadm y LVM]
E --> F[¿Se puede reducir filesystem?]
F -->|Sí| G[resize2fs y lvreduce]
F -->|No| H[Reubicar datos o usar backup]
G --> I[pvresize y mdadm --grow]
I --> J[Recrear swap y extender LV según sea necesario]
J --> K[Reboot y reañadir disco]
Checklist por roles
Administrador LVM:
- Verificar uso real de disco con du -sh / (o bind mounts) antes de reducir filesystem.
- Ejecutar e2fsck antes y después de operaciones de resize.
- Confirmar PE disponible con vgdisplay.
Administrador RAID:
- Marcar disco como fallado y eliminar del array con mdadm.
- Zero-superblock sobre el disco fallado.
- Calcular –size correcto en KiB y que sea divisible por 64.
Operaciones / Soporte:
- Asegurar consola de rescate y acceso físico si se necesita reemplazar hardware.
- Monitorizar resync con cat /proc/mdstat y revisar dmesg/syslog por errores de I/O.
Plantilla de comandos (cheat sheet)
- Fallar y remover disco:
mdadm --manage /dev/md1 --fail /dev/sda5
mdadm --manage /dev/md1 --remove /dev/sda5
mdadm --zero-superblock /dev/sda5
- Activar arrays y LVM en rescue:
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
mdadm -A --scan
/etc/init.d/lvm start
- Verificaciones:
e2fsck -f /dev/server1/root
pvdisplay
vgdisplay
lvdisplay
cat /proc/mdstat
- Reducir filesystem y LV:
resize2fs /dev/server1/root 2G
lvreduce -L2.5G /dev/server1/root
- Ajustar PV y array:
pvresize --setphysicalvolumesize 3G /dev/md1
mdadm --grow /dev/md1 --size=4194304
pvresize /dev/md1
- Recrear swap:
lvcreate --name swap_1 -l 66 server1
mkswap /dev/server1/swap_1
- Extender LV y filesystem final:
lvextend -l +317 /dev/server1/root
resize2fs /dev/server1/root
- Reañadir disco reemplazado:
mdadm --zero-superblock /dev/sda5
mdadm -a /dev/md1 /dev/sda5
cat /proc/mdstat
Criterios de validación y pruebas
- Verificar que cat /proc/mdstat muestra el array activo sin errores y que la sincronización progresa.
- Montar el sistema de ficheros raíz (o comprobar tras reinicio) y correr comandos representativos de I/O.
- Ejecutar e2fsck -f /dev/server1/root y confirmar ausencia de errores.
- Confirmar que el VG tiene suficiente espacio libre para las políticas de crecimiento futuras.
Glosario (línea por término)
- RAID degradado: array con menos dispositivos funcionales que el número mínimo para tolerancia de fallos.
- PV (Physical Volume): volumen físico gestionado por LVM, puede ser partición o dispositivo.
- VG (Volume Group): grupo de PVs que proporciona espacio lógico para LVs.
- LV (Logical Volume): volumen lógico que contiene sistemas de ficheros o swap.
- mdadm: herramienta para administrar arrays de Linux software RAID.
Resumen final
Reducir un array RAID degradado requiere remover primero el disco defectuoso, limpiar su metadata, arrancar en un entorno de rescate y seguir una secuencia ordenada: reducir sistemas de ficheros, reducir LVs, reducir PV, cambiar el tamaño del array con mdadm, recrear LVs necesarios y, finalmente, volver a añadir el disco reemplazado y permitir la resincornización. Planifica, respalda y sigue la lista de comprobación antes de tocar volúmenes en producción.
Importante: si en cualquier paso obtienes errores que no entiendes, no reinicies ni permanezcas sin consultar registros. Parar y obtener una copia de seguridad completa antes de continuar suele ser la decisión más segura.
Materiales similares

Mejorar estimaciones de batería del portátil

Arreglar Espera de llamada que no funciona en iOS 16

Crear Video Overviews en NotebookLM

Detener apps en segundo plano en Android
Reducir array RAID degradado (/dev/md1)
