TL;DR — Resumen Rápido

Guía completa de LVM en Linux: extiende volúmenes lógicos, añade discos, crece filesystems ext4/XFS, thin provisioning, snapshots y VMs en la nube.

LVM (Logical Volume Manager) es la capa de abstracción de almacenamiento estándar en Linux que permite redimensionar, crear instantáneas y migrar espacio en disco sin interrumpir el servicio. Esta guía cubre el flujo completo de LVM: arquitectura, adición de discos, extensión de volúmenes lógicos, crecimiento y reducción de filesystems, thin provisioning, snapshots, extensión en VMs en la nube y los errores más comunes en producción.

Requisitos Previos

  • Sistema Linux con el paquete lvm2 instalado (sudo apt install lvm2 o sudo dnf install lvm2).
  • Acceso root o sudo.
  • Al menos un grupo de volúmenes LVM existente, o un disco para inicializar desde cero.
  • Familiaridad básica con particionado de discos en Linux (fdisk, lsblk, df).

Arquitectura LVM

LVM introduce tres capas de abstracción entre los discos físicos y los filesystems montados:

CapaPrefijo de comandoDescripción
Volumen Físico (PV)pv*Disco o partición inicializada para uso con LVM
Grupo de Volúmenes (VG)vg*Reserva de almacenamiento formada por uno o más PVs
Volumen Lógico (LV)lv*Dispositivo de bloques virtual extraído del espacio libre del VG

Los Physical Extents (PE) son la unidad mínima de asignación dentro de un VG (4 MiB por defecto). Cada LV es un rango de PEs. Esta abstracción permite que los LVs abarquen múltiples discos y se redimensionen en cualquier momento.

La pila de almacenamiento se ve así:

/dev/sda1  /dev/sdb1  /dev/sdc    ← discos físicos / particiones
    └─── pvcreate ───────────┘

     Grupo de Volúmenes (vg_data)  ← reserva de PEs

  lv_root  lv_home  lv_db          ← volúmenes lógicos (dispositivos de bloque)

  ext4     ext4     xfs            ← filesystems sobre los LVs

Ver el Diseño Actual

lsblk — árbol de dispositivos de bloque

lsblk
# NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
# sda               8:0    0   50G  0 disk
# ├─sda1            8:1    0    1G  0 part /boot
# └─sda2            8:2    0   49G  0 part
#   ├─vg_sys-lv_root 253:0  0   20G  0 lvm  /
#   └─vg_sys-lv_home 253:1  0   29G  0 lvm  /home

pvdisplay, vgdisplay, lvdisplay

pvdisplay          # volúmenes físicos: disco, tamaño, PEs usados/libres
vgdisplay          # grupos de volúmenes: PEs totales / usados / libres
lvdisplay          # volúmenes lógicos: ruta, tamaño, tipo de filesystem

Comandos rápidos:

pvs     # resumen compacto de PVs
vgs     # resumen compacto de VGs (fíjate en VFree para el espacio disponible)
lvs     # resumen compacto de LVs
df -h   # uso de filesystems (lo que ve el sistema operativo)

Añadir un Nuevo Disco a LVM

Es la operación más común en producción: una VM recibe un disco nuevo y quieres añadir esa capacidad a un VG existente.

Paso 1 — Particionar el nuevo disco

fdisk /dev/sdb
# Dentro de fdisk:
# n   → nueva partición
# p   → primaria
# 1   → número de partición
# [Enter] dos veces → usar todo el disco
# t   → cambiar tipo
# 8e  → Linux LVM
# w   → escribir y salir

Para discos GPT (>2 TB o sistemas UEFI) usa gdisk o parted. Establece el tipo de partición en Linux LVM.

Paso 2 — Inicializar el volumen físico

pvcreate /dev/sdb1
# Physical volume "/dev/sdb1" successfully created.

Paso 3 — Extender el grupo de volúmenes

vgextend vg_sys /dev/sdb1
# Volume group "vg_sys" successfully extended
vgs    # confirma que VFree ha aumentado

Paso 4 — Extender el volumen lógico

# Añadir exactamente 20 GB
lvextend -L +20G /dev/vg_sys/lv_root

# O consumir TODO el espacio libre del VG
lvextend -l +100%FREE /dev/vg_sys/lv_root

Paso 5 — Redimensionar el filesystem

ext4 (en caliente, sin desmontar):

resize2fs /dev/vg_sys/lv_root

XFS (en caliente, usar punto de montaje):

xfs_growfs /

Extender un LV con Espacio Libre en el VG

Si ya tienes PEs libres en el VG (visibles en vgs bajo VFree), omites los pasos de añadir disco y vas directamente a lvextend:

vgs
# VG      #PV #LV #SN Attr   VSize   VFree
# vg_data   2   3   0 wz--n- 200.00g 45.00g   ← 45 GB libres

lvextend -L +30G /dev/vg_data/lv_db
resize2fs /dev/vg_data/lv_db    # ext4
# o
xfs_growfs /var/lib/mysql        # XFS

Puedes combinar lvextend y resize2fs en un solo comando con la opción -r:

lvextend -L +30G -r /dev/vg_data/lv_db

La opción -r llama automáticamente a la herramienta de redimensión adecuada tras extender el LV.


Redimensión en Caliente vs. Fuera de Línea

Filesystem¿Crecer en caliente?¿Reducir en caliente?Notas
ext4No — hay que desmontarEl más flexible; soporta crecer y reducir
XFSNuncaXFS no puede reducirse — por diseño
BtrfsCrecimiento y reducción en caliente
ext3NoHeredado; preferir ext4
swapNoNoswapoff, redimensionar LV, mkswap, swapon

Reducir un Volumen Lógico (Solo ext4 — Peligroso)

Reducir es irreversible si se hace mal. Haz siempre una copia de seguridad. XFS no puede reducirse.

# 1. Desmontar el filesystem
umount /dev/vg_data/lv_home

# 2. Comprobar y reparar el filesystem ANTES de redimensionar
e2fsck -f /dev/vg_data/lv_home

# 3. Reducir el filesystem al tamaño objetivo (debe ser menor que el LV)
resize2fs /dev/vg_data/lv_home 50G

# 4. Reducir el volumen lógico para que coincida (debe ser >= tamaño del filesystem)
lvreduce -L 50G /dev/vg_data/lv_home

# 5. Volver a montar y verificar
mount /dev/vg_data/lv_home /home
df -h /home

Regla crítica: ejecuta siempre resize2fs para reducir el filesystem ANTES de lvreduce. Reducir el LV primero trunca datos y corrompe el filesystem.


Thin Provisioning

El thin provisioning permite sobrecomprometer el almacenamiento — asignar más espacio a los LVs del que existe físicamente en el VG.

# Crear un thin pool (100 GB en un VG que puede tener solo 50 GB libres en disco)
lvcreate --thin -L 100G vg_data/thin_pool

# Crear thin LVs desde el pool
lvcreate --thin -V 30G --name lv_web vg_data/thin_pool
lvcreate --thin -V 30G --name lv_db  vg_data/thin_pool

# Monitorizar el uso real del pool
lvs -a vg_data
# Data%  muestra qué tan lleno está el pool — alerta al 80%, actúa al 90%

Advertencia: si el thin pool se llena por completo, todos los LVs del pool pasan a solo lectura. Monitoriza el uso con lvs.


Snapshots LVM

Las instantáneas capturan el estado de un LV en un momento dado usando copy-on-write. Son la forma más rápida de hacer una copia de seguridad consistente de un servidor en producción.

# Crear una instantánea de 5 GB de lv_root
lvcreate --snapshot -n lv_root_snap -L 5G /dev/vg_sys/lv_root

# Montar la instantánea en solo lectura para backup
mount -o ro /dev/vg_sys/lv_root_snap /mnt/snap
tar -czf /backup/root-$(date +%Y%m%d).tar.gz -C /mnt/snap .
umount /mnt/snap

# Eliminar la instantánea cuando hayas terminado
lvremove /dev/vg_sys/lv_root_snap

Fusionar una instantánea (rollback)

# Revertir lv_root al estado de la instantánea en el próximo arranque
lvconvert --merge /dev/vg_sys/lv_root_snap
reboot

LVM en VMs en la Nube

Cuando extiendes un disco en Azure, AWS o GCP, el SO ve el disco más grande pero el PV sigue reportando el tamaño antiguo. Usa pvresize para actualizar la vista de LVM:

# Ejemplo Azure: disco extendido de 30 GB a 50 GB en el portal
lsblk        # /dev/sda debe mostrar 50G

# Redimensionar la partición si es necesario
sudo growpart /dev/sda 2

# Informar a LVM que el PV es ahora más grande
pvresize /dev/sda2

# Confirmar que apareció espacio libre en el VG
vgs

# Extender el LV y crecer el filesystem
lvextend -l +100%FREE -r /dev/vg_sys/lv_root

Errores Comunes

Mensaje de errorCausaSolución
Insufficient free spaceNo hay suficientes PEs en el VGAñade un nuevo PV con pvcreate + vgextend, o usa -l +100%FREE
Can't reduce LV below used spaceEl objetivo de resize2fs es menor que los datos realesEjecuta e2fsck -f primero, luego reduce el filesystem antes de lvreduce
Filesystem not showing new sizeresize2fs / xfs_growfs no ejecutados tras lvextendEjecuta resize2fs /dev/vg/lv o xfs_growfs /puntomontaje
Device /dev/sdX not foundTabla de particiones no re-leídaEjecuta partprobe /dev/sdX y reintenta pvcreate
WARNING: snapshot is fullEspacio COW agotadoAmplía la instantánea: lvextend -L +2G /dev/vg/snap o recréala

LVM vs ZFS vs Btrfs vs mdadm vs Particiones Simples

CaracterísticaLVMZFSBtrfsmdadmParticiones simples
Redimensión en calienteLimitadoNo
InstantáneasSí (COW)Sí (COW)Sí (COW)NoNo
RAIDSí (nativo)No
CompresiónNoNoNo
Thin provisioningParcialNoNo
Curva de aprendizajeMediaAltaMediaMediaBaja
Ideal paraServidores Linux generalesNAS, FreeBSDDesktop, FedoraRAID heredadoDisco único simple

Resumen

  • LVM añade la abstracción PV → VG → LV: redimensiona y mueve almacenamiento sin reiniciar.
  • Usa pvdisplay, vgdisplay, lvdisplay y vgs para entender el diseño actual.
  • Añadir capacidad: pvcreatevgextendlvextendresize2fs o xfs_growfs.
  • Crecer ext4 y XFS es siempre en caliente y seguro; usa -r en lvextend para un solo paso.
  • Reducir requiere desmontar + e2fsck + resize2fs antes de lvreduce. XFS no puede reducirse.
  • El thin provisioning permite sobrecomprometer; monitoriza el uso del pool con lvs.
  • Las instantáneas son backups COW rápidos; dimensiónalas generosamente.
  • En VMs en la nube, usa pvresize tras extender el disco en el portal.

Artículos Relacionados