Una vez creados los storage pools llega el momento de empezar a llenarlos con discos.

En la entrada anterior hemos visto cómo añadir una imagen ISO al pool que hemos creado para los medios de instalación.

Ahora vamos a crear discos para las máquinas virtuales.

Crear discos en KVM

Para crear un disco (un volumen), usamos el comando vol-create-as, indicando el pool donde vamos a almacenarlo, el nombre del disco y su tamaño:

$ virsh vol-create-as default vdisk-b12447 10G
Vol vdisk-b12447 created

Comprobamos que el disco se ha creado:

Un gran número de comandos admiten el parámetro --details, que muestra información adicional en la salida del comando.

$ virsh vol-list default --details
 Name          Path                                  Type   Capacity  Allocation
---------------------------------------------------------------------------------
 vdisk-b12447  /var/lib/libvirt/images/vdisk-b12447  file  10.00 GiB   10.00 GiB

KVM soporta diferentes tipos de discos; por defecto vol-create-as crea el disco en formato raw. El formato raw proporciona mejor rendimiento que qcow2 ya que no se aplica ningún formato a las imágenes de los discos (pero todo el almacenamiento debe provisionarse de entrada).

El formato qcow2 es el formato nativo de KVM y usa copy on write. De esta forma se desacopla la capa física de almacenamiento de la capa lógica y los bloques físicos. (Referencia: 2.4. Storage Formats for Virtual Machine Disk Images)

Para crear un disco en formato qcow2, debemos especificarlo durante la creación del disco:

$ virsh vol-create-as --pool default --format qcow2 vdisk-u39572.qcow2 10G
Vol vdisk-u39572.qcow2 created

A diferencia de los discos raw, el espacio de los discos qcow2 crece a medida que se necesita:

$ virsh vol-list default --details
 Name                Path                                        Type   Capacity  Allocation
---------------------------------------------------------------------------------------------
 vdisk-b12447        /var/lib/libvirt/images/vdisk-b12447        file  10.00 GiB   10.00 GiB
 vdisk-u39572.qcow2  /var/lib/libvirt/images/vdisk-u39572.qcow2  file  10.00 GiB  196.00 KiB

Como vemos, aunque los dos discos tienen una capacidad de 10GB, el disco en formato qcow2 consume sólo 196KB en disco, a diferencia del disco en formato raw, que consume en disco los 10GB.

Clonar discos

Otra operación habitual a realizar con los discos es clonarlos (por ejemplo, para hacer copias de una machine image que sirve de base para crear máquinas homogéneas).

Para clonar un disco, especificamos el pool, el nombre del disco a clonar y el nombre del disco clonado:

$ virsh vol-clone --pool default vdisk-u39572.qcow2 vdisk-cloned-disk.qcow2
Vol vdisk-cloned-disk.qcow2 cloned from vdisk-u39572.qcow2

Al finalizar el clon, comprobamos que tenemos un disco adicional en el pool default: vdisk-cloned-disk.qcow2

$ virsh vol-list default --details
 Name                     Path                                             Type   Capacity  Allocation
------------------------------------------------------------------------------------------------------
 vdisk-b12447             /var/lib/libvirt/images/vdisk-b12447             file  10.00 GiB   10.00 GiB
 vdisk-cloned-disk.qcow2  /var/lib/libvirt/images/vdisk-cloned-disk.qcow2  file  10.00 GiB  196.00 KiB
 vdisk-u39572.qcow2       /var/lib/libvirt/images/vdisk-u39572.qcow2       file  10.00 GiB  196.00 KiB

El problema es que al clonar el disco se crea una copia exacta del mismo. Si hemos instalado el sistema operativo, el nuevo disco contienen los mismos identificadores de máquina, la misma configuración de red (incluyendo las mismas direcciones MAC para las tarjetas de red), etc…

En la siguiente entrada usaremos virt-clone para realizar clones de máquinas virtuales completas. También usarmeos virt-sysprep “generalizar” las máquinas clonadas.