Uso de un pool de almacenamiento de tipo disk
En este apartado, aprenderemos a trabajar con un pool de almacenamiento de tipo disk.
- Un pool de tipo disk en libvirt permite gestionar un disco físico como un recurso de almacenamiento, facilitando la creación y administración de volúmenes para máquinas virtuales.
- En un pool de tipo disk, un volumen es una partición del disco físico (dispositivo de bloque), que puede usarse como disco virtual para las máquinas virtuales.
Supondremos que tenemos un disco de 20GB sin formatear conectado a nuestro host que corresponde al dispositivo de bloque /dev/vdb.
Creación del pool de almacenamiento
Primero, debemos identificar el disco que usaremos. Ejecutamos:
usuario@kvm:~$ lsblk
...
vdb 253:16 0 20G 0 disk
Tenemos que preparar el disco creando una tabla de particiones:
usuario@kvm:~$ sudo parted /dev/vdb -- mklabel gpt
Creamos el pool de almacenamiento llamado pool-disk con el siguiente comando:
usuario@kvm:~$ virsh pool-define-as pool-disk disk --source-dev /dev/vdb --source-format gpt --target /dev
- El parámetro
--device-devespecifica la ruta del dispositivo de almacenamiento. - El parámetro
--targetes el directorio donde se crean los dispositivos de bloque correspondientes a las particiones. - El parámetro
--source-formatespecifica el tipo de tabla de partición.
Y ya podemos iniciar y configurar el pool para que se active automáticamente al inicio:
usuario@kvm:~$ virsh pool-start pool-disk
usuario@kvm:~$ virsh pool-autostart pool-disk
Verificamos que el pool esté activo:
usuario@kvm:~$ virsh pool-list --all
Creación de volúmenes
Como indicábamos los volúmenes en un pool de tipo disk serán particiones del disco. Podemos crear estas particiones usando la API de libvirt, por ejemplo con virsh o con herramientas específicas.
Crear un volumen virsh
Crearemos un volumen de 10GB dentro del pool pool-disk:
usuario@kvm:~$ virsh vol-create-as pool-disk vdb1 10G
Verificamos que el volumen se haya creado correctamente:
usuario@kvm:~$ virsh vol-list pool-disk
Crear un volumen con herramientas específicas
Otra estrategia es crear la partición en el dispositivo de bloque y posteriormente refrescamos el pool de almacenamiento. Usamos parted para crear una partición de 5GB:
usuario@kvm:~$ sudo parted /dev/vdb print
...
Número Inicio Fin Tamaño Sistema de archivos Nombre Banderas
1 17,4kB 10,7GB 10,7GB primary
usuario@kvm:~$ sudo parted /dev/vdb mkpart primary ext4 10700MiB 15700MiB
Refrescamos el pool en libvirt para reconocer la nueva partición:
usuario@kvm:~$ virsh pool-refresh pool-disk
Verificamos que el nuevo volumen aparezca:
usuario@kvm:~$ virsh vol-list pool-disk
Name Path
-------------------
vdb1 /dev/vdb1
vdb2 /dev/vdb2
Y comprobamos el espacio que queda en el pool de almacenamiento:
usuario@kvm:~$ virsh pool-info pool-disk
Name: pool-disk
UUID: 5dd18d82-1e29-4c01-a1c2-260b3e0d591a
State: running
Persistent: yes
Autostart: no
Capacity: 20,00 GiB
Allocation: 14,88 GiB
Crear una máquina virtual con los volúmenes que hemos creado
Usaremos virt-install para crear una máquina virtual utilizando los volúmenes creados.
usuario@kvm:~$ virt-install --connect qemu:///system \
--virt-type kvm \
--name maquina-disco \
--cdrom /var/lib/libvirt/images/debian-12.10.0-amd64-netinst.iso \
--os-variant debian12 \
--disk vol=pool-disk/vdb1 \
--disk path=/dev/vdb2,device=disk \
--memory 2048 \
--vcpus 2
Donde hemos añadido los dos volúmenes que hemos creado:
--disk vol=pool-disk/vol1: Usa el primer volumen de 10GB, indicamos el nombre del pool y el nombre del volumen.--disk path=/dev/vdb2,device=disk: En este caso referenciamos al volumen indicado la partición directamente.