QEMU/KVM: Utilisation du mode Copy-On-Write
Table of Contents
Le mode «Copy-On-Write», souvent désigné par l'acronyme COW, est disponible sur certains formats de disque de machine virtuelle tel que QCOW2.
Dans le mode 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.
QEMU/KVM permet d'incorporer les modifications d'un fichier COW à l'image d'origine.
Contrairement au snapshot (instantané), copy on write utilise plusieurs fichiers et permet d'exécuter simultanément plusieurs instances de la machine de base.
Génération des images COW
Les générations d’images COW sont simplement des images créées avec l’utilitaire «qemu-img create» en utilisant les options «-f Format» et «-b image de référence»:
$ 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
$ 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
L'image créée est plus petite que l'image de référence (193K pour une référence d'environ 486M) car lors de la création, il n'y a pas de différence entre l'original et la COW . Plusieurs images COW peuvent donc être générées avec la même référence.
$ 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
$ 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
$ 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
Pour assurer la préservation de l'image d'origine, on peut la protéger en écriture «chmod a-w vm01.qcow2».
Utilisation des images de disque
Les images différentes peuvent être utilisées simultanément:
$ qemu-system-x86_64 img01.qcow2 & [1] 3279 $ qemu-system-x86_64 img02.qcow2 & [2] 3283 $ qemu-system-x86_64 img03.qcow2 & [3] 3287
mais leurs volumes représentent juste la différence entre le disque d'origine et l'état actuel:
$ ls -lsa total 883M -rw ------- 1 utilisateurs d’anis 75M 9 juin 15:21 img01.qcow2 -rw ------- 1 utilisateurs d’anis 7.4M 9 juin 15:30 img02.qcow2 -rw ------- 1 utilisateurs de l'anis 236M 9 juin 15:30 img03.qcow2 -rw ------- 1 utilisateurs d’anis 486M 9 juin 14:29 vm01.qcow2
Informations sur les images COW
Les informations sur une image COW et sa référence sont obtenues avec la commande “qemu-img info –backing-chain”:
$ 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
Dans cet exemple, l'image “img01.qcow2” de format “qcow2”, avec une taille virtuelle de 8 Go, occupe en réalité 75 Mo d'espace disque, elle est liée à “vm01.qcow2” également au format “qcow2” occupant 485M d’espace sur le disque dur.
Changement de 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 la même que l'ancienne:
$ cp vm01.qcow2 vm02.qcow2 $ chmod a-w vm02.qcow2
$ 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
$ qemu-img rebase -b vm02.qcow2 img02.qcow2
$ 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
Les machines virtuelles peuvent être en cours d'exécution lors de la copie du disque de référence. On peut modifier l'image de référence de VM 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 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
$ qemu-img rebase -b vm02.qcow2 img01.qcow2
$ qemu-img commit img01.qcow2 Image committed.
$ 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