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:
| Nivel | Qué es | Comando para verlo |
|---|---|---|
| Volumen físico (PV) | Un disco o partición preparado para LVM | sudo pvs |
| Grupo de volúmenes (VG) | Un conjunto de PV que forma una reserva de espacio | sudo vgs |
| Volumen lógico (LV) | Un "disco virtual" sacado del VG, donde va el sistema de archivos | sudo 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:
VFreees mayor que cero: ve al paso 2.VFreees 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%FREEañ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% /
Notasi olvidas
-r, el volumen crecerá perodfseguirá mostrando el tamaño anterior. Amplía el sistema de archivos a mano consudo resize2fs /dev/ubuntu-vg/ubuntu-lv(ext4) osudo xfs_growfs /(XFS, indicando el punto de montaje).
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.
Advertenciael disco nuevo se incorporará a LVM y cualquier dato que tenga se perderá. Además, si un grupo abarca varios discos y uno falla, se pierden los volúmenes que tuvieran datos en él. Para redundancia, crea el grupo sobre un RAID 1.
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.
