Version : 2024.01
Dernière mise-à-jour : 2024/10/01 10:29
La création de clones offre une méthode rapide de création de VMs basées sur des configurations déjà existantes.
Commencez par vérifier l'état de la machine virtuelle testvm1 en utilisant la commande virsh list :
[root@centos8 ~]# virsh list Id Name State ------------------------- 3 testvm1 running
Important : Notez que la VM est dans un état de running et que son Id est de 3.
Afin de procéder à la création d'un clone, arrêtez la VM avec la commande virsh shutdown. Cette commande peut prendre en argument l'Id de la VM, le nom de la VM ou bien l'UUID de la VM :
[root@centos8 ~]# virsh shutdown 3 Domain 3 is being shutdown
Vérifiez ensuite que la VM est arrêtée :
[root@centos8 ~]# virsh list Id Name State --------------------
Utilisez la commande virsh-clone pour créer une deuxième VM dénommée testvm2 ayant une image au format qcow2 stockée dans le répertoire /var/lib/libvirt/images/ :
[root@centos8 ~]# virt-clone --original testvm1 --name testvm2 -f /var/lib/libvirt/images/testvm2.qcow2 Allocating 'testvm2.qcow2' | 5.0 GB 00:00:18 Clone 'testvm2' created successfully.
Important : Notez la rapidité de la création du clone par rapport à la lenteur de la création d'une VM à partir d'une image ISO.
La sortie de la commande virsh list ne montre pas les VMs en état d'arrêt :
[root@centos8 ~]# virsh list Id Name State --------------------
Pour voir la liste des VMs, peu importe leurs états, utilisez l'option –all de la commande virsh list :
[root@centos8 ~]# virsh list --all Id Name State -------------------------- - testvm1 shut off - testvm2 shut off
Le State peut être une des valeurs suivantes :
La création de snapshots offre une méthode rapide de sauvegarde des VMs.
Il existe deux types de snapshots :
Utilisez la commande virsh snapshot-list pour consulter la liste des snapshots déjà présents pour la VM testvm1 :
[root@centos8 ~]# virsh snapshot-list testvm1 Name Creation Time State -------------------------------
La création d'un snapshot se fait grâce à l'utilisation de la commande virsh snapshot-create-as. Les arguments obligatoires de cette commande sont :
[root@centos8 ~]# virsh snapshot-create-as --domain testvm1 --name "testvm1-snap-03092021" Domain snapshot testvm1-snap-03092021 created
Vérifiez que le snapshot a bien été pris en compte :
[root@centos8 ~]# virsh snapshot-list testvm1 Name Creation Time State -------------------------------------------------------------- testvm1-snap-03092021 2021-09-03 11:27:10 -0400 shutoff
Important : Notez que l'état est shutoff.
Pour obtenir des informations concernant le snapshot, il convient d'utiliser la commande virsh snapshot-info. L'utilisation de l'option –current permet d'obtenir de l'information sur le dernier snapshot effectué pour le domaine en question :
[root@centos8 ~]# virsh snapshot-info --domain testvm1 --current Name: testvm1-snap-03092021 Domain: testvm1 Current: yes State: shutoff Location: internal Parent: - Children: 0 Descendants: 0 Metadata: yes
Il est aussi possible de prendre des snapshot d'une VM en cours d'exécution. Cependant, dans le cas de beaucoup d'activité E/S, il est toutefois recommandée d'arrêter la VM.
Démarrez donc la VM testvm2 avec la commande virsh start :
[root@centos8 ~]# virsh start testvm2 Domain testvm2 started
Vérifiez ensuite l'état de la VM :
[root@centos8 ~]# virsh list --all Id Name State -------------------------- 4 testvm2 running - testvm1 shut off
Créez un snapshot de testvm2 :
[root@centos8 ~]# virsh snapshot-create-as --domain testvm2 --name "testvm2-snap-03092021" Domain snapshot testvm2-snap-03092021 created
Consultez la liste des snapshots pour le domaine testvm2 :
[root@centos8 ~]# virsh snapshot-list testvm2 Name Creation Time State -------------------------------------------------------------- testvm2-snap-03092021 2021-09-03 11:29:49 -0400 running
Pour obtenir des informations concernant le dernier snapshot effectué pour le domaine testvm2, utilisez la commande suivante :
[root@centos8 ~]# virsh snapshot-info --domain testvm2 --current Name: testvm2-snap-03092021 Domain: testvm2 Current: yes State: running Location: internal Parent: - Children: 0 Descendants: 0 Metadata: yes
Important : Notez que le State est running par rapport au snapshot précédent qui avait rapporté un State de shutoff.
Pour restaurer un snapshot la commande virsh fournit la sous-commande snapshot-revert. Commencez donc par arrêter la VM :
[root@centos8 ~]# virsh shutdown testvm2 Domain testvm2 is being shutdown [root@centos8 ~]# virsh list --all Id Name State -------------------------- - testvm1 shut off - testvm2 shut off
Restaurez ensuite le snapshot :
[root@centos8 ~]# virsh snapshot-revert --domain testvm2 --snapshotname testvm2-snap-03092021 --running [root@centos8 ~]# virsh list --all Id Name State -------------------------- 5 testvm2 running - testvm1 shut off
Important : Notez que le State est running après la restauration du snapshot.
Connectez-vous à la VM grâce à la commande virsh console et vérifiez que celle-ci ne présente pas d’anomalies de fonctionnement :
[root@centos8 ~]# virsh console 5 Connected to domain testvm2 Escape character is ^] CentOS Linux 8 Kernel 4.18.0-305.12.1.el8_4.x86_64 on an x86_64 testvm1 login: root Mot de passe : fenestros Dernière connexion : Fri Sep 3 16:45:59 sur ttyS0 [root@testvm1 ~]# ... [root@testvm1 ~]# [ALT GR]+[CTRL]+[)] [root@centos8 ~]#
Les snapshots peuvent être supprimés grâce à l'utilisation de la commande virsh snapshot-delete :
[root@centos8 ~]# virsh snapshot-delete --domain testvm1 --snapshotname testvm1-snap-03092021 Domain snapshot testvm1-snap-03092021 deleted [root@centos8 ~]# virsh snapshot-delete --domain testvm2 --snapshotname testvm2-snap-03092021 Domain snapshot testvm2-snap-03092021 deleted [root@centos8 ~]# virsh snapshot-list testvm1 Name Creation Time State ------------------------------- [root@centos8 ~]# virsh snapshot-list testvm2 Name Creation Time State -------------------------------
Pour effectuer une sauvegarde d'une VM en utilisant les outils classiques, il convient simplement de copier le fichier d'image ainsi que le fichier de configuration de la VM à un endroit ailleurs sur le système, voire sur un support externe.
Actuellement seule la VM testvm2 est en cours d'exécution :
[root@centos8 ~]# virsh list Id Name State ------------------------- 5 testvm2 running
Créez donc un répertoire destiné à contenir les copies créées :
[root@centos8 ~]# mkdir /vm-backups
Placez-vous dans le répertoire des images /var/lib/libvirt/images/ :
[root@centos8 ~]# cd /var/lib/libvirt/images/ [root@centos8 images]# ls -l total 4029008 -rw-------. 1 root root 5369757696 Sep 3 11:42 testvm1-os.qcow2 -rw-------. 1 qemu qemu 2261123072 Sep 4 02:25 testvm2.qcow2
Copiez ensuite l'image vers le répertoire /vm-backups :
[root@centos8 images]# cp -p testvm1-os.qcow2 /vm-backups/testvm1-os.qcow2-04092021 &
Important : Notez que cette copie est effectuée en arrière plan afin de libérer le prompt en avant plan du terminal.
La configuration de chaque VM est contenue dans un fichier au format XML dans le répertoire /etc/libvirt/qemu/ :
[root@centos8 images]# cd /etc/libvirt/qemu/ [root@centos8 qemu]# ls -lR .: total 16 drwx------. 3 root root 42 Sep 2 10:22 networks -rw-------. 1 root root 4936 Sep 3 10:07 testvm1.xml -rw-------. 1 root root 4933 Sep 3 11:35 testvm2.xml ./networks: total 4 drwx------. 2 root root 25 Aug 10 17:00 autostart -rw-------. 1 root root 575 Sep 2 10:22 default.xml ./networks/autostart: total 0 lrwxrwxrwx. 1 root root 14 Jun 16 06:28 default.xml -> ../default.xml
Si vous consultez le contenu du fichier testvm1.xml, vous vous apercevrez des balises contenant la configuration actuelle de la VM. Par exemple, les deux lignes suivantes démontrent que la VM a 2 Go de RAM et 1 vCPU :
... <currentMemory unit='KiB'>2097152</currentMemory> <vcpu placement='static'>1</vcpu> ...
[root@centos8 qemu]# cat testvm1.xml <!-- WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE OVERWRITTEN AND LOST. Changes to this xml configuration should be made using: virsh edit testvm1 or other application using the libvirt API. --> <domain type='kvm'> <name>testvm1</name> <uuid>d436a2df-78b0-474c-833b-3f7af8681052</uuid> <metadata> <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0"> <libosinfo:os id="http://centos.org/centos/8"/> </libosinfo:libosinfo> </metadata> <memory unit='KiB'>2097152</memory> <currentMemory unit='KiB'>2097152</currentMemory> <vcpu placement='static'>1</vcpu> <os> <type arch='x86_64' machine='pc-q35-rhel8.2.0'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> </features> <cpu mode='host-model' check='partial'/> <clock offset='utc'> <timer name='rtc' tickpolicy='catchup'/> <timer name='pit' tickpolicy='delay'/> <timer name='hpet' present='no'/> </clock> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <pm> <suspend-to-mem enabled='no'/> <suspend-to-disk enabled='no'/> </pm> <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/testvm1-os.qcow2'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> </disk> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <target dev='sda' bus='sata'/> <readonly/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> <controller type='usb' index='0' model='qemu-xhci' ports='15'> <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> </controller> <controller type='sata' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/> </controller> <controller type='pci' index='0' model='pcie-root'/> <controller type='virtio-serial' index='0'> <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/> </controller> <controller type='pci' index='1' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='1' port='0x8'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' multifunction='on'/> </controller> <controller type='pci' index='2' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='2' port='0x9'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <controller type='pci' index='3' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='3' port='0xa'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> </controller> <controller type='pci' index='4' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='4' port='0xb'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x3'/> </controller> <controller type='pci' index='5' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='5' port='0xc'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x4'/> </controller> <controller type='pci' index='6' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='6' port='0xd'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x5'/> </controller> <controller type='pci' index='7' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='7' port='0xe'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x6'/> </controller> <interface type='bridge'> <mac address='52:54:00:44:af:a1'/> <source bridge='virbr0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </interface> <serial type='pty'> <target type='isa-serial' port='0'> <model name='isa-serial'/> </target> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <channel type='unix'> <target type='virtio' name='org.qemu.guest_agent.0'/> <address type='virtio-serial' controller='0' bus='0' port='1'/> </channel> <input type='mouse' bus='ps2'/> <input type='keyboard' bus='ps2'/> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> </memballoon> <rng model='virtio'> <backend model='random'>/dev/urandom</backend> <address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/> </rng> </devices> </domain>
Ce fichier doit donc être copié vers le répertoire /vm-backups/ :
[root@centos8 qemu]# cp -p testvm1.xml /vm-backups/testvm1.xml-backup-04092021
Une fois le processus en arrière plan terminé, vous pouvez constater la présence des deux fichiers dans le répertoire
[root@centos8 vm-backups]# ls -l total 3992904 -rw-------. 1 root root 5369757696 Sep 3 11:42 testvm1-os.qcow2-04092021 -rw-------. 1 root root 4936 Sep 3 10:07 testvm1.xml-backup-04092021
Notez que la taille de l'image de testvm1 est de 5 Go malgré le fait qu'il n'y ait que 1,7 Go alloué :
[root@centos8 ~]# virsh vol-info /var/lib/libvirt/images/testvm1-os.qcow2 Name: testvm1-os.qcow2 Type: file Capacity: 5.00 GiB Allocation: 1.70 GiB
Ayant effectué les copies, il est maintenant possible de sauvegarder les fichiers à l'aide d'un outil classique tel tar :
[root@centos8 vm-backups]# mkdir testvm1 [root@centos8 vm-backups]# mv *04* testvm1 [root@centos8 vm-backups]# ls testvm1 [root@centos8 vm-backups]# tar cvzf testvm1-backup-04092021.tar.gz testvm1/ testvm1/ testvm1/testvm1-os.qcow2-04092021 testvm1/testvm1.xml-backup-04092021 [root@centos8 vm-backups]# ls -l total 846724 drwxr-xr-x. 2 root root 74 Sep 4 03:19 testvm1 -rw-r--r--. 1 root root 867042697 Sep 4 03:24 testvm1-backup-04092021.tar.gz
Copyright © 2024 Hugh Norris