LVM (Logical Volume Manager) añade una capa entre los discos y los sistemas de archivos que permite ampliar volúmenes sin reparticionar ni reiniciar. En este tutorial ampliarás un volumen lógico y su sistema de archivos en Ubuntu 24.04 en los tres casos que te encontrarás en la práctica: el grupo de volúmenes ya tiene espacio libre, el disco ha crecido (por ejemplo, tras ampliar el plan de un VPS) o has añadido un disco nuevo. Todo se hace en caliente, con el sistema de archivos montado.

Requisitos previos

  • Un servidor con Ubuntu 24.04 LTS que use LVM, por ejemplo un servidor de CubePath instalado con el esquema LVM del instalador de Ubuntu Server.
  • Un usuario no root con privilegios sudo.
  • Una copia de seguridad reciente de los datos del volumen. Ampliar es una operación segura, pero un error de dispositivo no lo es.

Los comandos de LVM son los mismos en Debian 12 y Rocky Linux 9. En Rocky, el grupo por defecto se llama rl y el sistema de archivos es XFS.

Conceptos básicos de LVM

LVM organiza el almacenamiento en tres niveles:

NivelQué esComando para verlo
Volumen físico (PV)Un disco o partición preparado para LVMsudo pvs
Grupo de volúmenes (VG)Un conjunto de PV que forma una reserva de espaciosudo vgs
Volumen lógico (LV)Un "disco virtual" sacado del VG, donde va el sistema de archivossudo lvs

Para ampliar un sistema de archivos siempre hay que recorrer la cadena de abajo arriba: espacio en el PV, espacio libre en el VG, ampliar el LV y, por último, ampliar el sistema de archivos.

Paso 1: Revisar la configuración actual

Muestra los discos, particiones y volúmenes lógicos:

lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS
NAME                      SIZE TYPE FSTYPE      MOUNTPOINTS
sda                       100G disk
├─sda1                      1M part
├─sda2                      2G part ext4        /boot
└─sda3                     98G part LVM2_member
  └─ubuntu--vg-ubuntu--lv  49G lvm  ext4        /

Después, el estado de cada nivel de LVM:

sudo pvs
sudo vgs
sudo lvs
  PV         VG        Fmt  Attr PSize  PFree
  /dev/sda3  ubuntu-vg lvm2 a--  <98.00g 49.00g
  VG        #PV #LV #SN Attr   VSize  VFree
  ubuntu-vg   1   1   0 wz--n- <98.00g 49.00g
  LV        VG        Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  ubuntu-lv ubuntu-vg -wi-ao---- 49.00g

La columna VFree indica cuánto espacio libre tiene el grupo. Anota también el sistema de archivos del volumen (ext4 en la salida de lsblk), porque determina cómo se amplía.

Según lo que veas, sigue el caso que corresponda:

  • VFree es mayor que cero: ve al paso 2.
  • VFree es cero pero el disco es más grande que la partición del PV: ve al paso 3.
  • Has conectado un disco nuevo: ve al paso 4.

Paso 2: Ampliar con el espacio libre del grupo

Este es el caso más habitual en Ubuntu Server: el instalador crea ubuntu-lv con solo una parte del grupo de volúmenes y deja el resto sin asignar, como en el ejemplo anterior, donde el volumen raíz tiene 49 GB y hay otros 49 GB libres.

Amplía el volumen lógico con todo el espacio libre y redimensiona el sistema de archivos en la misma orden:

sudo lvextend -r -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
  • -l +100%FREE añade todas las extensiones libres del grupo. Para añadir una cantidad concreta, usa -L +20G.
  • -r (--resizefs) amplía también el sistema de archivos después de ampliar el volumen. Funciona con ext4 y XFS.
  Size of logical volume ubuntu-vg/ubuntu-lv changed from 49.00 GiB (12544 extents) to <98.00 GiB (25087 extents).
  Logical volume ubuntu-vg/ubuntu-lv successfully resized.
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required
The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 25689088 (4k) blocks long.

Comprueba que el sistema de archivos ve el nuevo tamaño:

df -h /
Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv   97G  6.1G   86G   7% /

Paso 3: Ampliar tras agrandar el disco

Cuando amplías el disco de una máquina virtual (por ejemplo, al subir de plan un VPS), el disco crece, pero la partición que contiene el PV, el propio PV, el volumen lógico y el sistema de archivos siguen con su tamaño anterior. Hay que ampliarlos en ese orden.

Detectar el nuevo tamaño del disco

Comprueba si el sistema ya ve el tamaño nuevo:

lsblk /dev/sda

Si el disco todavía muestra el tamaño antiguo y es un dispositivo SCSI (sda, sdb), pide al kernel que lo vuelva a leer:

echo 1 | sudo tee /sys/class/block/sda/device/rescan

Los discos virtio-blk (vda) suelen detectar el cambio automáticamente; si no, reinicia el servidor.

Ampliar la partición

growpart extiende una partición hasta el final del disco sin tocar su inicio ni sus datos. Forma parte del paquete cloud-guest-utils:

sudo apt install cloud-guest-utils

Amplía la partición 3 de /dev/sda (fíjate en el espacio entre el disco y el número):

sudo growpart /dev/sda 3
CHANGED: partition=3 start=4198400 old: size=205516767 end=209715166 new: size=415231967 end=419430366

Si recibes NOCHANGE: partition 3 is size ... it cannot be grown, el disco aún no muestra espacio adicional detrás de la partición: vuelve al apartado anterior.

growpart solo puede ampliar la última partición del disco, o una que tenga espacio libre justo detrás. En el esquema por defecto de Ubuntu, la partición LVM es la última.

Ampliar el volumen físico

Indica a LVM que el PV ahora es más grande:

sudo pvresize /dev/sda3
  Physical volume "/dev/sda3" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized

Comprueba que el grupo tiene espacio libre:

sudo vgs
  VG        #PV #LV #SN Attr   VSize    VFree
  ubuntu-vg   1   1   0 wz--n- <198.00g 100.00g

Ampliar el volumen lógico y el sistema de archivos

Ahora estás en el mismo punto que en el paso 2:

sudo lvextend -r -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
df -h /

Paso 4: Ampliar añadiendo un disco nuevo

En un servidor dedicado o una máquina virtual a la que has conectado otro disco, puedes añadirlo al grupo existente. El espacio de ambos discos se suma.

Identifica el disco nuevo, que no tendrá particiones ni punto de montaje:

lsblk -o NAME,SIZE,TYPE,MOUNTPOINTS
NAME                      SIZE TYPE MOUNTPOINTS
sda                       100G disk
├─sda1                      1M part
├─sda2                      2G part /boot
└─sda3                     98G part
  └─ubuntu--vg-ubuntu--lv  98G lvm  /
sdb                       200G disk

Crea una tabla GPT con una partición de tipo LVM que ocupe todo el disco. Usar una partición en lugar del disco completo deja claro a otras herramientas que el disco está en uso:

sudo parted -s -a optimal /dev/sdb mklabel gpt mkpart lvm 0% 100% set 1 lvm on

Inicializa la partición como volumen físico:

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

Añádela al grupo de volúmenes:

sudo vgextend ubuntu-vg /dev/sdb1
  Volume group "ubuntu-vg" successfully extended

Verifica que el grupo tiene ahora dos PV y el espacio libre del disco nuevo:

sudo pvs
sudo vgs
  PV         VG        Fmt  Attr PSize    PFree
  /dev/sda3  ubuntu-vg lvm2 a--   <98.00g       0
  /dev/sdb1  ubuntu-vg lvm2 a--  <200.00g <200.00g
  VG        #PV #LV #SN Attr   VSize   VFree
  ubuntu-vg   2   1   0 wz--n- 297.99g <200.00g

Por último, amplía el volumen lógico y su sistema de archivos:

sudo lvextend -r -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
df -h /

No hace falta tocar /etc/fstab: el volumen lógico conserva su nombre y su UUID.

Ampliar otro volumen lógico

Los pasos son idénticos para cualquier volumen, no solo para la raíz. Si tienes varios volúmenes en el mismo grupo, por ejemplo uno montado en /var/lib/mysql, amplía solo el que lo necesita con una cantidad concreta y deja el resto del espacio libre para el futuro:

sudo lvextend -r -L +10G /dev/ubuntu-vg/mysql

Asignar solo lo necesario te da margen para repartir espacio después, algo importante si usas XFS, que no se puede reducir.

Solución de problemas

Insufficient free space: N extents needed, but only M available. El grupo no tiene suficiente espacio libre. Revisa sudo vgs y amplía primero el PV (paso 3) o añade un disco (paso 4).

lvextend amplía el volumen pero df muestra el tamaño antiguo. No se usó -r. Amplía el sistema de archivos a mano con resize2fs (ext4) o xfs_growfs con el punto de montaje (XFS).

pvresize no cambia nada. La partición todavía no se ha ampliado o el kernel no ve el nuevo tamaño del disco. Comprueba con lsblk que la partición es más grande que antes y repite growpart.

growpart falla con failed to resize o el kernel no actualiza la tabla. Instala cloud-guest-utils y comprueba que la partición es la última del disco. Si la tabla está en uso y no se relee, ejecuta sudo partprobe /dev/sda o reinicia antes de pvresize.

Conclusión

Has ampliado un volumen lógico y su sistema de archivos en caliente en los tres casos habituales: espacio libre en el grupo, disco ampliado con growpart y pvresize, y disco nuevo con pvcreate y vgextend. Como siguientes pasos, puedes vigilar el uso de disco con alertas antes de quedarte sin espacio, crear el grupo de volúmenes sobre un RAID 1 con mdadm para tener redundancia o usar snapshots de LVM antes de actualizaciones importantes.