El Gestor de Volúmenes Lógicos (LVM) es una herramienta fundamental para la gestión flexible de almacenamiento en sistemas Linux y similares. A diferencia de las particiones tradicionales de tamaño fijo, LVM permite crear y administrar volúmenes lógicos que abstraen el almacenamiento físico, facilitando su redimensionamiento sin pérdida de datos. La estructura se basa en capas: discos físicos se dividen en volúmenes físicos (PV), que se agrupan en grupos de volúmenes (VG), y sobre estos se crrean volúmenes lógicos (LV) donde se alojan los sistemas de archivos.
Conceptos clave
- Extensión Física (PE): Unidad básica de asignación en un volumen físico.
- Volumen Físico (PV): Partición o disco entero preparado para LVM.
- Grupo de Volúmenes (VG): Pool de almacenamiento formado por uno o más PV.
- Volumen Lógico (LV): Bloque virtual creado a partir de un VG, listo para formatear y montar.
El proceso de administración incluye crear, extender, reducir y eliminar componentes. Las operaciones se realizan en caliente, sin necesidad de reiniciar el sistema en muchos casos.
Preparación de discos
Supongamos un disco secundario /dev/sdb con espacio sin utilizar. Primero, particionamos usando fdisk, creando tres particiones primarias de 1GB cada una, asignándoles el tipo hexadecimal 8e para LVM.
# fdisk /dev/sdb
n # Crear nueva partición
p # Partición primaria
1 # Número de partición
+1G # Tamaño
t # Cambiar tipo
8e # Tipo LVM
Repetimos este proceso para las particiones 2 y 3. Al finalizar, verificamos con:
# fdisk -l /dev/sdb
Device Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 8e Linux LVM
/dev/sdb2 2099200 4196351 1048576 8e Linux LVM
/dev/sdb3 4196352 6293503 1048576 8e Linux LVM
Creación de volúmenes físicos
Las particiones se inicializan como PV:
# pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3
Para inspeccionar:
# pvdisplay /dev/sdb1
--- Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 1.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID abc123-DEF4-5678-90ab-cdef12345678
Configuración de grupo de volúmenes
Se crea un VG llamado vg_datos usando los PV recién creados:
# vgcreate vg_datos /dev/sdb1 /dev/sdb2 /dev/sdb3
Verificamos su estado:
# vgdisplay vg_datos
--- Volume group ---
VG Name vg_datos
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size 3.00 GiB
PE Size 4.00 MiB
Total PE 768
Alloc PE / Size 0 / 0
Free PE / Size 768 / 3.00 GiB
VG UUID xyz789-UVW0-1234-5678-ijklmnop9012
Generación de volúmenes lógicos
Creamos un LV de 200MB en vg_datos:
# lvcreate -L 200M -n lv_aplicaciones vg_datos
Para examinar:
# lvdisplay /dev/vg_datos/lv_aplicaciones
--- Logical volume ---
LV Path /dev/vg_datos/lv_aplicaciones
LV Name lv_aplicaciones
VG Name vg_datos
LV UUID qwerty-1234-5678-9abc-def012345678
LV Write Access read/write
LV Creation host, time server01, 2023-10-05 10:30:00 +0000
LV Status available
# open 0
LV Size 200.00 MiB
Current LE 50
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
Formateamos y montamos:
# mkfs.ext4 /dev/vg_datos/lv_aplicaciones
# mkdir -p /mnt/app_data
# mount /dev/vg_datos/lv_aplicaciones /mnt/app_data
Modificación dinámica de volúmenes
Expansión de un LV
Para aumentar lv_aplicaciones a 500MB, seguimos estos pasos:
# umount /mnt/app_data
# lvextend -L 500M /dev/vg_datos/lv_aplicaciones
# e2fsck -f /dev/vg_datos/lv_aplicaciones
# resize2fs /dev/vg_datos/lv_aplicaciones
Verificamos el nuevo tamaño con lvdisplay y volvemos a montar.
Reducción de un LV
Reducir requiere precaución. Ejemplo para bajar a 150MB:
# umount /mnt/app_data
# e2fsck -f /dev/vg_datos/lv_aplicaciones
# resize2fs /dev/vg_datos/lv_aplicaciones 150M
# lvreduce -L 150M /dev/vg_datos/lv_aplicaciones
Después de la reducción, ajustamos el sistema de archivos y remontamos.
Ampliación de un VG
Si necesitamos más espacio, añadimos un nuevo disco /dev/sdc. Primero, creamos una partición de tipo LVM en él:
# fdisk /dev/sdc
n # Crear partición
p # Primaria
1 # Número
+4G # Tamaño
t # Cambiar tipo
8e # LVM
w # Escribir cambios
Inicializamos la partición como PV y la extendemos al VG existente:
# pvcreate /dev/sdc1
# vgextend vg_datos /dev/sdc1
Confirmamos la expansión con vgdisplay, que mostrará un aumento en el tamaño total del VG y en los PE libres.
Operaciones de limpieza
Para eliminar componentes, seguimos el orden inverso: desmontar LV, eliminar LV, eliminar VG y finalmente eliminar PV:
# umount /mnt/app_data
# lvremove /dev/vg_datos/lv_aplicaciones
# vgremove vg_datos
# pvremove /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdc1
LVM proporciona una capa de abstracción que simplifica la administración de almacenamiento en entornos dinámicos, permitiendo operaciones en línea y ajustes continuos según las necesidades del sistema.