Cómo ampliar memoria, CPU y discos de una máquina virtual
En este artículo veremos tres casos prácticos para ampliar recursos en una VM gestionada con libvirt/KVM:
- Subir número de vCPU (núcleos)
- Aumentar memoria RAM
- Ampliar el disco y el sistema de archivos dentro del invitado
Usaremos comandos virsh, herramientas de libguestfs cuando aplique y utilidades estándar dentro del invitado (growpart, resize2fs, xfs_growfs, LVM). Incluyo vías “en caliente” cuando el sistema lo soporta y alternativas seguras en frío.
Nota: Para ejecutar sin sudo, tu usuario debe pertenecer a los grupos
libvirtykvm.
Ejemplo de situación inicial:
virsh list --all
Salida de ejemplo:
Id Name State
-----------------------------
- debian13 shut off
1 Subir vCPU (núcleos)
Hay dos límites: el máximo de vCPU definido en la VM y el número actual asignado. Puedes subir vCPU en caliente si el invitado lo soporta (CPU hotplug), o en frío ajustando la configuración persistente.
Ver vCPU actuales y máximos
virsh vcpucount debian13 --live --maximum
virsh vcpucount debian13 --live
virsh vcpucount debian13 --config --maximum
virsh vcpucount debian13 --config
Aumentar vCPU en caliente (si es posible)
# Subir a 4 vCPU en la VM en ejecución y persistir el cambio
virsh setvcpus debian13 4 --live
virsh setvcpus debian13 4 --config
Si aparece error, el invitado o la definición puede no permitir hotplug. Asegúrate de que el máximo lo permita:
# Subir el máximo permitido a 8 vCPU (persistente), con la VM apagada
virsh setvcpus debian13 8 --maximum --config
Luego ajusta el valor actual y arranca:
virsh setvcpus debian13 4 --config
virsh start debian13
``;
### Verificación dentro del invitado
```bash
nproc
lscpu | grep -i '^CPU(s)\|Model name\|Thread\|Core\|Socket'
2 Aumentar memoria RAM
La memoria también tiene un máximo (maxmem) y un valor actual. El hotplug de memoria depende del invitado (balloon/virtio-mem). Si falla en caliente, aplica en frío.
Consultar memoria
virsh dominfo debian13 | grep -i memory
virsh dommemstat debian13
Subir memoria en caliente (si se soporta)
# Establecer máximo a 8 GiB y subir memoria actual a 6 GiB
virsh setmaxmem debian13 8G --config
virsh setmem debian13 6G --live
virsh setmem debian13 6G --config
Si da error en --live, realiza el cambio con la VM apagada:
virsh shutdown debian13
virsh setmaxmem debian13 8G --config
virsh setmem debian13 6G --config
virsh start debian13
Verificación dentro del invitado
free -h
grep MemTotal /proc/meminfo
3 Ampliar disco y sistema de archivos
El flujo general es:
- Ampliar el disco virtual en el host (qcow2/raw o volumen del pool)
- Dentro del invitado, detectar el nuevo tamaño y ampliar partición/LVM según corresponda
- Redimensionar el sistema de archivos (ext4/xfs)
Recomendación: Haz snapshot/backup antes de modificar particiones o LVM.
3.1 Ampliar el disco en el host
Primero identifica la ruta del disco de la VM:
virsh domblklist debian13
- Si usas volumen de un pool de libvirt:
virsh vol-list default
virsh vol-resize --pool default debian13.qcow2 +10G
- Si usas fichero directo qcow2/raw:
qemu-img resize /var/lib/libvirt/images/debian13.qcow2 +10G
Nota: Evita redimensionar un disco con snapshots encadenados sin revisar dependencias.
Reinicia la VM (si estaba encendida) para que el invitado detecte el nuevo tamaño del disco si no soporta hotplug de tamaño:
virsh shutdown debian13 && virsh start debian13
3.2 Caso A: Partición única (sin LVM)
Asumiendo un disco vda con una partición vda1 usando ext4 o xfs.
- Ampliar la partición dentro del invitado:
sudo apt install -y cloud-guest-utils # para growpart (Debian/Ubuntu)
sudo growpart /dev/vda 1 # amplía la partición 1 para ocupar el nuevo tamaño
lsblk
- Redimensionar el sistema de archivos:
- ext4:
sudo resize2fs /dev/vda1
- xfs (indica el punto de montaje):
sudo xfs_growfs /
Verifica:
df -h
3.3 Caso B: LVM (PV + VG + LV)
Asumiendo que el PV está en /dev/vda2, el VG es vg0 y el LV es lvroot montado en /.
- Detectar el nuevo tamaño en el PV:
sudo pvscan
sudo pvdisplay
sudo pvresize /dev/vda2
- Ampliar el LV y el FS de una vez (ext4/xfs):
sudo lvdisplay
sudo lvextend -r -l +100%FREE /dev/vg0/lvroot
-r intenta redimensionar el sistema de archivos automáticamente. Alternativa manual:
sudo lvextend -l +100%FREE /dev/vg0/lvroot
# ext4
sudo resize2fs /dev/vg0/lvroot
# xfs (indicar punto de montaje)
sudo xfs_growfs /
Verifica:
lsblk
df -h
Consejos y solución de problemas
- Hotplug de CPU/Memoria: depende del invitado (kernel, drivers, ACPI, virtio). Si falla en
--live, haz el cambio con--configy reinicia. - Límite máximo: si
setvcpus/setmemfallan por límite, ajusta primero el máximo con--maximum(CPU) osetmaxmem(memoria). - growpart no disponible: usa
partedofdiskcon cuidado; asegúrate de alinear correctamente y no sobrescribir datos. - xfs no reduce tamaño: solo crece. Para reducir xfs hay que recrear; planifica en consecuencia.
Referencias
- curso_virtualizacion_linux — GitHub
- virsh - Documentación oficial de libvirt - Comandos: setvcpus, setmem, setmaxmem, dominfo, vcpucount, dommemstat
- qemu-img - QEMU Documentation - Comando resize para redimensionar imágenes de disco
- cloud-guest-utils - Launchpad - Incluye growpart para ampliar particiones
- resize2fs - e2fsprogs - Redimensionar sistemas de archivos ext2/ext3/ext4
- xfs_growfs - XFS Documentation - Expandir sistemas de archivos XFS
- LVM Administration Guide - Red Hat - pvresize, lvextend y gestión de volúmenes lógicos
