El particionado tradicional de Linux te obliga a decidir los tamanos de disco en el momento de la instalacion. Necesitas mas espacio en /var seis meses despues? Tendras que respaldar, reparticionar y restaurar. LVM (Logical Volume Manager) elimina esta rigidez anadiendo una capa de abstraccion entre los discos fisicos y los sistemas de archivos, permitiendote redimensionar volumenes, agregar almacenamiento y tomar snapshots en un sistema en ejecucion sin tiempo de inactividad.

Esta guia cubre el flujo de trabajo completo de LVM: crear volumenes fisicos, agruparlos en grupos de volumenes, asignar volumenes logicos y realizar las operaciones de redimensionado y snapshots que hacen de LVM una herramienta indispensable para la administracion de servidores.

Requisitos Previos

Antes de comenzar, asegurate de tener:

  • Un sistema Linux con systemd (Ubuntu 20.04+, Debian 11+, RHEL/CentOS 8+, o similar)
  • Acceso al terminal con privilegios sudo
  • Uno o mas discos o particiones disponibles (dispositivos de bloque sin usar)
  • Conocimiento basico de conceptos de disco en Linux (particiones, sistemas de archivos, puntos de montaje)

Advertencia: Los comandos de esta guia modificaran tablas de particiones y crearan sistemas de archivos. Siempre verifica cuidadosamente los nombres de dispositivos antes de ejecutar comandos. Usar el dispositivo incorrecto puede destruir datos.

Arquitectura de LVM

LVM opera en tres capas:

┌─────────────────────────────────────────┐
│     Sistemas de archivos (ext4, XFS)    │
├─────────────────────────────────────────┤
│      Volumenes Logicos (LV)             │
│      /dev/nombre_vg/nombre_lv           │
├─────────────────────────────────────────┤
│      Grupos de Volumenes (VG)           │
│      Pool de almacenamiento de uno o    │
│      mas volumenes fisicos              │
├─────────────────────────────────────────┤
│      Volumenes Fisicos (PV)             │
│      /dev/sdb, /dev/sdc, etc.           │
├─────────────────────────────────────────┤
│      Discos Fisicos / Particiones       │
└─────────────────────────────────────────┘
  • Volumen Fisico (PV): Un disco o particion inicializado para uso con LVM
  • Grupo de Volumenes (VG): Un pool de almacenamiento creado a partir de uno o mas PVs
  • Volumen Logico (LV): Una particion virtual creada desde un VG, donde creas sistemas de archivos

La ventaja clave es que los VGs pueden abarcar multiples discos fisicos, y los LVs pueden redimensionarse en tiempo real.

Instalacion de LVM

LVM viene preinstalado en la mayoria de las distribuciones de servidor. Verifica o instala:

# Debian/Ubuntu
sudo apt update && sudo apt install lvm2

# RHEL/Fedora/CentOS
sudo dnf install lvm2

# Verificar instalacion
lvm version

Identificar Discos Disponibles

Antes de crear volumenes fisicos, identifica tus dispositivos de bloque disponibles:

# Listar todos los dispositivos de bloque
lsblk

# Mostrar informacion detallada de los discos
sudo fdisk -l

# Verificar que discos ya estan en uso por LVM
sudo pvs

Ejemplo de salida de lsblk mostrando dos discos sin usar:

NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda       8:0    0    50G  0 disk
├─sda1    8:1    0   512M  0 part /boot
└─sda2    8:2    0  49.5G  0 part /
sdb       8:16   0   100G  0 disk
sdc       8:32   0   100G  0 disk

En este ejemplo, sdb y sdc estan disponibles para LVM.

Crear Volumenes Fisicos

Inicializa los discos para uso con LVM:

sudo pvcreate /dev/sdb /dev/sdc

Salida:

  Physical volume "/dev/sdb" successfully created.
  Physical volume "/dev/sdc" successfully created.

Verifica los volumenes fisicos:

# Vista resumida
sudo pvs

# Vista detallada
sudo pvdisplay /dev/sdb

La salida de pvs muestra:

  PV         VG     Fmt  Attr PSize   PFree
  /dev/sdb          lvm2 ---  100.00g 100.00g
  /dev/sdc          lvm2 ---  100.00g 100.00g

Nota: Tambien puedes usar particiones en lugar de discos completos. Por ejemplo, sudo pvcreate /dev/sdb1 funciona si prefieres particionar el disco primero con fdisk o parted. Usar discos completos es mas simple y recomendado cuando todo el disco esta dedicado a LVM.

Crear un Grupo de Volumenes

Combina los volumenes fisicos en un grupo de volumenes:

sudo vgcreate vg_data /dev/sdb /dev/sdc

Salida:

  Volume group "vg_data" successfully created

Verifica el grupo de volumenes:

# Vista resumida
sudo vgs

# Vista detallada
sudo vgdisplay vg_data

La salida de vgs muestra el almacenamiento combinado:

  VG      #PV #LV #SN Attr   VSize   VFree
  vg_data   2   0   0 wz--n- 199.99g 199.99g

Ahora tienes un pool de 200 GB de almacenamiento (de dos discos de 100 GB) que puedes asignar de forma flexible.

Crear Volumenes Logicos

Asigna espacio del grupo de volumenes para crear volumenes logicos:

# Crear un volumen logico de 50 GB para aplicaciones
sudo lvcreate -L 50G -n lv_apps vg_data

# Crear un volumen logico de 30 GB para bases de datos
sudo lvcreate -L 30G -n lv_databases vg_data

# Crear un volumen usando porcentaje del espacio libre restante
sudo lvcreate -l 50%FREE -n lv_logs vg_data

Opciones comunes de tamano:

OpcionSignificadoEjemplo
-L 50GTamano exacto50 gigabytes
-L 500MTamano exacto500 megabytes
-l 100%FREETodo el espacio restanteUsa todo lo que queda
-l 50%VGPorcentaje del VGMitad del grupo de volumenes
-l 50%FREEPorcentaje del libreMitad del espacio restante

Verifica tus volumenes logicos:

# Vista resumida
sudo lvs

# Vista detallada
sudo lvdisplay /dev/vg_data/lv_apps

Formateo y Montaje

Crea sistemas de archivos en los volumenes logicos:

# Formatear con ext4
sudo mkfs.ext4 /dev/vg_data/lv_apps
sudo mkfs.ext4 /dev/vg_data/lv_databases

# O formatear con XFS (preferido para volumenes grandes)
sudo mkfs.xfs /dev/vg_data/lv_logs

Crea puntos de montaje y monta:

sudo mkdir -p /srv/apps /srv/databases /var/log/central

sudo mount /dev/vg_data/lv_apps /srv/apps
sudo mount /dev/vg_data/lv_databases /srv/databases
sudo mount /dev/vg_data/lv_logs /var/log/central

Montaje Persistente con fstab

Agrega entradas a /etc/fstab para que los volumenes se monten automaticamente al arrancar:

# Obtener los UUIDs (mas confiable que las rutas de dispositivo)
sudo blkid /dev/vg_data/lv_apps
sudo blkid /dev/vg_data/lv_databases
sudo blkid /dev/vg_data/lv_logs

Agrega a /etc/fstab:

/dev/vg_data/lv_apps       /srv/apps         ext4 defaults 0 2
/dev/vg_data/lv_databases  /srv/databases    ext4 defaults 0 2
/dev/vg_data/lv_logs       /var/log/central  xfs  defaults 0 2

Consejo: Para volumenes LVM, usar la ruta /dev/nombre_vg/nombre_lv en fstab es comun y confiable porque LVM crea enlaces simbolicos consistentes del device mapper. Los UUIDs tambien funcionan si los prefieres.

Prueba las entradas de fstab sin reiniciar:

sudo umount /srv/apps
sudo mount -a
df -h /srv/apps

Extender (Aumentar) un Volumen Logico

Esta es la operacion mas valiosa de LVM. Cuando un volumen se queda sin espacio, extendelo sin tiempo de inactividad.

Extender con Espacio Libre en el Grupo de Volumenes

# Agregar 20 GB al volumen de aplicaciones
sudo lvextend -L +20G /dev/vg_data/lv_apps

# Luego redimensionar el sistema de archivos
# Para ext4:
sudo resize2fs /dev/vg_data/lv_apps

# Para XFS:
sudo xfs_growfs /srv/apps

O hazlo todo en un solo comando:

# La opcion -r redimensiona el sistema de archivos automaticamente
sudo lvextend -r -L +20G /dev/vg_data/lv_apps

Agregar un Nuevo Disco al Grupo de Volumenes

Cuando el grupo de volumenes se queda sin espacio, agrega otro disco fisico:

# Inicializar el nuevo disco
sudo pvcreate /dev/sdd

# Agregarlo al grupo de volumenes existente
sudo vgextend vg_data /dev/sdd

# Verificar la nueva capacidad
sudo vgs

Ahora puedes extender volumenes logicos usando el espacio recien agregado.

Reducir (Encoger) un Volumen Logico

Advertencia: Reducir volumenes conlleva riesgo de perdida de datos. Siempre respalda antes de reducir. Los sistemas de archivos XFS no pueden reducirse — solo ext4 soporta esta operacion.

Para volumenes ext4:

# Desmontar el volumen primero
sudo umount /srv/apps

# Verificar el sistema de archivos
sudo e2fsck -f /dev/vg_data/lv_apps

# Reducir el sistema de archivos primero, luego el LV (-r hace ambos)
sudo lvreduce -r -L 30G /dev/vg_data/lv_apps

# Remontar
sudo mount /dev/vg_data/lv_apps /srv/apps

La opcion -r asegura que el sistema de archivos se redimensione antes del volumen logico, previniendo la corrupcion de datos.

Snapshots de LVM

Los snapshots crean una copia en un punto en el tiempo de un volumen logico usando copy-on-write. Son ideales para respaldos en sistemas en ejecucion.

Crear un Snapshot

# Crear un snapshot de 5 GB de lv_databases
sudo lvcreate -L 5G -s -n snap_databases /dev/vg_data/lv_databases

El tamano del snapshot (5 GB) representa la cantidad maxima de datos modificados que se pueden rastrear. Si el volumen original cambia mas de 5 GB mientras el snapshot existe, el snapshot se vuelve invalido.

Usar un Snapshot para Respaldo

# Montar el snapshot (solo lectura)
sudo mkdir -p /mnt/snap
sudo mount -o ro /dev/vg_data/snap_databases /mnt/snap

# Respaldar desde el snapshot
sudo tar czf /backup/databases-$(date +%Y%m%d).tar.gz -C /mnt/snap .

# Desmontar y eliminar el snapshot
sudo umount /mnt/snap
sudo lvremove /dev/vg_data/snap_databases

Restaurar desde un Snapshot

# Fusionar un snapshot de vuelta al original (rollback)
sudo lvconvert --merge /dev/vg_data/snap_databases

Nota: La operacion de merge requiere que el volumen original este desmontado (o reiniciar el sistema si el volumen es el sistema de archivos raiz). El snapshot se elimina automaticamente despues del merge.

Monitoreo y Mantenimiento

Verificar Uso de Espacio

# Uso de volumenes fisicos
sudo pvs -o +pv_used,pv_free

# Resumen del grupo de volumenes
sudo vgs -o +vg_free

# Detalles de volumenes logicos
sudo lvs -o +lv_size,seg_count

Mover Datos Entre Volumenes Fisicos

Si necesitas decommisionar un disco:

# Mover todos los extents fuera de /dev/sdb a otros PVs del grupo
sudo pvmove /dev/sdb

# Remover el PV del grupo de volumenes
sudo vgreduce vg_data /dev/sdb

# Limpiar la etiqueta del PV
sudo pvremove /dev/sdb

Mostrar Configuracion Completa

# Vista general completa del sistema
sudo lvm fullreport

Solucion de Problemas

Grupo de Volumenes No Encontrado Despues del Reinicio

# Escanear todos los volumenes fisicos
sudo pvscan

# Activar todos los grupos de volumenes
sudo vgchange -ay

# Si se encuentran, actualizar initramfs
sudo update-initramfs -u

Snapshot Quedandose Sin Espacio

# Verificar uso del snapshot
sudo lvs -o +snap_percent

# Si se acerca al 100%, extender el snapshot
sudo lvextend -L +5G /dev/vg_data/snap_databases

Si un snapshot alcanza el 100% de capacidad, se vuelve invalido y debe eliminarse.

No Se Puede Reducir un Volumen

  • XFS: No puede reducirse. Debes respaldar, recrear el LV al tamano menor, recrear el sistema de archivos y restaurar.
  • ext4: Debe desmontarse primero. Ejecuta e2fsck -f antes de cualquier operacion de redimensionado.
  • Volumen aun activo: Usa sudo umount o verifica procesos usando el montaje con lsof +D /punto/de/montaje.

Referencia de Comandos LVM

ComandoDescripcion
pvcreateInicializar un disco para LVM
pvs / pvdisplayMostrar volumenes fisicos
vgcreateCrear un grupo de volumenes
vgs / vgdisplayMostrar grupos de volumenes
vgextendAgregar un PV a un VG
vgreduceRemover un PV de un VG
lvcreateCrear un volumen logico
lvs / lvdisplayMostrar volumenes logicos
lvextend -rExtender un LV y redimensionar filesystem
lvreduce -rReducir un LV y redimensionar filesystem
lvcreate -sCrear un snapshot
lvremoveEliminar un volumen logico
pvmoveMover datos fuera de un volumen fisico

Resumen

LVM es una herramienta esencial para la gestion flexible de discos en servidores Linux:

  • Arquitectura de tres capas: Volumenes Fisicos → Grupos de Volumenes → Volumenes Logicos
  • Extiende volumenes en tiempo real con lvextend -r — sin tiempo de inactividad
  • Agrega nuevos discos a grupos de volumenes existentes con vgextend para aumentar tu pool de almacenamiento
  • Usa snapshots para respaldos consistentes en sistemas en ejecucion sin detener servicios
  • Siempre reduce los sistemas de archivos antes de reducir los volumenes logicos para evitar perdida de datos
  • LVM no es un reemplazo para RAID — usalo sobre RAID para obtener tanto flexibilidad como redundancia
  • Monitorea el uso de snapshots para evitar su invalidacion al 100% de capacidad

Para temas relacionados, consulta nuestras guias sobre ZFS Storage y Snapshots y Rsync Respaldo y Sincronizacion.