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/sdb1funciona si prefieres particionar el disco primero confdiskoparted. 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:
| Opcion | Significado | Ejemplo |
|---|---|---|
-L 50G | Tamano exacto | 50 gigabytes |
-L 500M | Tamano exacto | 500 megabytes |
-l 100%FREE | Todo el espacio restante | Usa todo lo que queda |
-l 50%VG | Porcentaje del VG | Mitad del grupo de volumenes |
-l 50%FREE | Porcentaje del libre | Mitad 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_lven 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 -fantes de cualquier operacion de redimensionado. - Volumen aun activo: Usa
sudo umounto verifica procesos usando el montaje conlsof +D /punto/de/montaje.
Referencia de Comandos LVM
| Comando | Descripcion |
|---|---|
pvcreate | Inicializar un disco para LVM |
pvs / pvdisplay | Mostrar volumenes fisicos |
vgcreate | Crear un grupo de volumenes |
vgs / vgdisplay | Mostrar grupos de volumenes |
vgextend | Agregar un PV a un VG |
vgreduce | Remover un PV de un VG |
lvcreate | Crear un volumen logico |
lvs / lvdisplay | Mostrar volumenes logicos |
lvextend -r | Extender un LV y redimensionar filesystem |
lvreduce -r | Reducir un LV y redimensionar filesystem |
lvcreate -s | Crear un snapshot |
lvremove | Eliminar un volumen logico |
pvmove | Mover 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
vgextendpara 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.