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.
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
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.
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.
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