QEMU / KVM: uso del modo de copia en escritura

El modo “Copy-On-Write”, a menudo denominado por el acrónimo COW, está disponible en algunos formatos de disco de máquina virtual como QCOW2.
Específicamente, cuando se usa el modo COW, no se aplican cambios a la imagen del disco. Todos los cambios se registran en un archivo separado conservando la imagen original. Varios archivos COW pueden apuntar a la misma imagen para probar varias configuraciones simultáneamente sin poner en peligro el sistema básico.
QEMU/KVM permite incorporar cambios desde un archivo COW a la imagen original.

A diferencia de la instantánea, la copia en escritura utiliza varios archivos y permite ejecutar simultáneamente varias instancias de la máquina básica.

Configuración de la VACA

Suponemos que tiene un disco de máquina virtual.

Paso de la imagen de disco al tamaño QCOW2

Comenzaremos convirtiendo el disco de la máquina virtual en la que trabajaremos al formato QCOW2 que soporta el modo COW.

                      ~/vbox/kvm $ file ../vm/vm.vmdk 
../vm/vm.vmdk: VMware4 disk image
~/vbox/kvm $ ls -lsa ~/vbox/vm/vm.vmdk
-rw------- 1 anis users 1.1G May 28 10:58 /users/anis/vbox/vm/vm.vmdk
~/vbox/kvm $ qemu-img convert -c -O qcow2 ~/vbox/vm/vm.vmdk vm01.qcow2
~/vbox/kvm $ ls -lsa
total 486M
-rw------- 1 anis users 486M Jun  9 14:29 vm01.qcow2
~/vbox/kvm $ file vm01.qcow2 
vm01.qcow2: QEMU QCOW Image (v2), 8589934592 bytes
                    

Nota :La activación de la compresión sobre la transición del formato vmdk al formato qcow2 a través de la “-c” de “qemu-img” que, en este caso, reduce en más de un 50% el tamaño de la máquina virtual.

Generación de imágenes de VACA

Las generaciones de imágenes COW son imágenes creadas simples. Entonces pasan por la utilidad “qemu-img” en “crear” que pasó el formato del disco (“-f Formato”) y la imagen de referencia (opción “-b imagen de referencia”):

                      ~/vbox/kvm $ qemu-img create -f qcow2 -b vm01.qcow2 img01.qcow2
Formatting 'img01.qcow2', fmt=qcow2 size=8589934592 backing_file="vm01.qcow2" encryption=off cluster_size=65536 lazy_refcounts=off 
~/vbox/kvm $ ls -lsa
total 486M
-rw------- 1 anis users 193K Jun  9 14:59 img01.qcow2
-rw------- 1 anis users 486M Jun  9 14:29 vm01.qcow2
                    

La imagen creada es más pequeña que la imagen de referencia (193K para una referencia de unos 486M) porque durante la creación no hay diferencia entre la original y la VACA.
La imagen COW necesaria se puede generar con la misma referencia.

                      ~/vbox/kvm $ qemu-img create -f qcow2 -b vm01.qcow2 img02.qcow2
Formatting 'img02.qcow2', fmt=qcow2 size=8589934592 backing_file="vm01.qcow2" encryption=off cluster_size=65536 lazy_refcounts=off 
~/vbox/kvm $ qemu-img create -f qcow2 -b vm01.qcow2 img03.qcow2
Formatting 'img03.qcow2', fmt=qcow2 size=8589934592 backing_file="vm01.qcow2" encryption=off cluster_size=65536 lazy_refcounts=off 
~/vbox/kvm $ ls -lsa
total 486M
-rw------- 1 anis users 193K Jun  9 14:59 img01.qcow2
-rw------- 1 anis users 193K Jun  9 15:08 img02.qcow2
-rw------- 1 anis users 193K Jun  9 15:08 img03.qcow2
-rw------- 1 anis users 486M Jun  9 14:29 vm01.qcow2
                    

Nota : Para garantizar la conservación de la imagen original, se puede proteger por escrito mediante un “chmod aw vm01.qcow2”.

Uso de imágenes de disco

Las imágenes “diferenciales” se pueden utilizar simultáneamente:

                      ~/vbox/kvm $ qemu-system-x86_64 img01.qcow2 &
[1] 3279
~/vbox/kvm $ qemu-system-x86_64 img02.qcow2 &
[2] 3283
~/vbox/kvm $ qemu-system-x86_64 img03.qcow2 &
[3] 3287
                    

pero sus volúmenes representan solo la diferencia entre el disco original y el estado actual:

                      ~/vbox/kvm $ ls -lsa
total 883M
-rw------- 1 anis users  75M Jun  9 15:21 img01.qcow2
-rw------- 1 anis users 7.4M Jun  9 15:30 img02.qcow2
-rw------- 1 anis users 236M Jun  9 15:30 img03.qcow2
-rw------- 1 anis users 486M Jun  9 14:29 vm01.qcow2
                    

Información sobre fotos de vacas

La información sobre una imagen COW y su referencia se obtienen a través de “info” de la utilidad de imagen “qemu-img” que se pasa a la “backing-chain”:

                      ~/vbox/kvm $ qemu-img info --backing-chain img01.qcow2 
image: img01.qcow2
file format: qcow2
virtual size: 8.0G (8589934592 bytes)
disk size: 75M
cluster_size: 65536
backing file: vm01.qcow2
 
image: vm01.qcow2
file format: qcow2
virtual size: 8.0G (8589934592 bytes)
disk size: 485M
cluster_size: 65536
                    

En esto examplela imagen “img01.qcow2” en el formato “qcow2”, con un tamaño virtual de 8G, en realidad ocupa 75M de espacio en el disco duro, se relaciona con “vm01.qcow2” también en el formato “qcow2” ocupando 485M de espacio en el disco duro.

Cambiar la imagen de referencia

El modo “rebase” del administrador de imágenes de disco le permite cambiar la imagen de referencia. La nueva referencia debe ser equivalente a la anterior:

                      ~/vbox/kvm $ cp vm01.qcow2 vm02.qcow2
~/vbox/kvm $ chmod a-w vm02.qcow2 
~/vbox/kvm $ qemu-img info img02.qcow2 
image: img02.qcow2
file format: qcow2
virtual size: 8.0G (8589934592 bytes)
disk size: 8.6M
cluster_size: 65536
backing file: vm01.qcow2
~/vbox/kvm $ qemu-img rebase -b vm02.qcow2 img02.qcow2
~/vbox/kvm $ qemu-img info img02.qcow2
image: img02.qcow2
file format: qcow2
virtual size: 8.0G (8589934592 bytes)
disk size: 8.6M
cluster_size: 65536
backing file: vm02.qcow2
                    

Nota : Las máquinas virtuales pueden estar ejecutándose mientras se copia el disco de referencia. Probé los cambios de disco de referencias de la máquina detenidos e iniciados sin ningún problema, pero parece lógico / preferible que la VM se detenga para el cambio de referencia.

Fusión del archivo COW y la referencia

El comando “commit” de “qemu-img” aplica las diferencias a la imagen original:

                      ~/vbox/kvm $ ls -lsa
total 1.7G
-rw------- 1 anis users  76M Jun  9 16:37 img01.qcow2
-rw------- 1 anis users 9.4M Jun  9 16:36 img02.qcow2
-rw------- 1 anis users 621M Jun  9 16:35 img03.qcow2
-rw------- 1 anis users 486M Jun  9 14:29 vm01.qcow2
-rw------- 1 anis users 486M Jun  9 16:38 vm02.qcow2
~/vbox/kvm $ qemu-img rebase -b vm02.qcow2 img01.qcow2
 ~/vbox/kvm $ qemu-img commit img01.qcow2
Image committed.
~/vbox/kvm $ ls -lsa
total 1.8G
-rw------- 1 anis users  76M Jun  9 16:37 img01.qcow2
-rw------- 1 anis users 9.4M Jun  9 16:36 img02.qcow2
-rw------- 1 anis users 621M Jun  9 16:35 img03.qcow2
-rw------- 1 anis users 486M Jun  9 14:29 vm01.qcow2
-rw------- 1 anis users 559M Jun  9 16:41 vm02.qcow2
                    

Conclusión

En este artículo, cambiamos la referencia de “img01.qcow2” y luego aplicamos su contenido al disco de referencia (“commit”). El resultado es “vm02.qcow2”, que se extiende aproximadamente al tamaño del archivo COW.

Related Posts