User Tools

Site Tools


notes:qcow-copy-on-write

QEMU/KVM: Utilisation du mode Copy-On-Write

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
notes/qcow-copy-on-write.txt · Last modified: 2025/02/19 10:59 by 127.0.0.1