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.