Table of Contents

QEMU/KVM: Utilisation de qemu-img

Lorsqu'on utilise le mode «Copy-On-Write» (COW), aucune modification n’est appliquée à l’image disque. Toutes les modifications sont enregistrées dans un fichier séparé en préservant l'image d'origine. Plusieurs fichiers COW peuvent pointer sur la même image pour tester plusieurs configurations simultanément sans mettre en péril le système de base.

Génération de limage COW

Les générations d’images COW sont des images créées simplement par l'utilitaire qemu-img :

$ qemu-img create -f <Format> -b <nom de l'image de référence> <nom de l'image COW>
qemu-img create -f qcow2 -b ibm-zos-110-e2.qcow2 zos110.qcow2
Formatting 'zos110.qcow2', fmt=qcow2 size=21146817024 backing_file='ibm-zos-110-e2.qcow2' encryption=off cluster_size=65536

L'image créée est plus petite que l'image de référence (193K pour une référence d'environ 17G) car pendant la création, il n'y a pas de différence entre l'original et la COW.

 17G -rw-r--r-- 1 root root  17G  1 avril 16:18 ibm-zos-110-e2.qcow2
 16G -rw-r--r-- 1 root root  16G  1 avril 16:05 ibm-zos-110.tar.gz
196K -rw-r--r-- 1 root root 193K  1 avril 16:21 zos110.qcow2

Note: On peut génerer d'autres images COW à partir de la même référence.

$ qemu-img create -f qcow2 -b ibm-zos-110-e2.qcow2 zos110-2.qcow2
Formatting 'zos110-2.qcow2', fmt=qcow2 size=21146817024 backing_file='ibm-zos-110-e2.qcow2' encryption=off cluster_size=65536
$ ls -lsah
total 33G
4,0K drwxr-xr-x 2 root root 4,0K  1 avril 16:26 .
4,0K drwxr-xr-x 8 root root 4,0K  1 avril 10:38 ..
 17G -rw-r--r-- 1 root root  17G  1 avril 16:18 ibm-zos-110-e2.qcow2
 16G -rw-r--r-- 1 root root  16G  1 avril 16:05 ibm-zos-110.tar.gz
196K -rw-r--r-- 1 root root 193K  1 avril 16:26 zos110-2.qcow2
196K -rw-r--r-- 1 root root 193K  1 avril 16:21 zos110.qcow2

pour assurer la préservation de l'image d'origine, on peut la protéger en écriture chmod aw ibm-zos-110-e2.qcow2.

Les images «différentielles» peuvent être utilisées simultanément, mais leurs volumes représentent simplement la différence entre le disque d'origine et l'état actuel

Informations sur les images COW

Les informations sur une image COW et sa référence sont obtenues via “info” de l'utilitaire d'image “qemu-img” qui est transmis à la “chaîne de sauvegarde”:

$ qemu-img info --backing-chain zos110.qcow2
image: zos110.qcow2
file format: qcow2
virtual size: 20G (21146817024 bytes)
disk size: 196K
cluster_size: 65536
backing file: ibm-zos-110-e2.qcow2

image: ibm-zos-110-e2.qcow2
file format: qcow2
virtual size: 20G (21146817024 bytes)
disk size: 16G
cluster_size: 65536

Dans cet exemple, l'image “zos110.qcow2” de format “qcow2” et d'une taille virtuelle de 20 Go, occupe en réalité 194K d'espace disque, elle est liée à “ibm-zos-110-e2.qcow2” également au format “qcow2” occupant 20G d’espace sur le disque dur.

Changer l'image de référence

Le mode «rebase» du gestionnaire d’images de disque permet de changer l’image de référence. La nouvelle référence doit être équivalente à l'ancienne:

 $ cp vm01.qcow2 vm02.qcow2
 $ chmod aw vm02.qcow2 
 $ qemu-img info img02.qcow2 
 image: img02.qcow2
 format de fichier: qcow2
 taille virtuelle: 8.0G (8589934592 octets)
 taille du disque: 8.6M
 taille du cluster: 65536
 fichier de sauvegarde: vm01.qcow2
 $ rebase qemu-img -b vm02.qcow2 img02.qcow2
 $ qemu-img info img02.qcow2
 image: img02.qcow2
 format de fichier: qcow2
 taille virtuelle: 8.0G (8589934592 octets)
 taille du disque: 8.6M
 taille du cluster: 65536
 fichier de sauvegarde: vm02.qcow2 

Les machines virtuelles peuvent être en cours d'exécution lors de la copie du disque de référence. J'ai testé les références de machine aux modifications de disque arrêtées et démarrées sans problème, mais il semble logique / préférable que la VM soit arrêtée pour la modification de référence.

Fusion du fichier COW et de la référence

La commande commit du qemu-img applique les différences à l'image d'origine:

 $ ls -lsa
 total 1.7G
 -rw ------- 1 utilisateurs de l'anis 76M 9 juin 16:37 img01.qcow2
 -rw ------- 1 utilisateurs d'Anis 9.4M Juin 9 16:36 img02.qcow2
 -rw ------- 1 utilisateurs d'Anis 621M 9 Juin 16:35 img03.qcow2
 -rw ------- 1 utilisateurs d’anis 486M 9 juin 14:29 vm01.qcow2
 -rw ------- 1 utilisateurs d’anis 486M 9 juin 16:38 vm02.qcow2
 $ rebase qemu-img -b vm02.qcow2 img01.qcow2
 $ qemu-img commit img01.qcow2
 Image validée.
 $ ls -lsa
 total 1.8G
 -rw ------- 1 utilisateurs de l'anis 76M 9 juin 16:37 img01.qcow2
 -rw ------- 1 utilisateurs d'Anis 9.4M Juin 9 16:36 img02.qcow2
 -rw ------- 1 utilisateurs d'Anis 621M 9 Juin 16:35 img03.qcow2
 -rw ------- 1 utilisateurs d’anis 486M 9 juin 14:29 vm01.qcow2
 -rw ------- 1 anis utilisateurs 559M 9 juin 16:41 vm02.qcow2