TL;DR — Resumen Rápido
Guía LVM para Linux: extiende volúmenes lógicos, agrega discos, amplía sistemas de archivos y expande particiones raíz en VMs de nube sin reinicio.
Gestionar almacenamiento en servidores Linux de producción significa que tarde o temprano enfrentarás un disco lleno. El Logical Volume Manager (LVM) fue diseñado exactamente para ese momento: te permite extender, reducir, crear snapshots y migrar almacenamiento en línea, a menudo sin ningún tiempo de inactividad. Esta guía cubre el flujo de trabajo completo de LVM, desde los fundamentos de la arquitectura hasta la expansión de la partición raíz en VMs de nube, con comandos reales que puedes ejecutar de inmediato.
Requisitos Previos
Antes de comenzar, asegúrate de tener:
- Un sistema Linux con
lvm2instalado (apt install lvm2odnf install lvm2) - Acceso root o sudo
- Familiaridad básica con los dispositivos de bloque de Linux (
lsblk,fdisk,df) - Para escenarios de nube: capacidad de redimensionar el disco en el Portal de Azure o la consola de AWS antes de tocar Linux
Arquitectura LVM: PV → VG → LV
LVM añade tres capas de abstracción entre los discos físicos y el sistema de archivos:
| Capa | Prefijo de comando | Descripción |
|---|---|---|
| Volumen Físico (PV) | pv* | Un disco o partición sin procesar inicializado para LVM (pvcreate) |
| Grupo de Volúmenes (VG) | vg* | Un pool de uno o más PVs (vgcreate, vgextend) |
| Volumen Lógico (LV) | lv* | Una porción del espacio del VG que actúa como partición (lvcreate, lvextend) |
El sistema de archivos (ext4, XFS, etc.) vive dentro de un LV. El SO ve el LV como un dispositivo de bloque (p. ej. /dev/myvg/data) y no tiene conocimiento de los discos físicos subyacentes. Esta indirección es lo que permite el redimensionamiento en línea y la migración transparente entre discos.
Verificar el Diseño LVM Actual
Siempre comienza por entender lo que tienes:
# Listar todos los Volúmenes Físicos
pvs
# Listar todos los Grupos de Volúmenes
vgs
# Listar todos los Volúmenes Lógicos
lvs
# Detalle completo de un VG específico
vgdisplay myvg
# Detalle completo de un LV específico
lvdisplay /dev/myvg/mylv
# Mostrar árbol de dispositivos de bloque (discos → particiones → LVs)
lsblk
# Mostrar uso de sistemas de archivos montados
df -h
La columna PFree en la salida de pvs muestra el espacio no asignado en el VG — esto es de donde toma lvextend.
Agregar un Nuevo Disco como Volumen Físico
Cuando conectas un nuevo disco (p. ej. /dev/sdb en una VM, o un nuevo EBS/disco gestionado), inicialízalo como PV:
# Confirmar que el kernel ve el nuevo disco
lsblk
# Inicializar el disco como Volumen Físico
pvcreate /dev/sdb
# Verificar
pvs
No necesitas particionar el disco primero — usar el disco completo (/dev/sdb) es válido y más simple. Si necesitas una partición, créala primero con fdisk o parted y usa /dev/sdb1.
Extender el VG y el LV
Paso 1 — Agregar el PV al VG
vgextend myvg /dev/sdb
Paso 2 — Extender el LV
Consumir todo el espacio libre restante del VG:
lvextend -l +100%FREE /dev/myvg/mylv
Agregar una cantidad fija (p. ej. 10 GB):
lvextend -L +10G /dev/myvg/mylv
El flag -r combina lvextend con el redimensionamiento del sistema de archivos en un solo paso (funciona para ext4 y XFS):
lvextend -l +100%FREE -r /dev/myvg/mylv
Redimensionar el Sistema de Archivos
Después de extender el LV, hay que informar al sistema de archivos sobre el nuevo espacio. Este paso es seguro sobre un sistema de archivos montado y en uso.
ext4 (mayoría de sistemas Ubuntu/Debian)
resize2fs /dev/myvg/mylv
No se necesita argumento de tamaño — resize2fs llena todo el LV. Puede ejecutarse con el sistema de archivos montado.
XFS (mayoría de sistemas RHEL/CentOS/Rocky)
XFS usa el punto de montaje, no el dispositivo:
xfs_growfs /mountpoint
# o para la raíz:
xfs_growfs /
Importante: XFS solo puede crecer, nunca reducirse. Intentar reducir un sistema de archivos XFS no está soportado.
Extender la Partición Raíz en VMs de Nube (Sin Reinicio)
Este es el escenario más común en el mundo real. Tienes una VM de nube (Azure o AWS) cuyo disco del SO está quedándose sin espacio. Esta es la secuencia completa — sin reinicio necesario.
1. Redimensionar el disco en la consola de nube
- Azure: Almacenamiento → Discos → seleccionar el disco del SO → Tamaño de disco → aumentar → Guardar
- AWS: EC2 → Volumes → Modify Volume → establecer nuevo tamaño → Modify
Espera a que el redimensionamiento se complete antes de continuar.
2. Extender la partición en el lado Linux
# Confirmar que el kernel ve el nuevo tamaño
lsblk
# Ampliar la partición (p. ej. partición 2 en /dev/sda)
sudo growpart /dev/sda 2
# Verificar que la partición es ahora más grande
lsblk
growpart está en el paquete cloud-utils o cloud-guest-utils. Extiende la partición sin destruir datos.
3. Informar a LVM sobre el nuevo tamaño del PV
sudo pvresize /dev/sda2
4. Extender el LV
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
Reemplaza ubuntu-vg / ubuntu-lv con los nombres reales del VG y LV de lvs.
5. Ampliar el sistema de archivos
Para ext4:
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
Para XFS:
sudo xfs_growfs /
6. Confirmar
df -h /
El sistema de archivos raíz ahora muestra el tamaño expandido. No se necesitó ningún reinicio.
Reducir un Volumen Lógico (Peligroso — Solo ext4)
Reducir es más arriesgado que extender y solo debe hacerse cuando tienes una copia de seguridad reciente. XFS no puede reducirse — este procedimiento aplica solo a ext4.
# 1. Desmontar el sistema de archivos (la raíz no puede reducirse en vivo)
umount /dev/myvg/data
# 2. Verificar y reparar el sistema de archivos antes de reducir
e2fsck -f /dev/myvg/data
# 3. Reducir el sistema de archivos PRIMERO (al tamaño objetivo, p. ej. 20G)
resize2fs /dev/myvg/data 20G
# 4. Reducir el LV para que coincida (debe ser >= tamaño del sistema de archivos)
lvreduce -L 20G /dev/myvg/data
# 5. Montar nuevamente
mount /dev/myvg/data /mnt/data
Advertencia: Siempre reduce el sistema de archivos antes que el LV. Reducir el LV primero destruye datos al truncar el sistema de archivos.
Snapshots LVM
Los snapshots capturan el estado de un LV en un momento dado. Son invaluables antes de operaciones arriesgadas (actualizaciones del SO, migraciones de bases de datos).
# Crear un snapshot de 5 GB de /dev/myvg/mylv
lvcreate --snapshot -L 5G -n mylv_snap /dev/myvg/mylv
# Montar el snapshot en solo lectura para inspección
mount -o ro /dev/myvg/mylv_snap /mnt/snapshot
# Revertir (combinar el snapshot con el origen)
lvconvert --merge /dev/myvg/mylv_snap
# Eliminar el snapshot sin revertir
lvremove /dev/myvg/mylv_snap
Los snapshots son CoW (Copy-on-Write): solo consumen espacio a medida que el LV de origen cambia. Mantén el LV del snapshot más pequeño que las escrituras esperadas durante su vida útil.
Mover Datos Entre Volúmenes Físicos
pvmove migra extensiones entre PVs mientras el LV permanece en línea. Úsalo para vaciar un disco antes de eliminarlo.
# Mover todas las extensiones de /dev/sdb a cualquier otro PV en el VG
pvmove /dev/sdb
# Mover extensiones de un LV específico únicamente
pvmove -n /dev/myvg/mylv /dev/sdb /dev/sdc
# Monitorear progreso
lvs -a -o name,copy_percent
Después de que pvmove complete:
# Eliminar el PV del VG
vgreduce myvg /dev/sdb
# Eliminar metadatos LVM del disco
pvremove /dev/sdb
LVM vs ZFS vs Btrfs vs Particiones Simples
| Característica | LVM | ZFS | Btrfs | Particiones simples |
|---|---|---|---|---|
| Extensión en línea | Sí | Sí | Sí | No |
| Reducción en línea | Solo ext4 (desmontar) | No | Sí | No |
| Snapshots | Sí (CoW) | Sí (CoW) | Sí (CoW) | No |
| RAID integrado | Via dm-raid | Sí | Sí (limitado) | Via mdadm |
| Compresión transparente | No | Sí | Sí | No |
| Autocorrección (checksums) | No | Sí | Parcial | No |
| Complejidad | Media | Alta | Media | Baja |
| Soporte por distro | Universal | Ubuntu/Proxmox | Fedora/openSUSE | Universal |
| Predeterminado en nube | Sí (RHEL/Ubuntu) | Solo Proxmox | Solo Fedora | Heredado |
Cuándo usar LVM: Necesitas redimensionamiento flexible en distros estándar sin aprender un nuevo modelo de almacenamiento.
Cuándo usar ZFS: Necesitas checksums, RAID integrado o compresión y estás en Ubuntu o un dispositivo de almacenamiento.
Errores Comunes
- Reducir el sistema de archivos después del LV destruye datos. Siempre reduce el sistema de archivos primero.
- Snapshot lleno = snapshot inválido. Monitorea el uso con
lvsy expande si es necesario. - XFS no puede reducirse. Intentarlo falla con un error claro.
- Olvidar
pvresizedespués de redimensionar el disco de nube significa que LVM sigue viendo el tamaño antiguo del PV. - Thin pools LVM tienen herramientas separadas. El sobreaprovisionamiento sin monitoreo causa pérdida silenciosa de datos al agotar el pool.
Resumen
- LVM añade tres capas (PV, VG, LV) que permiten gestión de almacenamiento flexible en línea.
- Usa
pvs / vgs / lvsylsblkpara auditar el diseño actual antes de hacer cambios. - Extender siempre es seguro:
pvcreate → vgextend → lvextend → resize2fs / xfs_growfs. - La expansión de la raíz en VMs de nube requiere
growpart → pvresize → lvextend → resize2fssin reinicio. - Reducir solo es posible en ext4 y requiere desmontar; siempre haz una copia de seguridad antes.
- Los snapshots son capturas CoW baratas — toma uno antes de cada cambio importante.
- XFS solo crece; ZFS y Btrfs ofrecen funciones más ricas con mayor complejidad.