Gestión de volúmenes de almacenamiento con virsh
En este apartado vamos a estudiar la gestión de volúmenes de almacenamiento usando la API de libvirt, por lo tanto, utilizaremos la herramienta virsh.
Vamos a trabajar con los pool de almacenamiento que hemos creado que son de tipo dir, por lo tanto, los volúmenes corresponden a ficheros de imágenes de disco.
Obtener información de los volúmenes
Para obtener los volúmenes de un determinado pool (por ejemplo el pool default), ejecutamos:
usuario@kvm:~$ $ virsh vol-list default
Name Path
----------------------------------------------------------------------------------------------
debian12.qcow2 /var/lib/libvirt/images/debian12.qcow2
...
Podemos comprobar que los volúmenes listados se corresponden con ficheros que se encuentran en el directorio del pool default (/var/lib/libvirt/images).
Los ficheros de imágenes de discos que utilizan el formato qcow2 tienen la característica de aprovisionamiento ligero, el fichero tiene un tamaño virtual (el que hemos indicado en su creación y el que verá la máquina virtual que lo utilice) y el espacio ocupado en el disco del host (que irá creciendo conforme vayamos guardando información en la imagen). Podemos ver esta característica ejecutando la siguiente instrucción:
usuario@kvm:~$ virsh vol-list default --details
Name Path Type Capacity Allocation
---------------------------------------------------------------------------------------------------------
debian12.qcow2 /var/lib/libvirt/images/debian12.qcow2 file 10,00 GiB 2,47 GiB
...
Podemos obtener la información de un determinado volumen de un pool, ejecutando:
usuario@kvm:~$ virsh vol-info debian12.qcow2 default
Name: debian12.qcow2
Type: file
Capacity: 10,00 GiB
Allocation: 2,47 GiB
De la misma forma que los pools, los volúmenes están definidos en libvirt con el formato XML. Para ver la definición XML del volumen debian12.qcow2 del pool default, podemos ejecutar virsh vol-dumpxml debian12.qcow2 default. A partir de un fichero XML con la definición de un nuevo volumen, podríamos crearlo con el comando virsh vol-create. Nota: En este caso no existe el comando virsh vol-define, ya que los volúmenes no se pueden crear temporalmente.
Nota: Para profundizar en el formato XML que define los volúmenes puedes consultar la documentación oficial: Storage pool and volume XML format.
Creación de nuevos volúmenes
Sin embargo, vamos a usar otro comando para crear volúmenes que nos permite indicar la información del nuevo volumen por medio de parámetros. Vamos a crear un nuevo volumen en el pool vm-images, cuyo nombre será nuevodisco.img, formato raw y tamaño de 10GB:
usuario@kvm:~$ virsh vol-create-as vm-images nuevodisco.img --format raw 10G
Podemos comprobar que se ha creado un nuevo fichero de imagen:
usuario@kvm:~$ sudo ls -l /srv/images/
total 10485760
-rw------- 1 root root 10737418240 abr 3 07:17 nuevodisco.img
Podemos listar los volúmenes que hemos creado en el pool vm-images, y comprobar que no tenemos la característica de aprovisionamiento ligero al estar usando el formato raw:
usuario@kvm:~$ virsh vol-list vm-images --details
Para borrar el volumen, ejecutamos:
usuario@kvm:~$ virsh vol-delete nuevodisco.img vm-images
Tenemos a nuestra disposición más operaciones sobre los volúmenes, estudiaremos algunas de ellas en apartados posteriores:
vol-clone: para clonar el volumen.vol-resize: para redimensionar volúmenes.vol-download: para descargar el contenido de un volumen de almacenamiento y guardarlo en un fichero local.vol-upload: para cargar información a un volumen desde un fichero.
Hay que recordar que todas estas operaciones se realizan sobre volúmenes, y, por tanto, el medio de almacenamiento que gestionan dependerán del tipo del pool con el que estemos trabajando. De esta forma, por ejemplo:
- Si usamos
vol-create-asen un pool de tipo disk se crearía una partición en un disco. - Si usamos
vol-create-asen un pool de tipo logical se crearía un volumen lógico LVM.