En KVM existe el concepto de storage pool, que como indica su nombre, es un recurso de almacenamiento.
En mi caso, todo el almacenamiento es local, por lo que voy a examinar el pool existente y a continuación crearé un nuevo storage pool para guardar las ISOs de instalación de los diversos sistemas operativos que utilice.
Al disponer únicamente del disco local como espacio de almacenamiento la creación de storage pools adicionales sirve para separar los discos de las VMs (que dejaré en el pool default) de las ISOs y de paso, aprender cómo funcionan los storage pool en KVM ;)
Storage pool default
Empezamos listando los pools existentes:
$ virsh pool-list
Name State Autostart
-------------------------------------------
default active yes
Examinamos con detalle este pool creado por defecto por KVM:
$ virsh pool-info default
Name: default
UUID: 2be211ef-6810-4f2d-b672-e72761696020
State: running
Persistent: yes
Autostart: yes
Capacity: 468.45 GiB
Allocation: 10.74 GiB
Available: 457.71 GiB
Vemos que el pool está en activo (running), que es persistente (sobrevive a los reinicios) y que arranca junto con KVM.
Podemos volcar la definición del pool a XML mediante el comando pool-dumpxml
:
$ virsh pool-dumpxml default
<pool type='dir'>
<name>default</name>
<uuid>2be211ef-6810-4f2d-b672-e72761696020</uuid>
<capacity unit='bytes'>502994460672</capacity>
<allocation unit='bytes'>11536527360</allocation>
<available unit='bytes'>491457933312</available>
<source>
</source>
<target>
<path>/var/lib/libvirt/images</path>
<permissions>
<mode>0711</mode>
<owner>0</owner>
<group>0</group>
</permissions>
</target>
</pool>
En el fichero XML observamos la ruta donde se encuentra el pool /var/lib/libvirt/images
y los permisos definidos sobre esta ruta.
Storage pool isos
Revisando la documentación 20.29.6. Creating, Defining, and Starting Storage Pools observamos que disponemos de varios comandos para crear un pool: pool-create
y pool-define
.
El comando pool-create
crea y arranca un storage pool no persistente (transient storage pool). Este tipo de pool no guarda la definición del pool en disco y se elimina al apagar KVM.
Para crear un storage pool persistente usamos el comando pool-define
. Este comando crea un fichero XML con la definición del storage pool en /etc/libvirt/storage
. (Referencia: Unable to autostart storage pool).
Podemos comprobar que la carpeta indicada contiene el fichero de definición del pool default
:
$ sudo ls /etc/libvirt/storage/
[sudo] password for operador:
autostart default.xml
Examinando el fichero XML:
$ sudo cat /etc/libvirt/storage/default.xml
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
virsh pool-edit default
or other application using the libvirt API.
-->
<pool type='dir'>
<name>default</name>
<uuid>2be211ef-6810-4f2d-b672-e72761696020</uuid>
<capacity unit='bytes'>0</capacity>
<allocation unit='bytes'>0</allocation>
<available unit='bytes'>0</available>
<source>
</source>
<target>
<path>/var/lib/libvirt/images</path>
</target>
</pool>
Podemos crear el storage pool desde línea de comandos o usando virsh pool-define isos.xml
desde un fichero XML como:
<pool type="dir">
<name>isos</name>
<target>
<path>/var/lib/libvirt/isos</path>
</target>
</pool>
Desde la línea de comandos, crearíamos el pool mediante:
$ sudo mkdir /var/lib/libvirt/isos
$ virsh pool-define-as isos --type dir --target /var/lib/libvirt/isos
Pool isos created
pool-define
sólo crea el pool; podemos comprobarlo mediante:
$ virsh pool-list --all
Name State Autostart
-------------------------------------------
default active yes
isos inactive no
Para arrancarlo y hacer que autoarranque con KVM, usamos los comandos:
$ virsh pool-start isos
Pool isos started
$ virsh pool-start isos
Pool isos started
Cómo añadir contenido al pool
Descargamos una imagen ISO y la copiamos al pool:
curl http://ftp.caliu.cat/debian-cd/9.6.0/amd64/iso-cd/debian-9.6.0-amd64-netinst.iso -o debian-9.6.0-amd64-netinst.iso
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 291M 100 291M 0 0 2480k 0 0:02:00 0:02:00 --:--:-- 2283k
$ sudo cp debian-9.6.0-amd64-netinst.iso /var/lib/libvirt/isos/
Al añadir contenido a un storage pool es posible que no se muestre inmediatamente:
$ virsh vol-list isos
Name Path
------------------------------------------------------------------------------
Actualizamos el contenido del storage pool mediante el comando pool-refresh
:
$ virsh pool-refresh isos
Pool isos refreshed
$ virsh vol-list isos
Name Path
------------------------------------------------------------------------------
debian-9.6.0-amd64-netinst.iso /var/lib/libvirt/isos/debian-9.6.0-amd64-netinst.iso
Resumen
En esta entrada hemos examinado los comandos básicos para gestionar storage pools en KVM.
Hemos visto cómo revisar los pools existentes y obtener información de su estado y propiedades. También hemos visto cómo crear un nuevo storage pool persistente.
Finalmente hemos descargado una ISO y la hemos añadido al pool de ISOs recién creada.
En la siguiente entrada nos centraremos en los vdisks donde almacenar el sistema operativo y los datos de las máquinas virtuales.