Gestión de volúmenes lógicos

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: https://www.alcancelibre.org

Licencia Creative Commons
© 1999-2026 Joel Barrios Dueñas. Este manual se distribuye bajo la licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional (CC BY-NC-SA 4.0). Usted es libre de compartir y adaptar el material bajo los siguientes términos: debe dar crédito al autor, no puede utilizarlo para fines comerciales y debe compartir las obras derivadas bajo la misma licencia. La licencia completa está disponible en https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.es.

Introducción

La administración de volúmenes lógicos (LVM) es una habilidad fundamental para gestionar el almacenamiento en sistemas Linux de manera flexible y eficiente. Este documento cubre los conceptos esenciales y los procedimientos operativos más comunes.

LVM es una implementación que consiste en un administrador de volúmenes lógicos para el núcleo de Linux. Fue originalmente escrito en 1998 por Heinz Mauelshagen, quien se basó en el administrador de volúmenes de Veritas, utilizado en sistemas HP-UX.

Básicamente, LVM2 permite realizar lo siguiente:

Es importante señalar que LVM es incompatible con la implementación de RAID1 o RAID5 a nivel lógico. Para estos esquemas de redundancia, se recomienda configurar el arreglo de discos por debajo de LVM ―utilizando mdadm o un controlador de hardware― y crear los volúmenes físicos sobre dicho arreglo.

LVM se compone de tres partes fundamentales:

  1. Volúmenes físicos (PV, Physical Volume): Son particiones o discos completos (con tipo 8e o Linux LVM) que se añaden al sistema LVM. Se dividen en bloques básicos llamados extensiones físicas (PE, Physical Extents).
  2. Grupos de volúmenes (VG, Volume Group): Son «pools» de almacenamiento que agrupan uno o más volúmenes físicos. Constituyen la unidad administrativa central de LVM.
  3. Volúmenes lógicos (LV, Logical Volume): Son los volúmenes utilizables finales, creados a partir del espacio asignado de un grupo de volúmenes. Sobre ellos se crean los sistemas de archivos (ext4, XFS, etc.). Se dividen en extensiones lógicas (LE, Logical Extents).

Procedimientos más comunes

A continuación se detallan los procedimientos operativos más frecuentes para la gestión de volúmenes lógicos en distribuciones empresariales modernas como AlmaLinux, Rocky Linux o RHEL y sus derivadas como ALDOS.

Crecer un volumen lógico a partir de espacio libre en el grupo de volumen

El ejemplo descrito asume un escenario de servidor con LVM preconfigurado, común en instalaciones por defecto de distribuciones basadas en RHEL.

💡 Analogía útil: Recuerde que el proceso es similar a «agrandar primero el zapato (el volumen lógico) y luego el pie (el sistema de archivos), jamás al revés».

  1. Identifique el volumen lógico a expandir. Ejecute df -h:
df -h

La salida será similar a la siguiente:

Filesystem                       Size  Used Avail Use% Mounted on
/dev/mapper/vg_servidor-lv_root  3.0G  365M  2.5G  13% /
tmpfs                            504M   72K  504M   1% /dev/shm
/dev/sda1                        202M   50M  142M  26% /boot
/dev/mapper/vg_servidor-lv_home   20G  174M   19G   1% /home
/dev/mapper/vg_servidor-lv_tmp    5.0G  139M  4.6G   3% /tmp
/dev/mapper/vg_servidor-lv_usr    9.9G  3.0G  6.5G   32% /usr
/dev/mapper/vg_servidor-lv_var    20G  314M   19G   2% /var  <-- Este
/dev/mapper/vg_servidor-lv_varlib 5.0G  225M  4.5G   5% /var/lib
/dev/mapper/vg_servidor-lv_varwww 5.0G  140M  4.6G   3% /var/www

En este ejemplo, expandiremos el volumen lógico montado en /var.

  1. Verifique el espacio libre disponible en el grupo de volúmenes. Puede usar vgdisplay o el mandato más conciso vgs:
vgs

La salida será similar a la siguiente:

  VG          #PV #LV #SN Attr   VSize   VFree
  vg_servidor   1   8   0 wz--n- 79.79g 9.79g
  1. Opcionalmente, revise los detalles del volumen lógico con lvdisplay o lvs:
lvs /dev/vg_servidor/lv_var

La salida será similar a la siguiente:

  LV    VG          Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_var vg_servidor -wi-ao---- 20.00g
  1. Expanda el volumen lógico lv_var utilizando todo el espacio libre (+100%FREE) o una cantidad específica (ej. +5G):
lvextend -l +100%FREE /dev/vg_servidor/lv_var

La salida será similar a la siguiente:

  Logical volume vg_servidor/lv_var successfully resized.
  1. Expanda el sistema de archivos en línea (sin desmontar). El mandato depende del formato:

    • Para XFS (formato predeterminado en las instalaciones estándar de RHEL y derivadas modernas):

      xfs_growfs /dev/vg_servidor/lv_var
    • Para ext4:

      resize2fs /dev/vg_servidor/lv_var
  2. Verifique el nuevo tamaño con df -h. El espacio disponible para /var debe haber aumentado de 20 GiB a aproximadamente 30 GiB.

🔄 Nota sobre ALDOS/RHEL modernos: Este procedimiento es idéntico en ALDOS (que usa SysVinit) y en RHEL 8/9/10 (que usan systemd). La única diferencia potencial es el gestor de paquetes: en ALDOS use yum, en RHEL 8+ use dnf. Para LVM, los mandatos (lvextend, xfs_growfs, etc.) son los mismos.

Crear un volumen lógico a partir de un disco duro nuevo

Este procedimiento añade un disco físico nuevo al sistema y lo integra en la jerarquía LVM.

🛠 Elección de tabla de particiones: Para discos mayores a 2 TiB, es obligatorio usar GPT (gpt) en lugar de MS-DOS (msdos). Para discos menores, puede usar cualquiera.

  1. Cree una partición con tipo Linux LVM (8e). Puede usar parted (recomendado para GPT) o fdisk/gdisk.

    • Ejemplo con parted para un disco /dev/sdb de 10 GiB con tabla MS-DOS:

      parted /dev/sdb mklabel msdos
      parted /dev/sdb mkpart primary ext4 1MiB 10GiB
      parted /dev/sdb set 1 lvm on
    • Ejemplo con parted para crear una tabla GPT:

      parted /dev/sdb mklabel gpt
      parted /dev/sdb mkpart primary ext4 1MiB 10GiB
      parted /dev/sdb set 1 lvm on
  2. Notifique al núcleo sobre la nueva tabla de particiones:

partprobe /dev/sdb
  1. Cree un volumen físico sobre la partición:
pvcreate /dev/sdb1
  1. Cree un grupo de volúmenes que lo contenga (ej. VolDatos00):
vgcreate VolDatos00 /dev/sdb1
  1. Cree un volumen lógico que ocupe todo el espacio libre del grupo:
lvcreate -l 100%FREE -n Datos00 VolDatos00
  1. Dé formato al nuevo volumen lógico. Se presentan las dos opciones comunes:

    • Con ext4:

      mkfs.ext4 /dev/VolDatos00/Datos00
    • Con XFS (predeterminado en muchas instalaciones):

      mkfs.xfs /dev/VolDatos00/Datos00
  2. Cree un punto de montaje, monte el volumen y añádalo a /etc/fstab para un montaje persistente:

mkdir /datos
mount /dev/VolDatos00/Datos00 /datos

Edite /etc/fstab y añada la línea correspondiente:

  1. Verifique el montaje con df -h /datos.

Mover contenidos desde un volumen físico a otro en un nuevo disco duro

Este procedimiento permite migrar datos de un disco antiguo a uno nuevo dentro del mismo grupo de volúmenes, útil para actualizar hardware.

  1. Asegúrese de que el nuevo disco (/dev/sdb1) forme parte del mismo grupo de volúmenes que el disco origen (/dev/sda1). De ser necesario, incorpórelo utilizando el mandato vgextend.

  2. Mueva los datos entre volúmenes físicos:

pvmove /dev/sda1 /dev/sdb1

Este proceso puede tardar dependiendo de la cantidad de datos.

  1. Una vez finalizado, retire el volumen físico vacío del grupo:
vgreduce VolGroup00 /dev/sda1
  1. Opcionalmente, para liberar el disco antiguo y destinarlo a otro uso fuera de LVM, elimine su etiqueta de volumen físico:
pvremove /dev/sda1

Añadir un volumen físico a un volumen lógico existente

Este procedimiento expande un volumen lógico añadiendo espacio de un nuevo disco o partición.

  1. Siga los pasos 1 a 4 de la sección «Crear un volumen lógico...» para tener un nuevo volumen físico (ej. /dev/sdb2).

  2. Extienda el grupo de volúmenes existente (ej. VolGroup00) para incluir este nuevo volumen físico:

vgextend VolGroup00 /dev/sdb2
  1. Ahora, extienda el volumen lógico objetivo (ej. LogVol00) utilizando el espacio recién añadido. Puede usar todo el espacio libre (+100%FREE) o una cantidad específica:
lvextend -l +100%FREE /dev/VolGroup00/LogVol00
  1. Finalmente, expanda el sistema de archivos como se describió en el primer procedimiento (con resize2fs para ext4 o xfs_growfs para XFS).

Quitar una unidad física a un volumen lógico

Este procedimiento es complejo y conlleva riesgo. Es esencial contar con un respaldo válido y confiable de los datos. Además, sólo es viable con sistemas de archivos que permitan reducción como ext4. XFS es incapaz de reducir su tamaño.

⚠️ Advertencia: Si el volumen lógico a reducir contiene sistemas críticos como /, /usr o /var, este procedimiento debe realizarse desde un medio de rescate (Live CD/USB o modo rescate del instalador).

  1. Desde el medio de rescate, siga las indicaciones del entorno para montar el sistema de archivos raíz en /mnt/sysimage. Active el grupo de volúmenes necesario ejecutando vgchange -a y para garantizar que los dispositivos LVM estén disponibles.

  2. Verifique la integridad del sistema de archivos a reducir:

    fsck -f /dev/VolGroup00/LogVol00
  3. Reduzca primero el sistema de archivos a un tamaño menor que el espacio final deseado (por seguridad). Por ejemplo, si el volumen físico a conservar tiene 50 GiB, reduzca a 48 GiB:

    resize2fs /dev/VolGroup00/LogVol00 48G
  4. Identifique el número de extensiones físicas (PE) del volumen físico a retirar (ej. /dev/sdb2) con pvdisplay.

  5. Reduzca el volumen lógico, eliminando ese número de PE:

    lvresize -l -1220 /dev/VolGroup00/LogVol00

Confirme la advertencia que pregunta si está seguro.

  1. Retire el volumen físico del grupo:

    vgreduce VolGroup00 /dev/sdb2
  2. Ahora, expanda el sistema de archivos para ocupar todo el espacio restante en el volumen lógico reducido:

    resize2fs /dev/VolGroup00/LogVol00
  3. Verifique nuevamente la integridad con fsck, desmonte todo y reinicie el sistema.

Ejercicio práctico: Expansión de volúmenes lógicos tras la instalación

Este ejercicio simula un escenario común en administración de sistemas: expandir la capacidad de varios volúmenes lógicos críticos después de una instalación base, utilizando espacio de un nuevo disco físico.

Contexto inicial

Se parte de una instalación de AlmaLinux (o distribución equivalente) realizada siguiendo el manual del autor, la cual crea un esquema LVM básico con volúmenes lógicos de 10 GiB para / (root), /home, /var y /var/lib. El sistema ya está en funcionamiento y se han cubierto los conceptos teóricos de LVM.

Procedimiento

  1. Añadir nuevo hardware y reconocerlo

    • Apague la máquina virtual.
    • En VirtualBox (o su hipervisor), añada un nuevo disco duro virtual de 100 GiB a la máquina, asegurándose de que su tipo sea VDI (Almacenamiento dinámico).
    • Inicie nuevamente el sistema e ingrese como usuario root.
  2. Identificar el nuevo dispositivo

    • Ejecute lsblk para listar los bloques de dispositivo. El nuevo disco aparecerá, típicamente, como /dev/sdb. En la salida a continuación, preste atención a la línea correspondiente a sdb:

      NAME                    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      sda                       8:0    0   40G  0 disk
      ├─sda1                    8:1    0    1G  0 part /boot
      └─sda2                    8:2    0   39G  0 part
        ├─almalinux-root      253:0    0   10G  0 lvm  /
        ├─almalinux-swap      253:1    0    2G  0 lvm  [SWAP]
        ├─almalinux-home      253:2    0   10G  0 lvm  /home
        ├─almalinux-var       253:3    0   10G  0 lvm  /var
        └─almalinux-var_lib   253:4    0   10G  0 lvm  /var/lib
      sdb                       8:16   0  100G  0 disk
      sr0                      11:0    1  6.6G  0 rom
    • Nota: El dispositivo sdb (resaltado en la explicación) es el nuevo disco de 100 GiB que hemos añadido.

  3. Preparar el nuevo disco para LVM

    • Cree una tabla de particiones GPT y una sola partición que ocupe el 100% del espacio disponible, marcándola como tipo LVM.

      parted /dev/sdb mklabel gpt
      parted /dev/sdb mkpart primary ext4 1MiB 100%
      parted /dev/sdb set 1 lvm on
    • Notifique al núcleo sobre el cambio:

      partprobe /dev/sdb
  4. Crear un volumen físico e integrarlo al grupo existente

    • Cree el volumen físico sobre la nueva partición:

      pvcreate /dev/sdb1
    • Verifique que el volumen físico se haya creado y observe el espacio libre actual del grupo de volúmenes almalinux (o el nombre de su VG):

      pvdisplay /dev/sdb1
      vgdisplay almalinux
    • Salida esperada de vgdisplay (resumen): Debe mostrar VG Size cercano a 39 GiB y poco o ningún Free PE / Size.

    • Extienda el grupo de volúmenes almalinux para incluir el nuevo volumen físico:

      vgextend almalinux /dev/sdb1
    • Confirme la expansión del grupo. Salida esperada: VG Size debe aumentar en ~100 GiB y Free PE / Size reflejar ese nuevo espacio disponible.

      vgdisplay almalinux
  5. Expandir los volúmenes lógicos y sus sistemas de archivos

    • Compruebe el uso de espacio actual antes de realizar cambios:

      df -h
    • Expanda el volumen lógico root en +10 GiB y luego su sistema de archivos:

      lvresize -L +10G /dev/mapper/almalinux-root
      resize2fs /dev/mapper/almalinux-root  # o xfs_growfs si usa Xfs
      df -h /
    • Expanda el volumen lógico home en +20 GiB:

      lvresize -L +20G /dev/mapper/almalinux-home
      resize2fs /dev/mapper/almalinux-home
      df -h /home
    • Expanda el volumen lógico var en +20 GiB:

      lvresize -L +20G /dev/mapper/almalinux-var
      resize2fs /dev/mapper/almalinux-var
      df -h /var
  6. Verificación final

    • Ejecute df -h y vgdisplay nuevamente para observar el estado final del sistema de archivos y confirmar que el espacio libre en el grupo de volúmenes se ha reducido según lo asignado.

Resultado del ejercicio: Habrá expandido con éxito la capacidad de los tres volúmenes lógicos más importantes sin reiniciar el sistema, desmontar volúmenes o interrumpir servicios, demostrando la flexibilidad clave de LVM en un entorno práctico.

Bibliografía