Cómo redimensionar discos de máquinas virtuales
En este ejemplo usaremos el pool default y un volumen llamado vdisk-10G.img. Mostraremos cómo crear el volumen desde el host, cómo formatearlo con los sistemas de ficheros más comunes (ext4, FAT32, XFS, btrfs) usando la VM invitada, y finalmente cómo añadir 10 GB al volumen y redimensionar la partición y el sistema de ficheros.
Nota: los comandos que actúan sobre la gestión de volúmenes (crear, redimensionar) se ejecutan en el host y usan tu prompt de ejemplo. Los comandos que se ejecutan dentro del invitado (para particionar y formatear) se muestran con el prompt del invitado javiercruces@debian13:~$.
1 Crear los volúmenes
Crear el volumen (host)
Crearemos el volumen en formato qcow2 (aprovisionamiento ligero/thin). Puedes usar virsh vol-create-as o qemu-img según prefieras.
javiercruces@FJCD-PC:~$ # Crear con libvirt en el pool `default` (qcow2, thin)
javiercruces@FJCD-PC:~$ virsh vol-create-as --pool default --format qcow2 vdisk-10G.qcow2 10G
javiercruces@FJCD-PC:~$ # Alternativa: crear el fichero manualmente con qemu-img
javiercruces@FJCD-PC:~$ qemu-img create -f qcow2 /var/lib/libvirt/images/vdisk-10G.qcow2 10G
Comprobar que existe:
javiercruces@FJCD-PC:~$ virsh vol-list default
Name Path
-------------------------------------------------
vdisk-10G.qcow2 /var/lib/libvirt/images/vdisk-10G.qcow2
Puedes inspeccionar el fichero con qemu-img info para ver que es qcow2 y su asignación actual:
javiercruces@FJCD-PC:~$ qemu-img info /var/lib/libvirt/images/vdisk-10G.qcow2
image: /var/lib/libvirt/images/vdisk-10G.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 196K
2 Adjuntar el volumen a una VM para formatearlo (host)
Adjunta el volumen a una VM (ej. testguest1) como vdb en caliente y de forma persistente:
javiercruces@FJCD-PC:~$ virsh attach-disk --live --config testguest1 /var/lib/libvirt/images/vdisk-10G.qcow2 vdb
3 Crear una sola partición y formatear dentro del invitado
Conéctate al invitado (ejemplo):
javiercruces@FJCD-PC:~$ ssh javiercruces@debian13
javiercruces@debian13:~$ sudo -i
Usaremos parted para crear una tabla GPT o MSDOS y una única partición que ocupe todo el disco:
javiercruces@debian13:~$ sudo parted /dev/vdb --script mklabel gpt mkpart primary 0% 100%
Después de crear la partición normalmente el kernel crea /dev/vdb1. A continuación ejemplos de formateo para varios sistemas de ficheros comunes:
- ext4
javiercruces@debian13:~$ sudo mkfs.ext4 -F /dev/vdb1
sudo mkdir -p /mnt/vdb1 && sudo mount /dev/vdb1 /mnt/vdb1
sudo bash -c 'echo "Prueba ext4" > /mnt/vdb1/README.txt'
- FAT32 (vfat)
javiercruces@debian13:~$ sudo apt update && sudo apt install -y dosfstools
javiercruces@debian13:~$ sudo mkfs.vfat -F 32 /dev/vdb1
sudo mkdir -p /mnt/vdb1 && sudo mount -o uid=1000,gid=1000 /dev/vdb1 /mnt/vdb1
sudo bash -c 'echo "Prueba FAT32" > /mnt/vdb1/README.txt'
- XFS
javiercruces@debian13:~$ sudo apt update && sudo apt install -y xfsprogs
javiercruces@debian13:~$ sudo mkfs.xfs -f /dev/vdb1
sudo mkdir -p /mnt/vdb1 && sudo mount /dev/vdb1 /mnt/vdb1
sudo bash -c 'echo "Prueba XFS" > /mnt/vdb1/README.txt'
- Btrfs
javiercruces@debian13:~$ sudo apt update && sudo apt install -y btrfs-progs
javiercruces@debian13:~$ sudo mkfs.btrfs -f /dev/vdb1
sudo mkdir -p /mnt/vdb1 && sudo mount /dev/vdb1 /mnt/vdb1
sudo bash -c 'echo "Prueba BTRFS" > /mnt/vdb1/README.txt'
Desmonta cuando termines las pruebas:
javiercruces@debian13:~$ sudo umount /mnt/vdb1
exit
4 Ampliar el volumen en 10 GB (host)
En el host aumenta el tamaño del volumen a 20G (virsh vol-resize usa tamaño absoluto):
javiercruces@FJCD-PC:~$ virsh vol-resize --pool default vdisk-10G.img 20G
Si la VM está usando el disco en caliente, las siguientes operaciones dentro del invitado permitirán que la partición y el FS vean el nuevo espacio.
5 Redimensionar partición y sistema de ficheros dentro del invitado
Vuelve a conectarte al invitado (si lo tenías abierto reutiliza la sesión). Usaremos growpart cuando esté disponible para extender la partición y luego la herramienta de cada FS para ampliar el tamaño del sistema de ficheros.
javiercruces@FJCD-PC:~$ ssh javiercruces@debian13
javiercruces@debian13:~$ sudo apt update && sudo apt install -y cloud-guest-utils
javiercruces@debian13:~$ sudo growpart /dev/vdb 1
- ext4 (online)
javiercruces@debian13:~$ sudo resize2fs /dev/vdb1
- XFS (online, debe estar montado; crece en el punto de montaje)
javiercruces@debian13:~$ sudo mount /dev/vdb1 /mnt/vdb1 # si no está ya montado
javiercruces@debian13:~$ sudo xfs_growfs /mnt/vdb1
- Btrfs (online)
javiercruces@debian13:~$ sudo mount /dev/vdb1 /mnt/vdb1
javiercruces@debian13:~$ sudo btrfs filesystem resize max /mnt/vdb1
- FAT32
FAT32 no es tan flexible: para redimensionarlo en caliente necesitarás herramientas como fatresize (no siempre instaladas) o realizar la operación offline desde el host con guestfish o desmontando y usando fatresize dentro del invitado. Ejemplo si tienes fatresize:
javiercruces@debian13:~$ sudo apt install -y fatresize
javiercruces@debian13:~$ sudo fatresize -s 20G /dev/vdb1
Si fatresize no está disponible, la alternativa es hacer la operación offline (desmontar y usar guestfish o boot desde un ISO de rescate) o recrear la partición y restaurar los datos.
