Almacenamiento en libvirt
Volúmenes e imágenes
Hay que diferenciar entre volumen y fichero de imagen.
- Un volumen es un medio de almacenamiento que podemos crear en un pool de almacenmaiento en kvm.
- Si el pool de almacenamiento es de tipo dir entonce el volumen será un fichero de imagen. Sin embargo, si el pool es de tipo LVM, el volumen sera un volumen lógico.
Por ejemplo, podemos crear un fichero de imagen con la instrucción:
$ qemu-img create -f qcow2 /var/lib/libvirt/images/disk.qcow2 10G
Y sin embargo no se ha creado un volumen asociado:
$ virsh -c qemu:///system vol-list default
...
Formatos de imágenes: raw, qcow2, vmdk. Redimensiones. Transformaciones de formato
Vamos a trabajar con ficheros de imágenes. Tenemos varios tipos:
- raw: el formato raw es una imagen binaria sencilla de la imagen del disco. Se ocupa todo el espacio que hayamos indicado al crearla. El acceso es más eficiente.
- qcow2: formato QEMU copy-on-write. Al crearse sólo se ocupa el espacio que se está ocupando con los datos, el fichero irá creciendo cuando escribamos en el él. Acepta instantaneas o snapshots. Es menos eficiente en cuanto al acceso.
- vdi, vmdk,…: formatos de otros sistemas de virtualización.
Redimensiones
Podemos redimensionar el volumen que está utilizando una máquina, para ello:
- Apagamos la máquina virtual.
-
Determinamos el volumen que está usando la máquina, por ejemplo:
$ virsh -c qemu:///system domblklist debiantesting Destino Fuente ------------------------------------------- vda /var/lib/libvirt/images/debiantest.qcow2
-
Obtenemos información sobre el fichero de imagen:
$ qemu-img info /var/lib/libvirt/images/debiantest.qcow2 image: /var/lib/libvirt/images/debiantest.qcow2 file format: qcow2 virtual size: 10 GiB (10737418240 bytes) disk size: 2.31 GiB ...
-
Redimensionamos el volumen, por ejemplo:
$ qemu-img resize /var/lib/libvirt/images/debiantest.qcow2 +5G
El comando anterior redimensiona un fichero de imagen, si lo queremos hacer a nivel de volumen, podemos usar el comando :
virsh vol-resize
. Comprobamos el nuevo tamaño.$ qemu-img info /var/lib/libvirt/images/debiantest.qcow2 image: /var/lib/libvirt/images/debiantest.qcow2 file format: qcow2 virtual size: 15 GiB (10737418240 bytes) disk size: 2.31 GiB
- Iniciamos la máquina y redimensionamos el sistema de archivo: Hemos redimensionado la imagen, pero no el sistema de archivo. Según el forma del sistema de archivo tendremos que usar diferentes métodos para redimensionarlo: How To resize an ext2/3/4 and XFS root partition without LVM.
Transformación de formato
Podemos modificar el formato de cualquier fichero de imágen, con el comando qemu-img convert
, por ejemplo:
$ qemu-img convert /var/lib/libvirt/images/debiantest.qcow2 /var/lib/libvirt/images/debiantest.raw
Definición de almacenamiento en una máquina virtual
- A partir de su definición de XML, y el comando
virsh vol-create
. -
Indicando una serie de parámetros, usando el comando
virsh create-vol-as
, por ejemplo:$ virsh -c qemu:///system vol-create-as default pr.qcow2 --format qcow2 --capacity 2GiB
A este volumen vacio se le puede copiar el contenido de otro volumen con el comando
virsh vol-upload
. -
A partir de un fichero de imagen creado con
qemu-img create
: Si tenemos un fichero que hemos creado en el directorio del pool, entonces tendremos que refrescar el pool para que se cree el volumen correspondiente, para ello:$ virsh -c qemu:///system pool-refresh default
-
Al utilizar
virt-install
para crear una imagen, indicamos con el parámetro--disk
los discos que va a tener la manga, tenemos varias opciones:--disk size=10
: Se crea un volumen de 10Gb.--disk vol=default/debiantest.qcow2
: Se indica que se use un volumen que ya existe.- …
-
Para definir el disco de una máquina usando el XML, usaremos la etiqueta
disk
, por ejemplo:... <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/debiantest.qcow'/> <target dev="vda" bus="virtio"/> </disk>
-
Añadir nuevos discos a una máquina virtual ejecutandose: Podemos editar el XML de la máquina y meter nuevos discos usando la etiqueta
disk
, o usando la siguiente instrucción:$ virsh -c qemu:///system attach-disk maquina --source var/lib/libvirt/images/disk.qcow2 --target vdb --persistent
Aprovisionamiento ligero
Elm aprovisionamiento ligero nos permite definir el disco que vamos a usar en una máquina a partir de una imagen base (backing-vol) de solo lectura, y otro volumen que se usará cuando la máquina vaya haciendo cambios en el disco. Este tipo de almacenamiento nos permite iniciar muchas máquinas desde el mismo disco y que se ocupe muy poco espacio de disco.
Para crear el aprovisionamiento ligero usamos la siguiente instrucción:
$ virsh -c qemu:///system vol-create-as default new_disk.qcow2 10G --format=qcow2 --backing-vol /var/lib/libvirt/images/debiantest.qcow2
Y podemos ver sus características:
$ qemu-img info new_disk.qcow2
image: new_disk.qcow2
file format: qcow2
virtual size: 10 GiB (10737418240 bytes)
disk size: 196 KiB
cluster_size: 65536
backing file: /home/jose/vm/debiantest.qcow2
...