Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
elearning:workbooks:centos:8:avance:l106 [2021/08/23 10:52] – created adminelearning:workbooks:centos:8:avance:l106 [2022/02/22 15:15] (Version actuelle) – created admin
Ligne 1: Ligne 1:
-======LCF606 - L'Installation de KVM======+~~PDF:LANDSCAPE~~ 
 + 
 +Version : **2022.01** 
 + 
 +Dernière mise-à-jour : ~~LASTMOD~~ 
 + 
 +======LCF606 - Gestion des Clones, des Snapshots et des Sauvegardes sous KVM====== 
 + 
 +=====Contenu du Module===== 
 + 
 +  * **LCF606 - Gestion des Clones, des Snapshots et des Sauvegardes sous KVM** 
 +    * Contenu du Module 
 +    * LAB #1 - Gestion des Clones 
 +      * 1.1 - Création d'une VM à partir d'un Clone 
 +    * LAB #2 - Gestion des Snapshots 
 +      * 2.1 - Création d'un Snapshot - VM Arrêté 
 +      * 2.2 - Création d'un Snapshot - VM en Cours d'Exécution 
 +      * 2.3 - Restauration d'un Snapshot 
 +      * 2.4 - Suppression de Snapshots 
 +    * LAB #3 - Gestion des Sauvegardes 
 +      * 3.1 - Création d'une Copie du Disque de la VM 
 +      * 3.2 - Création d'une Copie de la Configuration de la VM 
 +      * 3.3 - Sauvegarder les Copies 
 +             
 +=====LAB #1 - Gestion des Clones===== 
 + 
 +La création de clones offre une méthode rapide de création de VMs basées sur des configurations déjà existantes. 
 + 
 +====1.1 - Création d'une VM à partir d'un Clone==== 
 + 
 +Commencez par vérifier l'état de la machine virtuelle **testvm1** en utilisant la commande **virsh list** : 
 + 
 +<code> 
 +[root@centos8 ~]# virsh list 
 + Id   Name      State 
 +------------------------- 
 +    testvm1   running 
 +</code> 
 + 
 +<WRAP center round important 60%> 
 +**Important** : Notez que la VM est dans un état de **running** et que son **Id** est de **3**. 
 +</WRAP> 
 + 
 +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 : 
 + 
 +<code> 
 +[root@centos8 ~]# virsh shutdown 3 
 +Domain 3 is being shutdown 
 +</code> 
 + 
 +Vérifiez ensuite que la VM est arrêtée : 
 + 
 +<code> 
 +[root@centos8 ~]# virsh list 
 + Id   Name   State 
 +-------------------- 
 + 
 +</code> 
 + 
 +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/** : 
 + 
 +<code> 
 +[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. 
 +</code> 
 + 
 +<WRAP center round important 60%> 
 +**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. 
 +</WRAP> 
 + 
 +La sortie de la commande **virsh list** ne montre pas les VMs en état d'arrêt : 
 + 
 +<code> 
 +[root@centos8 ~]# virsh list 
 + Id   Name   State 
 +-------------------- 
 + 
 +</code> 
 + 
 +Pour voir la liste des VMs, peu importe leurs états, utilisez l'option **--all** de la commande **virsh list** : 
 + 
 +<code> 
 +[root@centos8 ~]# virsh list --all 
 + Id   Name      State 
 +-------------------------- 
 +    testvm1   shut off 
 +    testvm2   shut off 
 + </code> 
 +  
 +Le **State** peut être une des valeurs suivantes : 
 + 
 +  * **running** - la machine virtuelle est active, 
 +  * **blocked** ou **blocking** - la machine virtuelle est en attente d'E/S ou l'hyperviseur, 
 +  * **paused** - la machine virtuelle est suspendue, 
 +  * **shutdown** - la machine virtuelle est en cours d'arrêt, 
 +  * **shut off** - la machine virtuelle est éteinte et elle n'utilise **aucune** ressource système, 
 +  * **crashed** - la machine virtuelle a crashée et est arrêtée. 
 +  
 +=====LAB #2 - Gestion des Snapshots===== 
 + 
 +La création de snapshots offre une méthode rapide de sauvegarde des VMs. 
 + 
 +Il existe deux types de snapshots : 
 + 
 +  * **Internal**, 
 +    * uniquement possibles avec les images qcow2, 
 +    * la VM est mise en pause pendant la création du snapshot, 
 +    * ne fonctionne pas avec des pools de stockage de type LVM. 
 +  * **External**, 
 +    * sont basés sur le concept COW (**C**opy **O**n **W**rite), 
 +    * l'image de base est mise en mode lecture seule, 
 +    * une image de type overlay en mode lecture/écriture et obligatoirement au format qcow2 est créée pour les écritures suivantes, 
 +    * est compatible avec n’importe lequel des formats de l'image de base. 
 + 
 +====2.1 - Création d'un Snapshot - VM Arrêté==== 
 + 
 +Utilisez la commande **virsh snapshot-list** pour consulter la liste des snapshots déjà présents pour la VM **testvm1** : 
 + 
 +<code> 
 +[root@centos8 ~]# virsh snapshot-list testvm1 
 + Name   Creation Time   State 
 +------------------------------- 
 + 
 +</code> 
 + 
 +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 : 
 + 
 +  * **--domain**, 
 +    * le domaine à l'origine du snapshot, 
 +  * **--name**, 
 +    * le nom attribué au snapshot. 
 + 
 +<code> 
 +[root@centos8 ~]# virsh snapshot-create-as --domain testvm1 --name "testvm1-snap-03092021" 
 +Domain snapshot testvm1-snap-03092021 created 
 +</code> 
 + 
 +Vérifiez que le snapshot a bien été pris en compte : 
 + 
 +<code> 
 +[root@centos8 ~]# virsh snapshot-list testvm1 
 + Name                    Creation Time               State 
 +-------------------------------------------------------------- 
 + testvm1-snap-03092021   2021-09-03 11:27:10 -0400   shutoff 
 +</code> 
 + 
 +<WRAP center round important 60%> 
 +**Important** : Notez que l'état est **shutoff**. 
 +</WRAP> 
 + 
 +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 : 
 + 
 +<code> 
 +[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 
 +</code> 
 + 
 +====2.2 - Création d'un Snapshot - VM en Cours d'Exécution==== 
 + 
 +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** : 
 + 
 +<code> 
 +[root@centos8 ~]# virsh start testvm2 
 +Domain testvm2 started 
 + 
 +</code> 
 + 
 +Vérifiez ensuite l'état de la VM : 
 + 
 +<code> 
 +[root@centos8 ~]# virsh list --all 
 + Id   Name      State 
 +-------------------------- 
 +    testvm2   running 
 +    testvm1   shut off 
 + 
 +</code> 
 + 
 +Créez un snapshot de **testvm2** : 
 + 
 +<code> 
 +[root@centos8 ~]# virsh snapshot-create-as --domain testvm2 --name "testvm2-snap-03092021" 
 +Domain snapshot testvm2-snap-03092021 created 
 +</code> 
 + 
 +Consultez la liste des snapshots pour le domaine **testvm2** : 
 + 
 +<code> 
 +[root@centos8 ~]# virsh snapshot-list testvm2 
 + Name                    Creation Time               State 
 +-------------------------------------------------------------- 
 + testvm2-snap-03092021   2021-09-03 11:29:49 -0400   running 
 +</code> 
 + 
 +Pour obtenir des informations concernant le dernier snapshot effectué pour le domaine **testvm2**, utilisez la commande suivante : 
 + 
 +<code> 
 +[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 
 +</code> 
 + 
 +<WRAP center round important 60%> 
 +**Important** : Notez que le **State** est **running** par rapport au snapshot précédent qui avait rapporté un **State** de **shutoff**. 
 +</WRAP> 
 + 
 +====2.3 - Restauration d'un Snapshot==== 
 + 
 +Pour restaurer un snapshot la commande virsh fournit la sous-commande **snapshot-revert**. Commencez donc par arrêter la VM : 
 + 
 +<code> 
 +[root@centos8 ~]# virsh shutdown testvm2 
 +Domain testvm2 is being shutdown 
 + 
 +[root@centos8 ~]# virsh list --all 
 + Id   Name      State 
 +-------------------------- 
 +    testvm1   shut off 
 +    testvm2   shut off 
 +</code> 
 + 
 +Restaurez ensuite le snapshot : 
 + 
 +<code> 
 +[root@centos8 ~]# virsh snapshot-revert --domain testvm2 --snapshotname testvm2-snap-03092021 --running 
 + 
 +[root@centos8 ~]# virsh list --all 
 + Id   Name      State 
 +-------------------------- 
 +    testvm2   running 
 +    testvm1   shut off 
 +</code> 
 + 
 +<WRAP center round important 60%> 
 +**Important** : Notez que le **State** est **running** après la restauration du snapshot. 
 +</WRAP> 
 + 
 +Connectez-vous à la VM grâce à la commande **virsh console** et vérifiez que celle-ci ne présente pas d’anomalies de fonctionnement : 
 + 
 +<code> 
 +[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 ~]#  
 +</code> 
 + 
 +====2.4 - Suppression de Snapshots==== 
 + 
 +Les snapshots peuvent être supprimés grâce à l'utilisation de la commande **virsh snapshot-delete** : 
 + 
 +<code> 
 +[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 
 +------------------------------- 
 +</code> 
 + 
 +=====LAB #3 - Gestion des Sauvegardes===== 
 + 
 +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. 
 + 
 +====3.1 - Création d'une Sauvegarde du Disque de la VM==== 
 + 
 +Actuellement seule la VM **testvm2** est en cours d'exécution : 
 + 
 +<code> 
 +[root@centos8 ~]# virsh list 
 + Id   Name      State 
 +------------------------- 
 +    testvm2   running 
 + </code> 
 +  
 +Créez donc un répertoire destiné à contenir les copies créées : 
 +  
 +<code>  
 +[root@centos8 ~]# mkdir /vm-backups 
 +</code> 
 + 
 +Placez-vous dans le répertoire des images **/var/lib/libvirt/images/** : 
 + 
 +<code> 
 +[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 
 +</code> 
 + 
 +Copiez ensuite l'image vers le répertoire **/vm-backups** : 
 + 
 +<code> 
 +[root@centos8 images]# cp -p testvm1-os.qcow2 /vm-backups/testvm1-os.qcow2-04092021 & 
 +</code> 
 + 
 +<WRAP center round important 60%> 
 +**Important** : Notez que cette copie est effectuée en arrière plan afin de libérer le prompt en avant plan du terminal. 
 +</WRAP> 
 + 
 +====3.2 - Création d'une Sauvegarde de la Configuration de la VM==== 
 + 
 +La configuration de chaque VM est contenue dans un fichier au format XML dans le répertoire **/etc/libvirt/qemu/** : 
 + 
 +<code> 
 +[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 
 +</code> 
 + 
 +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 : 
 + 
 +<file> 
 +... 
 +  <currentMemory unit='KiB'>2097152</currentMemory> 
 +  <vcpu placement='static'>1</vcpu> 
 +... 
 +</file> 
 + 
 +<code> 
 +[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> 
 + 
 +</code> 
 + 
 +Ce fichier doit donc être copié vers le répertoire **/vm-backups/** : 
 + 
 +<code> 
 +[root@centos8 qemu]# cp -p testvm1.xml /vm-backups/testvm1.xml-backup-04092021 
 +</code> 
 + 
 +Une fois le processus en arrière plan terminé, vous pouvez constater la présence des deux fichiers dans le répertoire  
 + 
 +<code> 
 +[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 
 +</code> 
 + 
 +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é : 
 + 
 +<code> 
 +[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 
 +</code> 
 + 
 +====3.3 - Sauvegarder les Copies des Fichiers==== 
 + 
 +Ayant effectué les copies, il est maintenant possible de sauvegarder les fichiers à l'aide d'un outil classique tel **tar** :  
 + 
 +<code> 
 +[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 
 +</code> 
 + 
 +----- 
 +Copyright © 2022 Hugh Norris
Menu