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 11:07] adminelearning:workbooks:centos:8:avance:l106 [2022/02/22 15:15] (Version actuelle) – created admin
Ligne 1: Ligne 1:
 ~~PDF:LANDSCAPE~~ ~~PDF:LANDSCAPE~~
 +
 +Version : **2022.01**
  
 Dernière mise-à-jour : ~~LASTMOD~~ Dernière mise-à-jour : ~~LASTMOD~~
  
-======LCF606 - Installation de KVMde QEMU et des Outils Associés======+======LCF606 - Gestion des Clonesdes Snapshots et des Sauvegardes sous KVM======
  
 +=====Contenu du Module=====
  
------ +  * **LCF606 Gestion des Clones, des Snapshots et des Sauvegardes sous KVM** 
-<html> +    * Contenu du Module 
-<div align="center"> +    * LAB #1 Gestion des Clones 
-Copyright © 2021 Hugh Norris +      * 1.1 Création d'une VM à partir d'un Clone 
-</div> +    * LAB #2 Gestion des Snapshots 
-</html> +      * 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