Ceci est une ancienne révision du document !


Table des matières

Version : 2024.01

Dernière mise-à-jour : 2024/11/20 14:07

RH13407 - Gestion des Machines Virtuelles avec KVM

Contenu du Module

  • RH13407 - Gestion des Machines Virtuelles avec KVM
    • Contenu du Module
    • Présentation
    • LAB #1 - Installation de KVM
      • 1.1 - Installation des Paquets Requis
      • 1.2 - Activation et Démarrage du Service libvirtd
      • 1.3 - Modules du Noyau
    • LAB #2 - Configuration de KVM
      • 2.1 - Configuration du Pare-feu
      • 2.2 - Configuration du Réseau des VMs
      • 2.3 - Configuration du Stockage
    • LAB #3 - Installation d'une Machine Virtuelle Red Hat 9
      • 3.1 - Identification du Short ID
      • 3.2 - Configuration du Stockage des ISOs
      • 3.3 - Installation du Domaine
        • Format des Images
        • Convertir le Format de l'Image
      • 3.4 - Configuration de l'Installation de l'OS Invité
        • Language Settings
        • Network configuration
        • Time settings
        • Root password
        • Installation source
        • Software selection
        • Installation Destination
        • Démarrer l'Installation
        • Démarrer la VM
      • 3.5 - Vérification de la VM Invitée
        • Réseau
        • Internet
    • LAB #4 - Gestion des Clones
      • 4.1 - Création d'une VM à partir d'un Clone
    • LAB #5 - Gestion des Snapshots
      • 5.1 - Création d'un Snapshot - VM Arrêtée
      • 5.2 - Création d'un Snapshot - VM en Cours d'Exécution
      • 5.3 - Restauration d'un Snapshot
      • 5.4 - Suppression de Snapshots
    • LAB #6 - Gestion des Sauvegardes
      • 6.1 - Création d'une Copie du Disque de la VM
      • 6.2 - Création d'une Copie de la Configuration de la VM
      • 6.3 - Sauvegarder les Copies
    • LAB #7 - Augmentation de la Taille du Disque
      • 7.1 - Augmenter la Taille du Disque avec la Commande qemu-img
        • Augmenter la Taille du Disque de la VM
        • Augmenter la Taille de la Partition Système de la VM
        • Augmenter la Taille du Système de Fichiers
      • 7.2 - Augmenter la Taille du Disque avec la Commande virsh
        • Augmenter la Taille du Disque de la VM
    • LAB #8 - Réparation d'un Filesystem Corrompu
      • 8.1 - Préparation
      • 8.2 - La Commande guestfish
    • LAB #9 - Gestion de la VM
      • 9.1 La Commande shutdown
      • 9.2 La Commande reboot
      • 9.3 La Commande suspend
      • 9.4 La Commande resume
      • 9.5 La Commande dominfo
      • 9.6 La Commande autostart
      • 9.7 La Commande domuuid
      • 9.8 La Commande undefine
      • 9.9 La Commande destroy
    • LAB #10 - Gestion des Ressources
      • 10.1 - Augmenter les VCPUs et la Mémoire
      • 10.2 - Ajouter et Supprimer un Disque Dur
    • LAB #11 - Journalisation
      • 11.1 - Le Répertoire /var/log/libvirt/qemu/
      • 11.2 - Le Fichier /var/log/messages
    • LAB #12 - Gestion de KVM avec Cockpit
      • 12.1 - Installation et Démarrage
      • 12.2 - Connexion à l'Interface
      • 12.3 - Visualisation de la Configuration de KVM
    • LAB #13 - Gestion des Machines Virtuelles avec Cockpit
      • 13.1 - Création d'une VM en Mode Graphique à partir d'un ISO
      • 13.2 - Création et Suppression d'un Snapshot de la VM testvm2
      • 13.3 - Augmentation des Ressources de la VM testvm2
      • 13.4 - Ajout et Suppression d'un Disque Dur à la VM testvm2
    • LAB #14 - Création d'une Machine Virtuelle avec Kickstart
      • 14.1 - Créer un fichier Kickstart
      • 14.2 - Création d'une VM avec Kickstart

Présentation

La Virtualisation

Le système de base hébergeant les machines virtuelles est appelé l'hôte tandis que les machines virtuelles sont appelées les invités.

Il existe différentes méthodes de virtualisation :

  • Virtualisation au niveau du système d'exploitation ou L'Isolation
    • Description : Les systèmes invités utilisent le même noyau et une partie du système de fichiers de l'hôte.
    • L'avantage principal : Économise des ressources.
    • L'inconvénient principal : Les OS des invités ont besoin d'être modifiés pour fonctionner en tant que machine virtuelle. L'hôte et les invités doivent utiliser le même OS.
    • Logiciels concernés : OpenVZ, Linux VServer, BSD Jails, LXC (Linux Containers), Solaris Zones, Docker.


  • Paravirtualisation ou Hyperviseur de type 1
    • Description : Le système hôte met à disposition une machine virtuelle dans laquelle les autres invités s'exécutent. Les systèmes invités sont modifiés et communiquent directement avec l'hyperviseur.
    • L'avantage principal : Efficacité.
    • L'inconvénient principal : Les OS des invités ont besoin d'être modifiés pour fonctionner en tant que machine virtuelle.
    • Logiciels concernés : Xen, VMWare™ ESX, Microsoft™ Hyper-V.

  • Virtualisation complète ou Hyperviseur de type 2
    • Description : Le programme simule du matériel virtuel qui apparaît du point de vue de l'invité comme du matériel réellement existant. Un hyperviseur ou VMM ( Virtual Machine Manager ) contrôle l'invité et remplace certaines opérations par d'autres afin de gérer le processeur, le disque dur, la mémoire, les processus etc..
    • L'avantage principal : Les OS des invités n'ont pas besoin d'être modifiés pour fonctionner en tant que machine virtuelle.
    • L'inconvénient principal : La lenteur.
    • Logiciels concernés : VMWare™ Fusion, VMWare™ Player, VMWare™ Server, Parallels Desktop, Parallels Server, Sun/Oracle VirtualBox, Microsoft™ VirtualPC, Microsoft™ VirtualServer, QEMU, BOCHS.

  • Paravirtualisation avec prise en charge de matériel
    • Description : Les processeurs Intel-VT et AMD-V contiennent des instructions matérielles pour faciliter la virtualisation. Pour déterminer si le processeur dispose des fonctionnalités de virtualisation matérielles, soit Intel-VT, soit AMD-V, lancez la commande # egrep '^flags.*(vmx|svm)' /proc/cpuinfo [Entrée]. Dans le cas où vous ne voyez rien, le processeur ne dispose pas de fonctionnalités de virtualisation matérielles. Par contre, même dans le cas de la prise en charge, vérifiez que les fonctionnalités soient activées dans le BIOS de la machine.
    • L'avantage principal : Efficacité liée au fait que la plupart des OS des invités n'ont pas besoin d'être modifiés pour fonctionner en tant que machine virtuelle.
    • L'inconvénient principal : Nécessite un processeur spécial.
    • Logiciels concernés : Xen, KVM

Xen

  • Xen a vu le jour en 2001 à l'Université de Cambridge,
  • Xen est un produit en licence GPL,
  • Il existe des systèmes de virtualisation commerciaux à base de Xen dont le plus connu est actuellement Citrix XenServer,
  • Xen est un système de virtualisation principalement destiné à la virtualisation de serveurs,
  • Xen est un système de paravirtualisation qui nécessite un noyau Linux modifié,
  • Xen ne peut pas lancé donc un système non-modifié tel Windows™ en mode paravirtualisation,
  • Xen peut lancer des systèmes non modifiés dans des HVM ( Hardware Virtual Machine ) depuis sa version 3 en utilisant une partie du code de QEMU combinée avec l'utilisation d'un processeur de virtualisation

KVM

KVM ou Kernel based Virtual Machine :

  • est un hyperviseur libre sous Linux,
  • ne fonctionne que sur les architectures x86 disposant des extensions Intel-VT ou AMD-V,
  • est un projet issu de QEMU.

Important : Le module KVM est intégré dans le noyau Linux depuis la version 2.6.20 et permet la paravirtualisation depuis le noyau 2.6.25.

KVM appartient à la société Red Hat.

KVM permet de virtualiser :

  • Windows™ à partir de Windows™ 2000,
  • Toutes les distributions Linux,
  • La majorité des Unix BSD,
  • Solaris™ et openSolaris,
  • Minux, Hurd, QNX,
  • MSDOS.

KVM offre un support du matériel suivant :

  • USB,
  • Ethernet,
  • PCI Hotplug,
  • Carte Son,
  • Virtuo - un périphérique disque paravirtualisé.

Les avantages de KVM par rapport à Xen sont :

  • l’utilisation de noyaux non-modifiés au niveaux des invités,
  • l'intégration direct dans le noyau Linux.

LAB #1 - Installation de KVM

1.1 - Installation des Paquets Requis

Avant d'installer KVM, il convient de savoir si le processeur de l'hôte supporte les extensions de virtualisation. Les extensions nécessaires sont soit vmx soit svm selon que le processeur du système hôte soit de la marque Intel™ ou AMD™ :

        
[root@redhat9 ~]# egrep '(vmx|svm)' /proc/cpuinfo | wc -l
8

Installez les paquets nécessaires pour la virtualisation sous KVM :

 
[root@redhat9 ~]# dnf install qemu-kvm libvirt virt-install virt-viewer -y 

Le paquet bridge-utils est requis pour la gestion des bridges réseau. Installez donc celui-ci :

[root@redhat9 ~]# dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm -y

[root@redhat9 ~]# /usr/bin/crb enable
Enabling CRB repo
Repository 'codeready-builder-for-rhel-9-x86_64-rpms' is enabled for this system.
CRB repo is enabled and named: codeready-builder-for-rhel-9-x86_64-rpms

[root@redhat9 ~]# dnf install bridge-utils -y

Dernièrement, les outils dont vous aurez besoin se trouvent dans les paquets virt-top et libguestfs-tools :

 
[root@redhat9 ~]# dnf install virt-top libguestfs-tools -y

Démarrez lesservices de virtualisation installés :

[root@redhat9 ~]# for drv in qemu network nodedev nwfilter secret storage interface; do systemctl start virt${drv}d{,-ro,-admin}.socket; done

1.2 - Activation et Démarrage du Service libvirtd

Activez et démarrez le service libvirtd pour démarrer KVM. Notez l'utilisation de l'option –now qui permet de faire les deux actions en une seule ligne de commande :

[root@redhat9 ~]# systemctl enable --now libvirtd

Vérifiez le statut du service avant de poursuivre :

[root@redhat9 ~]# systemctl status libvirtd
● libvirtd.service - libvirt legacy monolithic daemon
     Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; preset: disabled)
     Active: active (running) since Thu 2024-10-24 13:28:00 CEST; 29s ago
TriggeredBy: ● libvirtd-ro.socket
             ● libvirtd.socket
             ● libvirtd-admin.socket
       Docs: man:libvirtd(8)
             https://libvirt.org/
   Main PID: 22191 (libvirtd)
      Tasks: 21 (limit: 32768)
     Memory: 41.2M
        CPU: 404ms
     CGroup: /system.slice/libvirtd.service
             ├─22191 /usr/sbin/libvirtd --timeout 120
             ├─22293 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
             └─22294 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper

Oct 24 13:28:00 redhat9.ittraining.loc systemd[1]: Started libvirt legacy monolithic daemon.
Oct 24 13:28:01 redhat9.ittraining.loc dnsmasq[22293]: started, version 2.85 cachesize 150
Oct 24 13:28:01 redhat9.ittraining.loc dnsmasq[22293]: compile time options: IPv6 GNU-getopt DBus no-UBus no-i18n IDN2 DHCP DHCPv6 no-Lua TFTP no-conntrack ipset auth cryptohash DNSSEC loop-detect inotify dump>
Oct 24 13:28:01 redhat9.ittraining.loc dnsmasq-dhcp[22293]: DHCP, IP range 192.168.122.2 -- 192.168.122.254, lease time 1h
Oct 24 13:28:01 redhat9.ittraining.loc dnsmasq-dhcp[22293]: DHCP, sockets bound exclusively to interface virbr0
Oct 24 13:28:01 redhat9.ittraining.loc dnsmasq[22293]: reading /etc/resolv.conf
Oct 24 13:28:01 redhat9.ittraining.loc dnsmasq[22293]: using nameserver 8.8.8.8#53
Oct 24 13:28:01 redhat9.ittraining.loc dnsmasq[22293]: read /etc/hosts - 2 addresses
Oct 24 13:28:01 redhat9.ittraining.loc dnsmasq[22293]: read /var/lib/libvirt/dnsmasq/default.addnhosts - 0 addresses
Oct 24 13:28:01 redhat9.ittraining.loc dnsmasq-dhcp[22293]: read /var/lib/libvirt/dnsmasq/default.hostsfile

1.3 - Modules du Noyau

Votre VM présente aux système hôte un processeur de type Intel™. Pour que KVM puisse fonctionner dans cet environnement il a besoin que deux modules soient chargés :

  • kvm
  • kvm-intel

Vérifiez donc le bon chargement des modules concernés :

[root@redhat9 ~]# modinfo kvm
filename:       /lib/modules/5.14.0-427.37.1.el9_4.x86_64/kernel/arch/x86/kvm/kvm.ko.xz
license:        GPL
author:         Qumranet
rhelversion:    9.4
srcversion:     053F7739965CA8A1C952115
depends:        irqbypass
retpoline:      Y
intree:         Y
name:           kvm
vermagic:       5.14.0-427.37.1.el9_4.x86_64 SMP preempt mod_unload modversions 
sig_id:         PKCS#7
signer:         Red Hat Enterprise Linux kernel signing key
sig_key:        4D:3D:C9:6B:F5:79:B7:1B:B3:57:61:F4:F0:80:0F:48:24:E2:77:66
sig_hashalgo:   sha256
signature:      81:C8:68:C0:A6:B0:60:3A:6A:9B:1D:9C:53:8D:17:DA:9D:09:3D:F8:
                45:C8:C5:E7:71:85:C2:8B:59:D0:0A:74:45:E6:44:AA:B8:7C:8F:6C:
                C8:C5:0B:7B:DF:D2:7C:D2:CF:E1:C1:C2:F0:51:C1:46:F6:24:A4:06:
                6A:79:2E:83:E9:76:58:D1:98:78:4B:6E:95:53:0E:B6:6B:52:01:7B:
                9A:5C:E7:9B:60:78:48:70:41:57:6F:00:08:EC:56:F9:15:DC:0C:20:
                EE:8E:CB:16:A8:E6:A5:F8:F0:1C:15:43:D4:2A:B6:3E:99:5D:4F:8E:
                1C:28:44:7C:7D:9F:05:55:9E:4A:04:57:46:02:2D:89:D9:2B:D7:E3:
                DF:F9:FE:AD:BC:C2:85:F6:7D:6D:D6:DE:A6:59:A9:39:CA:63:97:9F:
                13:E4:92:15:F9:45:3D:BE:59:72:8B:91:D3:0E:FF:99:A6:40:30:E0:
                79:F5:52:DC:4D:5E:68:EC:6E:BA:0E:F0:46:FA:FF:92:A8:E0:03:87:
                87:D8:75:B5:9A:A1:09:42:CB:BD:7A:F2:54:FE:32:71:46:B6:DA:53:
                0B:D5:B9:C2:30:45:D3:9C:45:0F:BC:A6:87:B9:26:26:4C:6E:CD:D6:
                6F:72:9D:35:E8:C6:65:12:F8:5A:60:14:6A:F8:18:51:B1:07:72:E7:
                A2:F1:B9:0A:A9:3F:B7:82:CD:93:F3:7B:DA:65:A9:9C:BA:26:57:DB:
                E2:10:52:72:12:D1:DF:7D:DD:D0:22:72:AA:80:92:9F:84:2F:A1:C4:
                50:B5:5E:CF:0C:76:48:EE:DE:CF:5C:97:CF:28:55:94:9F:FF:73:98:
                34:E7:DF:DA:54:C6:09:B4:B9:01:27:F0:CA:F1:D3:35:CE:78:93:F7:
                E4:82:E4:DE:DC:D4:9F:C2:93:50:80:2B:D9:CF:4F:5E:D0:19:10:F9:
                61:20:EC:B8:93:C7:4A:96:93:7C:5C:B6:E6:6B:09:0C:51:4B:8A:14:
                75:61:DB:E1
parm:           mmio_caching:bool
parm:           nx_huge_pages:bool
parm:           nx_huge_pages_recovery_ratio:uint
parm:           nx_huge_pages_recovery_period_ms:uint
parm:           flush_on_reuse:bool
parm:           tdp_mmu:bool
parm:           ignore_msrs:bool
parm:           report_ignored_msrs:bool
parm:           min_timer_period_us:uint
parm:           kvmclock_periodic_sync:bool
parm:           tsc_tolerance_ppm:uint
parm:           lapic_timer_advance_ns:int
parm:           vector_hashing:bool
parm:           enable_vmware_backdoor:bool
parm:           force_emulation_prefix:int
parm:           pi_inject_timer:bint
parm:           enable_pmu:bool
parm:           eager_page_split:bool
parm:           mitigate_smt_rsb:bool
parm:           halt_poll_ns:uint
parm:           halt_poll_ns_grow:uint
parm:           halt_poll_ns_grow_start:uint
parm:           halt_poll_ns_shrink:uint
[root@redhat9 ~]# modinfo kvm_intel
filename:       /lib/modules/5.14.0-427.37.1.el9_4.x86_64/kernel/arch/x86/kvm/kvm-intel.ko.xz
license:        GPL
author:         Qumranet
rhelversion:    9.4
srcversion:     F8501721B0E42C0F985E230
alias:          cpu:type:x86,ven*fam*mod*:feature:*0085*
depends:        kvm
retpoline:      Y
intree:         Y
name:           kvm_intel
vermagic:       5.14.0-427.37.1.el9_4.x86_64 SMP preempt mod_unload modversions 
sig_id:         PKCS#7
signer:         Red Hat Enterprise Linux kernel signing key
sig_key:        4D:3D:C9:6B:F5:79:B7:1B:B3:57:61:F4:F0:80:0F:48:24:E2:77:66
sig_hashalgo:   sha256
signature:      65:0A:FF:7C:3F:B7:FF:D5:D5:D8:BC:F3:25:B7:5B:CB:2F:E0:65:FE:
                41:FD:28:B0:60:AC:03:05:FF:32:F5:F4:EE:46:33:7D:8D:BB:DD:52:
                09:A8:66:1D:EA:00:50:94:03:2D:5C:3D:37:8B:79:50:AA:62:2A:0F:
                AA:F4:1C:82:15:4C:C6:5B:40:C1:66:55:E9:B6:18:B5:D4:9A:AD:63:
                2E:4E:F4:54:23:70:0B:86:1F:CB:A3:4E:26:17:7F:97:5E:FB:2E:7F:
                74:D1:9A:DE:D1:BE:A4:DB:8A:A7:DE:DA:90:D3:89:2C:D8:AE:C8:55:
                B8:DE:F4:66:29:95:D7:32:69:69:9C:29:04:03:A7:E6:46:31:4D:04:
                50:21:45:4D:98:82:AF:CB:AF:50:80:05:56:EB:70:E7:12:75:BC:44:
                CB:8D:51:80:EC:0B:62:98:DE:9F:E8:6D:AE:D8:6A:A1:30:83:5A:A6:
                3D:11:5C:24:82:2C:03:34:C2:B9:DC:F7:DF:BD:7A:0D:7B:6D:47:83:
                AE:CB:42:13:19:0C:EF:60:C2:83:F3:B4:AF:F8:E0:79:E2:DB:A3:F3:
                12:1D:8E:20:EE:16:FE:5B:81:A9:7E:1F:D2:94:70:EB:32:69:F1:F2:
                0E:63:6B:67:C4:07:F3:85:CD:CA:BE:A6:75:9C:9E:7D:C0:CA:E4:A0:
                65:CA:5F:1D:1E:77:61:21:12:C4:04:21:EE:3C:B3:D0:14:C1:28:FB:
                2B:10:95:F4:4E:04:01:50:F6:F3:4E:3C:DA:50:63:60:31:63:32:BF:
                D4:43:48:69:F8:83:0C:C1:C6:76:88:0D:D9:0F:90:2E:DD:A1:26:74:
                3A:93:6C:D6:04:3C:B6:40:BB:00:15:B4:34:0E:BD:32:E9:17:D7:74:
                65:00:E6:22:B7:E6:54:08:DC:33:3B:4E:3D:E2:EA:F4:4D:14:CF:1D:
                3A:0C:72:AD:ED:2C:15:AF:EB:6E:40:82:52:89:D0:44:B0:97:F4:20:
                A2:7E:06:BA
parm:           sgx:bool
parm:           enable_shadow_vmcs:bool
parm:           nested_early_check:bool
parm:           vpid:bool
parm:           vnmi:bool
parm:           flexpriority:bool
parm:           ept:bool
parm:           unrestricted_guest:bool
parm:           eptad:bool
parm:           emulate_invalid_guest_state:bool
parm:           fasteoi:bool
parm:           enable_apicv:bool
parm:           enable_ipiv:bool
parm:           nested:bool
parm:           pml:bool
parm:           error_on_inconsistent_vmcs_config:bool
parm:           dump_invalid_vmcs:bool
parm:           preemption_timer:bool
parm:           allow_smaller_maxphyaddr:bool
parm:           ple_gap:uint
parm:           ple_window:uint
parm:           ple_window_grow:uint
parm:           ple_window_shrink:uint
parm:           ple_window_max:uint
parm:           pt_mode:int
parm:           enlightened_vmcs:bool

LAB #2 - Configuration de KVM

2.1 - Configuration du Pare-feu

Si vous souhaitez vous connecter aux machines virtuelles créées sous KVM en utilisant le protocole VNC, vous devez ouvrir le port 5901/tcp dans le système hôte :

[root@redhat9 ~]# firewall-cmd --permanent --add-port=5901/tcp
success

[root@redhat9 ~]# firewall-cmd --reload
success

2.2 - Configuration du Réseau des VMs

Lors de l'installation de KVM un pont a été créé ayant le nom virbr0 et l'adresse IP 192.168.122.1/24 :

  • La plage des adresses IP disponible pour les machines virtuelles KVM va de 192.168.122.2/24 à 192.168.122.254/24,
  • Ce pont met en place une connectivité de type NAT pour les machines virtuelles,
  • Une interface réseau fictive, virbr0-nic et appelée une esclave, a été ajoutée à ce pont principalement pour fournir une adresse MAC stable,
  • Normalement au fur et au mesure que d'autres VMs soient créées, d'autres interfaces fictives seraient ajoutées, une par VM.

Les configurations ci-dessus peuvent être visualisées grâce à la commande ip a :

[root@redhat9 ~]# ip a show virbr0
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:9a:ae:36 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever

Dans le cas où on ne souhaite pas ou on ne peut pas utiliser le pont créé par défaut, il convient de créer un autre pont. Dans notre cas, l'hôte KVM possède deux interfaces ens18 et ens19. Nous allons donc dédier l'interface ens19 au trafic réseau des machines virtuelles. Actuellement cette interface ne possède pas d'adresse IP :

[root@redhat9 ~]# ip a show ens19
3: ens19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 9e:72:3e:6c:a5:3a brd ff:ff:ff:ff:ff:ff
    altname enp0s19

Elle n'est pas visible dans la sortie de la commande nmcli c show :

  
[root@redhat9 ~]# nmcli c show
NAME    UUID                                  TYPE      DEVICE 
ens18   ea4c8254-6236-3130-8323-8b3f71d807a1  ethernet  ens18  
lo      29185158-71ea-4021-9337-1c25a463032f  loopback  lo     
virbr0  ad1e2979-56c7-4d67-b3df-cd1b20aba5a4  bridge    virbr0 

Créez donc une adresse IP de 192.168.56.2/24 pour l'interface ens19 :

[root@redhat9 ~]# nmcli connection add con-name ip_kvm ifname ens19 type ethernet ip4 192.168.56.2/24 gw4 192.168.56.1
Connection 'ip_kvm' (02cb55bb-26ca-4d51-8572-7349d67c522d) successfully added.

[root@redhat9 ~]# nmcli c show
NAME    UUID                                  TYPE      DEVICE 
ens18   ea4c8254-6236-3130-8323-8b3f71d807a1  ethernet  ens18  
ip_kvm  02cb55bb-26ca-4d51-8572-7349d67c522d  ethernet  ens19  
lo      29185158-71ea-4021-9337-1c25a463032f  loopback  lo     
virbr0  ad1e2979-56c7-4d67-b3df-cd1b20aba5a4  bridge    virbr0 

Utilisez la commande ip pour vérifier la prise en compte de la configuration :

[root@redhat9 ~]# ip a show ens19
3: ens19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 46:de:37:c0:55:6c brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.2/24 brd 192.168.56.255 scope global noprefixroute ens19
       valid_lft forever preferred_lft forever
    inet6 fe80::4b01:d543:147:dd6d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

Notez que cette configuration a été stockée dans le fichier /etc/NetworkManager/system-connections/ip_kvm.nmconnection :

[root@redhat9 ~]# cat /etc/NetworkManager/system-connections/ip_kvm.nmconnection
[connection]
id=ip_kvm
uuid=02cb55bb-26ca-4d51-8572-7349d67c522d
type=ethernet
interface-name=ens19

[ethernet]

[ipv4]
address1=192.168.56.2/24,192.168.56.1
method=manual

[ipv6]
addr-gen-mode=default
method=auto

[proxy]

Vérifiez maintenant que vous pouvez communiquer avec la passerelle par défaut 192.168.56.1/24 :

[root@redhat9 ~]# ping 192.168.56.1
PING 192.168.56.1 (192.168.56.1) 56(84) bytes of data.
64 bytes from 192.168.56.1: icmp_seq=1 ttl=64 time=0.457 ms
64 bytes from 192.168.56.1: icmp_seq=2 ttl=64 time=0.156 ms
64 bytes from 192.168.56.1: icmp_seq=3 ttl=64 time=0.149 ms
64 bytes from 192.168.56.1: icmp_seq=4 ttl=64 time=0.119 ms
^C
--- 192.168.56.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3112ms
rtt min/avg/max/mdev = 0.119/0.220/0.457/0.137 ms

Supprimez maintenant le pont virbr0 :

[root@redhat9 ~]# nmcli c del virbr0
Connection 'virbr0' (ad1e2979-56c7-4d67-b3df-cd1b20aba5a4) successfully deleted.

Créez un nouveau pont au même nom que le précédent :

[root@redhat9 ~]# nmcli connection add type bridge con-name virbr0 ifname virbr0
Connection 'virbr0' (f461de54-837a-4295-88b3-00018611891e) successfully added.

Vérifiez le statut des interfaces réseau :

[root@redhat9 ~]# nmcli device status
DEVICE  TYPE      STATE                   CONNECTION 
ens18   ethernet  connected               ens18      
ens19   ethernet  connected               ip_kvm     
lo      loopback  connected (externally)  lo         
virbr0  bridge    unmanaged 

Configurez la connexion ip_kvm en tant qu'esclave :

              --         
[root@redhat9 ~]# nmcli connection modify ip_kvm controller virbr0

Consultez les fichiers /etc/NetworkManager/system-connections/ip_kvm.nmconnection et cat /etc/NetworkManager/system-connections/virbr0.nmconnection :

[root@redhat9 ~]# cat /etc/NetworkManager/system-connections/ip_kvm.nmconnection 
[connection]
id=ip_kvm
uuid=02cb55bb-26ca-4d51-8572-7349d67c522d
type=ethernet
controller=virbr0
interface-name=ens19
master=virbr0
port-type=bridge
slave-type=bridge
timestamp=1729769984

[ethernet]

[bridge-port]
[root@redhat9 ~]# cat /etc/NetworkManager/system-connections/virbr0.nmconnection 
[connection]
id=virbr0
uuid=f461de54-837a-4295-88b3-00018611891e
type=bridge
interface-name=virbr0

[ethernet]

[bridge]

[ipv4]
method=auto

[ipv6]
addr-gen-mode=default
method=auto

[proxy]

Configurez l'adresse IP du pont :

[root@redhat9 ~]# nmcli connection modify virbr0 ipv4.addresses '192.168.56.2/24' ipv4.gateway '192.168.56.1' ipv4.dns '8.8.8.8' ipv4.dns-search 'ittraining.loc' ipv4.method manual

Important : Notez que le nom du pont est identique au pont existant. Ceci n'a pas d'importance. Notez aussi que l'adresse IP, le masque du réseau ainsi que la passerelle sont configurés dans le fichier décrivant le pont.

Consultez la liste des connexions :

[root@redhat9 ~]# nmcli c show
NAME    UUID                                  TYPE      DEVICE 
ens18   ea4c8254-6236-3130-8323-8b3f71d807a1  ethernet  ens18  
ip_kvm  02cb55bb-26ca-4d51-8572-7349d67c522d  ethernet  ens19  
lo      29185158-71ea-4021-9337-1c25a463032f  loopback  lo     
virbr0  f461de54-837a-4295-88b3-00018611891e  bridge    -- 

Activez le pont virbr0 :

    
[root@redhat9 ~]# nmcli c up virbr0
Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)

Consultez de nouveau la liste des connexions :

[root@redhat9 ~]# nmcli c show
NAME    UUID                                  TYPE      DEVICE 
ens18   ea4c8254-6236-3130-8323-8b3f71d807a1  ethernet  ens18  
ip_kvm  02cb55bb-26ca-4d51-8572-7349d67c522d  ethernet  ens19  
virbr0  f461de54-837a-4295-88b3-00018611891e  bridge    virbr0 
lo      29185158-71ea-4021-9337-1c25a463032f  loopback  lo    

Consultez les fichiers /etc/NetworkManager/system-connections/ip_kvm.nmconnection et cat /etc/NetworkManager/system-connections/virbr0.nmconnection :

[root@redhat9 ~]# cat /etc/NetworkManager/system-connections/ip_kvm.nmconnection 
[connection]
id=ip_kvm
uuid=02cb55bb-26ca-4d51-8572-7349d67c522d
type=ethernet
controller=virbr0
interface-name=ens19
master=virbr0
port-type=bridge
slave-type=bridge
timestamp=1729769984

[ethernet]

[bridge-port]
[root@redhat9 ~]# cat /etc/NetworkManager/system-connections/virbr0.nmconnection 
[connection]
id=virbr0
uuid=f461de54-837a-4295-88b3-00018611891e
type=bridge
interface-name=virbr0

[ethernet]

[bridge]

[ipv4]
address1=192.168.56.2/24,192.168.56.1
dns=8.8.8.8;
dns-search=ittraining.loc;
method=manual

[ipv6]
addr-gen-mode=default
method=auto

[proxy]

Pour que la configuration puisse fonctionner, il est nécessaire d'activer le routage entre les interfaces dans l'hôte KVM :

[root@redhat9 ~]# echo net.ipv4.ip_forward = 1 >> /usr/lib/sysctl.d/60-libvirtd.conf

[root@redhat9 ~]# cat /usr/lib/sysctl.d/60-libvirtd.conf
# The kernel allocates aio memory on demand, and this number limits the
# number of parallel aio requests; the only drawback of a larger limit is
# that a malicious guest could issue parallel requests to cause the kernel
# to set aside memory.  Set this number at least as large as
#   128 * (number of virtual disks on the host)
# Libvirt uses a default of 1M requests to allow 8k disks, with at most
# 64M of kernel memory if all disks hit an aio request at the same time.
fs.aio-max-nr = 1048576
net.ipv4.ip_forward = 1

En utilisant la commande sysctl, appliquez la nouvelle configuration :

[root@redhat9 ~]# /sbin/sysctl -p /usr/lib/sysctl.d/60-libvirtd.conf 
fs.aio-max-nr = 1048576
net.ipv4.ip_forward = 1

Dernièrement, il est important de configurer le pare-feu pour le pont :

[root@redhat9 ~]# firewall-cmd --permanent --direct --passthrough ipv4 -I FORWARD -o virbr0 -j ACCEPT
success

[root@redhat9 ~]# firewall-cmd --permanent --direct --passthrough ipv4 -I FORWARD -i virbr0 -j ACCEPT
success

[root@redhat9 ~]# firewall-cmd --reload
success

La configuration faite, vérifiez la prise en charge en utilisant la commande ip :

[root@redhat9 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 92:86:d7:66:e7:5a brd ff:ff:ff:ff:ff:ff
    altname enp0s18
    inet 10.0.2.101/24 brd 10.0.2.255 scope global noprefixroute ens18
       valid_lft forever preferred_lft forever
    inet6 fe80::9086:d7ff:fe66:e75a/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: ens19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 9e:72:3e:6c:a5:3a brd ff:ff:ff:ff:ff:ff
    altname enp0s19
    inet 192.168.56.2/24 brd 192.168.56.255 scope global noprefixroute ens19
       valid_lft forever preferred_lft forever
    inet6 fe80::4203:fd8c:9650:cc3e/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:9a:ae:36 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.2/24 brd 192.168.56.255 scope global noprefixroute virbr0
       valid_lft forever preferred_lft forever

Consultez maintenant la list des réseaux configurés pour KVM :

[root@redhat9 ~]# virsh net-list
 Name      State    Autostart   Persistent
--------------------------------------------
 default   active   yes         yes

En utilisant la commande virsh net-dumpxml, il est possible de constater la configuration actuelle du pont :

[root@redhat9 ~]# virsh net-dumpxml default
<network>
  <name>default</name>
  <uuid>0679ee40-befd-4f48-841e-7fc64885eb49</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:79:02:66'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>

Important : Notez que la configuration n'as pas été prise en compte. En effet, l'adresse IP de virbr0 est toujours 192.168.122.1.

Il est donc nécessaire d'éditer cette configuration pour refléter les modifications déjà apportées en utilisant la commande virsh net-edit :

[root@redhat9 ~]# virsh net-edit default

A l'issu de votre édition, votre fichier doit correspondre à l'exemple suivant :

<network>
  <name>default</name>
  <uuid>56c9de31-d9bd-420a-8f9e-647b45c6c127</uuid>
  <forward mode='nat'/>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:9a:ae:36'/>
  <ip address='192.168.56.2' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.56.11' end='192.168.56.254'/>
    </dhcp>
  </ip>
</network>

Sortez du mode édition. Vous noterez que la commande vous indique que le fichier a été modifié :

[root@redhat9 ~]# virsh net-edit default
Network default XML configuration edited.

Par contre, la simple édition du fichier n'a pas modifiée la configuration en cours :

[root@redhat9 ~]# virsh net-edit default
Network default XML configuration not changed.

[root@redhat9 ~]# virsh net-dumpxml default
<network>
  <name>default</name>
  <uuid>56c9de31-d9bd-420a-8f9e-647b45c6c127</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:9a:ae:36'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>

Notez que même en cas de re-démarrage du service, la configuration actuelle est persistante :

[root@redhat9 ~]# systemctl restart libvirtd

[root@redhat9 ~]# systemctl status libvirtd
● libvirtd.service - libvirt legacy monolithic daemon
     Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; preset: disabled)
     Active: active (running) since Thu 2024-10-24 14:26:35 CEST; 11s ago
TriggeredBy: ● libvirtd.socket
             ● libvirtd-admin.socket
             ● libvirtd-ro.socket
       Docs: man:libvirtd(8)
             https://libvirt.org/
   Main PID: 4512 (libvirtd)
      Tasks: 21 (limit: 32768)
     Memory: 40.7M
        CPU: 321ms
     CGroup: /system.slice/libvirtd.service
             ├─2587 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
             ├─2588 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
             └─4512 /usr/sbin/libvirtd --timeout 120

Oct 24 14:26:35 redhat9.ittraining.loc systemd[1]: Starting libvirt legacy monolithic daemon...
Oct 24 14:26:35 redhat9.ittraining.loc systemd[1]: Started libvirt legacy monolithic daemon.
Oct 24 14:26:35 redhat9.ittraining.loc dnsmasq[2587]: read /etc/hosts - 2 addresses
Oct 24 14:26:35 redhat9.ittraining.loc dnsmasq[2587]: read /var/lib/libvirt/dnsmasq/default.addnhosts - 0 addresses
Oct 24 14:26:35 redhat9.ittraining.loc dnsmasq-dhcp[2587]: read /var/lib/libvirt/dnsmasq/default.hostsfile

[root@redhat9 ~]# virsh net-dumpxml default
<network>
  <name>default</name>
  <uuid>56c9de31-d9bd-420a-8f9e-647b45c6c127</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:9a:ae:36'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>

Re-démarrez donc votre VM :

[root@redhat9 ~]# reboot

Connectez-vous de nouveau à votre VM et contrôler la sortie de la commande nmcli c show :

[root@redhat9 ~]# nmcli c show
NAME     UUID                                  TYPE      DEVICE 
ip_fixe  0f48c74d-5d16-4c37-8220-24644507b589  ethernet  ens18  
virbr0   289e0fdd-2eb5-4dd3-811a-65a878926e56  bridge    virbr0 
ip_kvm   afc8b175-f2cb-47b2-baca-66454058c36f  ethernet  ens19  
ens18    fc4a4d23-b15e-47a7-bcfa-b2e08f49553e  ethernet  --   

Utilisez ensuite la commande ip pour vérifier l'adresse IP de virbr0 :

[root@redhat9 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 92:86:d7:66:e7:5a brd ff:ff:ff:ff:ff:ff
    altname enp0s18
    inet 10.0.2.101/24 brd 10.0.2.255 scope global noprefixroute ens18
       valid_lft forever preferred_lft forever
    inet6 fe80::9086:d7ff:fe66:e75a/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: ens19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master virbr0 state UP group default qlen 1000
    link/ether 9e:72:3e:6c:a5:3a brd ff:ff:ff:ff:ff:ff
    altname enp0s19
4: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 9e:72:3e:6c:a5:3a brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.2/24 brd 192.168.56.255 scope global noprefixroute virbr0
       valid_lft forever preferred_lft forever
    inet6 fe80::3e23:d3ba:d85d:b02d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

Dernièrement, vérifier la connectivité avec la passerelle 192.162.56.1/24 :

[root@redhat9 ~]# ping 192.168.56.1
PING 192.168.56.1 (192.168.56.1) 56(84) bytes of data.
64 bytes from 192.168.56.1: icmp_seq=1 ttl=64 time=0.350 ms
64 bytes from 192.168.56.1: icmp_seq=2 ttl=64 time=0.198 ms
64 bytes from 192.168.56.1: icmp_seq=3 ttl=64 time=0.226 ms
64 bytes from 192.168.56.1: icmp_seq=4 ttl=64 time=0.178 ms
64 bytes from 192.168.56.1: icmp_seq=5 ttl=64 time=0.161 ms
^C
--- 192.168.56.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4099ms
rtt min/avg/max/mdev = 0.161/0.222/0.350/0.067 ms

2.3 - Configuration du Stockage

KVM a besoin d'un emplacement pour stocker les VMs créées. L'hôte KVM a été configuré avec un disque supplémentaire sde d'une taille de 32 Go à cet effet :

[root@redhat9 ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
sda             8:0    0   50G  0 disk  
├─sda1          8:1    0    1G  0 part  /boot
└─sda2          8:2    0   49G  0 part  
  ├─rhel-root 253:0    0   44G  0 lvm   /
  └─rhel-swap 253:1    0    5G  0 lvm   [SWAP]
sdb             8:16   0   32G  0 disk  
├─sdb1          8:17   0  100M  0 part  
├─sdb2          8:18   0  100M  0 part  
├─sdb3          8:19   0  100M  0 part  
├─sdb4          8:20   0    1K  0 part  
├─sdb5          8:21   0  500M  0 part  
├─sdb6          8:22   0  200M  0 part  
│ └─vg0-lv1   253:2    0  104M  0 lvm   
├─sdb7          8:23   0  300M  0 part  
│ └─vg0-lv2   253:3    0  112M  0 lvm   
├─sdb8          8:24   0  500M  0 part  
│ └─md1         9:1    0  996M  0 raid5 
├─sdb9          8:25   0  400M  0 part  
│ └─vg0-lv2   253:3    0  112M  0 lvm   
├─sdb10         8:26   0  500M  0 part  
│ └─md1         9:1    0  996M  0 raid5 
├─sdb11         8:27   0  500M  0 part  
└─sdb12         8:28   0  200M  0 part  
sdc             8:32   0    6G  0 disk  
sdd             8:48   0    6G  0 disk  
sde             8:64   0   32G  0 disk  
sr0            11:0    1 1024M  0 rom   

Créez donc sur /dev/sde un volume physique ainsi qu'un groupe de volumes appelé kvm_storage :

[root@redhat9 ~]# pvcreate /dev/sde
  Physical volume "/dev/sde" successfully created.

[root@redhat9 ~]# vgcreate kvm_storage /dev/sde
  Volume group "kvm_storage" successfully created
[root@redhat9 ~]# vgs
  VG          #PV #LV #SN Attr   VSize   VFree  
  kvm_storage   1   0   0 wz--n- <32.00g <32.00g
  rhel          1   2   0 wz--n- <49.00g      0 
  vg0           3   2   0 wz--n- 880.00m 664.00m

Créez ensuite un volume logique, dénommé kvm_lv, occupant toute l'espace disponible dans le groupe de volumes :

[root@redhat9 ~]# lvcreate -l +100%FREE -n kvm_lv kvm_storage
  Logical volume "kvm_lv" created.

[root@redhat9 ~]# lvs
  LV     VG          Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  kvm_lv kvm_storage -wi-a----- <32.00g                                                    
  root   rhel        -wi-ao---- <44.00g                                                    
  swap   rhel        -wi-ao----   5.00g                                                    
  lv1    vg0         -wi-a----- 104.00m                                                    
  lv2    vg0         -wi-a----- 112.00m  

Créez ensuite un système de fichiers de type xfs sur le volume logique kvm_lv :

[root@redhat9 ~]# mkfs.xfs /dev/mapper/kvm_storage-kvm_lv
meta-data=/dev/mapper/kvm_storage-kvm_lv isize=512    agcount=4, agsize=2096896 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1 inobtcount=1 nrext64=0
data     =                       bsize=4096   blocks=8387584, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=16384, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Discarding blocks...Done.

Éditez ensuite le fichier /etc/fstab afin de monter automatiquement le volume logique sur /var/lib/libvirt/images :

[root@redhat9 ~]# vi /etc/fstab
[root@redhat9 ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Thu Oct 19 16:05:58 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rhel-root   /                       xfs     defaults        0 0
UUID=6f6c5bb9-30be-4734-bc23-03fed8541616 /boot                   xfs     defaults        0 0
/dev/mapper/rhel-swap   none                    swap    defaults        0 0
## KVM Guest Image Store
/dev/mapper/kvm_storage-kvm_lv            /var/lib/libvirt/images       xfs     defaults        0 0

Montez ensuite le volume logique :

[root@redhat9 ~]# df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               4.0M     0  4.0M   0% /dev
tmpfs                  3.8G     0  3.8G   0% /dev/shm
tmpfs                  1.6G  9.2M  1.5G   1% /run
/dev/mapper/rhel-root   44G  7.5G   37G  17% /
/dev/sda1             1014M  453M  562M  45% /boot
tmpfs                  769M   52K  769M   1% /run/user/42
tmpfs                  769M   36K  769M   1% /run/user/1000

[root@redhat9 ~]# mount -a
mount: (hint) your fstab has been modified, but systemd still uses
       the old version; use 'systemctl daemon-reload' to reload.

[root@redhat9 ~]# systemctl daemon-reload

[root@redhat9 ~]# df -h
Filesystem                      Size  Used Avail Use% Mounted on
devtmpfs                        4.0M     0  4.0M   0% /dev
tmpfs                           3.8G     0  3.8G   0% /dev/shm
tmpfs                           1.6G  9.2M  1.5G   1% /run
/dev/mapper/rhel-root            44G  7.5G   37G  17% /
/dev/sda1                      1014M  453M  562M  45% /boot
tmpfs                           769M   52K  769M   1% /run/user/42
tmpfs                           769M   36K  769M   1% /run/user/1000
/dev/mapper/kvm_storage-kvm_lv   32G  261M   32G   1% /var/lib/libvirt/images

Notez que ce volume est actuellement vide :

[root@redhat9 ~]# ls -l /var/lib/libvirt/images/
total 0

Utilisez la commande virsh pool-list pour voir les pools de stockage déjà configurés. Cette liste devrait être vide :

[root@redhat9 ~]# virsh pool-list
 Name   State   Autostart
---------------------------

Définissez le pool de stockage kvm-storagepool dans KVM grâce à la commande virsh pool-define-as :

[root@redhat9 ~]# virsh pool-define-as kvm-storagepool --type=dir --target /var/lib/libvirt/images/
Pool kvm-storagepool defined

Important : Consultez cette page pour connaître les types de pool utilisés par libvirt.

Démarrez maintenant le pool kvm-storagepool :

[root@redhat9 ~]# virsh pool-start kvm-storagepool
Pool kvm-storagepool started

Contrôlez l'état du pool kvm-storagepool :

[root@redhat9 ~]# virsh pool-list
 Name              State    Autostart
---------------------------------------
 kvm-storagepool   active   no

Important : Notez que le pool ne sera pas démarré automatiquement parce que la valeur d'autostart est no.

Fixez la valeur d'autostart à yes grâce à la commande virsh pool-autostart :

[root@redhat9 ~]# virsh pool-autostart kvm-storagepool
Pool kvm-storagepool marked as autostarted

[root@redhat9 ~]# virsh pool-list
 Name              State    Autostart
---------------------------------------
 kvm-storagepool   active   yes

Dernièrement, constatez les détails du pool configuré :

[root@redhat9 ~]# virsh pool-list --all --details
 Name              State     Autostart   Persistent   Capacity    Allocation   Available
------------------------------------------------------------------------------------------
 kvm-storagepool   running   yes         yes          31.93 GiB   260.27 MiB   31.68 GiB
[root@redhat9 ~]# df -h /var/lib/libvirt/images/
Filesystem                      Size  Used Avail Use% Mounted on
/dev/mapper/kvm_storage-kvm_lv   32G  261M   32G   1% /var/lib/libvirt/images

LAB #3 - Installation d'une Machine Virtuelle Red Hat 9

3.1 - Identification du Short ID

KVM sait virtualiser un grand nombre de systèmes d'exploitations. Pour consulter la liste complète des systèmes, il convient d'utiliser la commande osinfo-query os :

[root@redhat9 ~]# osinfo-query os | more
 Short ID             | Name                                               | Version  | ID                                      
----------------------+----------------------------------------------------+----------+-----------------------------------------
 almalinux8           | AlmaLinux 8                                        | 8        | http://almalinux.org/almalinux/8        
 almalinux9           | AlmaLinux 9                                        | 9        | http://almalinux.org/almalinux/9        
 alpinelinux3.10      | Alpine Linux 3.10                                  | 3.10     | http://alpinelinux.org/alpinelinux/3.10 
 alpinelinux3.11      | Alpine Linux 3.11                                  | 3.11     | http://alpinelinux.org/alpinelinux/3.11 
 alpinelinux3.12      | Alpine Linux 3.12                                  | 3.12     | http://alpinelinux.org/alpinelinux/3.12 
 alpinelinux3.13      | Alpine Linux 3.13                                  | 3.13     | http://alpinelinux.org/alpinelinux/3.13 
 alpinelinux3.14      | Alpine Linux 3.14                                  | 3.14     | http://alpinelinux.org/alpinelinux/3.14 
 alpinelinux3.15      | Alpine Linux 3.15                                  | 3.15     | http://alpinelinux.org/alpinelinux/3.15 
 alpinelinux3.16      | Alpine Linux 3.16                                  | 3.16     | http://alpinelinux.org/alpinelinux/3.16 
 alpinelinux3.17      | Alpine Linux 3.17                                  | 3.17     | http://alpinelinux.org/alpinelinux/3.17 
 alpinelinux3.18      | Alpine Linux 3.18                                  | 3.18     | http://alpinelinux.org/alpinelinux/3.18 
 alpinelinux3.19      | Alpine Linux 3.19                                  | 3.19     | http://alpinelinux.org/alpinelinux/3.19 
 alpinelinux3.5       | Alpine Linux 3.5                                   | 3.5      | http://alpinelinux.org/alpinelinux/3.5  
 alpinelinux3.6       | Alpine Linux 3.6                                   | 3.6      | http://alpinelinux.org/alpinelinux/3.6  
 alpinelinux3.7       | Alpine Linux 3.7                                   | 3.7      | http://alpinelinux.org/alpinelinux/3.7  
 alpinelinux3.8       | Alpine Linux 3.8                                   | 3.8      | http://alpinelinux.org/alpinelinux/3.8  
 alpinelinux3.9       | Alpine Linux 3.9                                   | 3.9      | http://alpinelinux.org/alpinelinux/3.9  
 alt.p10              | ALT p10 StarterKits                                | p10      | http://altlinux.org/alt/p10.starterkits 
 alt.p8               | ALT p8 StarterKits                                 | p8       | http://altlinux.org/alt/p8.starterkits  
 alt.p9               | ALT p9 StarterKits                                 | p9       | http://altlinux.org/alt/p9.starterkits  
 alt.sisyphus         | ALT regular                                        | sisyphus | http://altlinux.org/alt/sisyphus        
 alt10.0              | ALT 10.0                                           | 10.0     | http://altlinux.org/alt/10.0            
 alt10.1              | ALT 10.1                                           | 10.1     | http://altlinux.org/alt/10.1            
 alt8.0               | ALT 8 Education                                    | 8.0      | http://altlinux.org/alt/8.0             
 alt8.1               | ALT 8.1                                            | 8.1      | http://altlinux.org/alt/8.1             
 alt8.2               | ALT 8.2                                            | 8.2      | http://altlinux.org/alt/8.2             
 alt9.0               | ALT 9.0                                            | 9.0      | http://altlinux.org/alt/9.0             
 alt9.1               | ALT 9.1                                            | 9.1      | http://altlinux.org/alt/9.1             
 alt9.2               | ALT 9.2                                            | 9.2      | http://altlinux.org/alt/9.2             
 altlinux1.0          | Mandrake RE Spring 2001                            | 1.0      | http://altlinux.org/altlinux/1.0        
 altlinux2.0          | ALT Linux 2.0                                      | 2.0      | http://altlinux.org/altlinux/2.0        
 altlinux2.2          | ALT Linux 2.2                                      | 2.2      | http://altlinux.org/altlinux/2.2        
 altlinux2.4          | ALT Linux 2.4                                      | 2.4      | http://altlinux.org/altlinux/2.4        
 altlinux3.0          | ALT Linux 3.0                                      | 3.0      | http://altlinux.org/altlinux/3.0        
 altlinux4.0          | ALT Linux 4.0                                      | 4.0      | http://altlinux.org/altlinux/4.0        
 altlinux4.1          | ALT Linux 4.1                                      | 4.1      | http://altlinux.org/altlinux/4.1        
 altlinux5.0          | ALT Linux 5.0                                      | 5.0      | http://altlinux.org/altlinux/5.0        
 altlinux6.0          | ALT Linux 6.0                                      | 6.0      | http://altlinux.org/altlinux/6.0        
 altlinux7.0          | ALT Linux 7.0                                      | 7.0      | http://altlinux.org/altlinux/7.0        
 android-x86-8.1      | Android-x86 8.1                                    | 8.1      | http://android-x86.org/android-x86/8.1  
 android-x86-9.0      | Android-x86 9.0                                    | 9.0      | http://android-x86.org/android-x86/9.0  
 archlinux            | Arch Linux                                         |          | http://archlinux.org/archlinux/rolling  
 asianux-unknown      | Asianux unknown                                    | unknown  | http://asianux.com/asianux/unknown      
 asianux4.6           | Asianux Server 4 SP6                               | 4.6      | http://asianux.com/asianux/4.6          
 asianux4.7           | Asianux Server 4 SP7                               | 4.7      | http://asianux.com/asianux/4.7          
 asianux7.0           | Asianux Server 7                                   | 7.0      | http://asianux.com/asianux/7.0          
 asianux7.1           | Asianux Server 7 SP1                               | 7.1      | http://asianux.com/asianux/7.1          
 asianux7.2           | Asianux Server 7 SP2                               | 7.2      | http://asianux.com/asianux/7.2          
 asianux7.3           | Asianux Server 7 SP3                               | 7.3      | http://asianux.com/asianux/7.3          
 asianux8.0           | Asianux Server 8                                   | 8.0      | http://asianux.com/asianux/8.0          
 caasp-unknown        | SUSE CaaS Platform Unknown                         | unknown  | http://suse.com/caasp/unknown           
 caasp1.0             | SUSE CaaS Platform 1.0                             | 1.0      | http://suse.com/caasp/1.0               
 caasp2.0             | SUSE CaaS Platform 2.0                             | 2.0      | http://suse.com/caasp/2.0               
--More--

La liste des versions de Red Hat peut être consultée en recherchant la chaîne Red Hat dans la sortie de la commande précédente :

[root@redhat9 ~]# osinfo-query os | grep "Red Hat"
 rhel-atomic-7.0      | Red Hat Enterprise Linux Atomic Host 7.0           | 7.0      | http://redhat.com/rhel-atomic/7.0       
 rhel-atomic-7.1      | Red Hat Enterprise Linux Atomic Host 7.1           | 7.1      | http://redhat.com/rhel-atomic/7.1       
 rhel-atomic-7.2      | Red Hat Enterprise Linux Atomic Host 7.2           | 7.2      | http://redhat.com/rhel-atomic/7.2       
 rhel-atomic-7.3      | Red Hat Enterprise Linux Atomic Host 7.3           | 7.3      | http://redhat.com/rhel-atomic/7.3       
 rhel-atomic-7.4      | Red Hat Enterprise Linux Atomic Host 7.4           | 7.4      | http://redhat.com/rhel-atomic/7.4       
 rhel-unknown         | Red Hat Enterprise Linux Unknown                   | unknown  | http://redhat.com/rhel/unknown          
 rhel2.1              | Red Hat Enterprise Linux 2.1                       | 2.1      | http://redhat.com/rhel/2.1              
 rhel2.1.1            | Red Hat Enterprise Linux 2.1 Update 1              | 2.1.1    | http://redhat.com/rhel/2.1.1            
 rhel2.1.2            | Red Hat Enterprise Linux 2.1 Update 2              | 2.1.2    | http://redhat.com/rhel/2.1.2            
 rhel2.1.3            | Red Hat Enterprise Linux 2.1 Update 3              | 2.1.3    | http://redhat.com/rhel/2.1.3            
 rhel2.1.4            | Red Hat Enterprise Linux 2.1 Update 4              | 2.1.4    | http://redhat.com/rhel/2.1.4            
 rhel2.1.5            | Red Hat Enterprise Linux 2.1 Update 5              | 2.1.5    | http://redhat.com/rhel/2.1.5            
 rhel2.1.6            | Red Hat Enterprise Linux 2.1 Update 6              | 2.1.6    | http://redhat.com/rhel/2.1.6            
 rhel2.1.7            | Red Hat Enterprise Linux 2.1 Update 7              | 2.1.7    | http://redhat.com/rhel/2.1.7            
 rhel3                | Red Hat Enterprise Linux 3                         | 3        | http://redhat.com/rhel/3                
 rhel3.1              | Red Hat Enterprise Linux 3 Update 1                | 3.1      | http://redhat.com/rhel/3.1              
 rhel3.2              | Red Hat Enterprise Linux 3 Update 2                | 3.2      | http://redhat.com/rhel/3.2              
 rhel3.3              | Red Hat Enterprise Linux 3 Update 3                | 3.3      | http://redhat.com/rhel/3.3              
 rhel3.4              | Red Hat Enterprise Linux 3 Update 4                | 3.4      | http://redhat.com/rhel/3.4              
 rhel3.5              | Red Hat Enterprise Linux 3 Update 5                | 3.5      | http://redhat.com/rhel/3.5              
 rhel3.6              | Red Hat Enterprise Linux 3 Update 6                | 3.6      | http://redhat.com/rhel/3.6              
 rhel3.7              | Red Hat Enterprise Linux 3 Update 7                | 3.7      | http://redhat.com/rhel/3.7              
 rhel3.8              | Red Hat Enterprise Linux 3 Update 8                | 3.8      | http://redhat.com/rhel/3.8              
 rhel3.9              | Red Hat Enterprise Linux 3 Update 9                | 3.9      | http://redhat.com/rhel/3.9              
 rhel4.0              | Red Hat Enterprise Linux 4.0                       | 4.0      | http://redhat.com/rhel/4.0              
 rhel4.1              | Red Hat Enterprise Linux 4.1                       | 4.1      | http://redhat.com/rhel/4.1              
 rhel4.2              | Red Hat Enterprise Linux 4.2                       | 4.2      | http://redhat.com/rhel/4.2              
 rhel4.3              | Red Hat Enterprise Linux 4.3                       | 4.3      | http://redhat.com/rhel/4.3              
 rhel4.4              | Red Hat Enterprise Linux 4.4                       | 4.4      | http://redhat.com/rhel/4.4              
 rhel4.5              | Red Hat Enterprise Linux 4.5                       | 4.5      | http://redhat.com/rhel/4.5              
 rhel4.6              | Red Hat Enterprise Linux 4.6                       | 4.6      | http://redhat.com/rhel/4.6              
 rhel4.7              | Red Hat Enterprise Linux 4.7                       | 4.7      | http://redhat.com/rhel/4.7              
 rhel4.8              | Red Hat Enterprise Linux 4.8                       | 4.8      | http://redhat.com/rhel/4.8              
 rhel4.9              | Red Hat Enterprise Linux 4.9                       | 4.9      | http://redhat.com/rhel/4.9              
 rhel5.0              | Red Hat Enterprise Linux 5.0                       | 5.0      | http://redhat.com/rhel/5.0              
 rhel5.1              | Red Hat Enterprise Linux 5.1                       | 5.1      | http://redhat.com/rhel/5.1              
 rhel5.10             | Red Hat Enterprise Linux 5.10                      | 5.10     | http://redhat.com/rhel/5.10             
 rhel5.11             | Red Hat Enterprise Linux 5.11                      | 5.11     | http://redhat.com/rhel/5.11             
 rhel5.2              | Red Hat Enterprise Linux 5.2                       | 5.2      | http://redhat.com/rhel/5.2              
 rhel5.3              | Red Hat Enterprise Linux 5.3                       | 5.3      | http://redhat.com/rhel/5.3              
 rhel5.4              | Red Hat Enterprise Linux 5.4                       | 5.4      | http://redhat.com/rhel/5.4              
 rhel5.5              | Red Hat Enterprise Linux 5.5                       | 5.5      | http://redhat.com/rhel/5.5              
 rhel5.6              | Red Hat Enterprise Linux 5.6                       | 5.6      | http://redhat.com/rhel/5.6              
 rhel5.7              | Red Hat Enterprise Linux 5.7                       | 5.7      | http://redhat.com/rhel/5.7              
 rhel5.8              | Red Hat Enterprise Linux 5.8                       | 5.8      | http://redhat.com/rhel/5.8              
 rhel5.9              | Red Hat Enterprise Linux 5.9                       | 5.9      | http://redhat.com/rhel/5.9              
 rhel6-unknown        | Red Hat Enterprise Linux 6 Unknown                 | 6-unknown | http://redhat.com/rhel/6-unknown        
 rhel6.0              | Red Hat Enterprise Linux 6.0                       | 6.0      | http://redhat.com/rhel/6.0              
 rhel6.1              | Red Hat Enterprise Linux 6.1                       | 6.1      | http://redhat.com/rhel/6.1              
 rhel6.10             | Red Hat Enterprise Linux 6.10                      | 6.10     | http://redhat.com/rhel/6.10             
 rhel6.2              | Red Hat Enterprise Linux 6.2                       | 6.2      | http://redhat.com/rhel/6.2              
 rhel6.3              | Red Hat Enterprise Linux 6.3                       | 6.3      | http://redhat.com/rhel/6.3              
 rhel6.4              | Red Hat Enterprise Linux 6.4                       | 6.4      | http://redhat.com/rhel/6.4              
 rhel6.5              | Red Hat Enterprise Linux 6.5                       | 6.5      | http://redhat.com/rhel/6.5              
 rhel6.6              | Red Hat Enterprise Linux 6.6                       | 6.6      | http://redhat.com/rhel/6.6              
 rhel6.7              | Red Hat Enterprise Linux 6.7                       | 6.7      | http://redhat.com/rhel/6.7              
 rhel6.8              | Red Hat Enterprise Linux 6.8                       | 6.8      | http://redhat.com/rhel/6.8              
 rhel6.9              | Red Hat Enterprise Linux 6.9                       | 6.9      | http://redhat.com/rhel/6.9              
 rhel7-unknown        | Red Hat Enterprise Linux 7 Unknown                 | 7-unknown | http://redhat.com/rhel/7-unknown        
 rhel7.0              | Red Hat Enterprise Linux 7.0                       | 7.0      | http://redhat.com/rhel/7.0              
 rhel7.1              | Red Hat Enterprise Linux 7.1                       | 7.1      | http://redhat.com/rhel/7.1              
 rhel7.2              | Red Hat Enterprise Linux 7.2                       | 7.2      | http://redhat.com/rhel/7.2              
 rhel7.3              | Red Hat Enterprise Linux 7.3                       | 7.3      | http://redhat.com/rhel/7.3              
 rhel7.4              | Red Hat Enterprise Linux 7.4                       | 7.4      | http://redhat.com/rhel/7.4              
 rhel7.5              | Red Hat Enterprise Linux 7.5                       | 7.5      | http://redhat.com/rhel/7.5              
 rhel7.6              | Red Hat Enterprise Linux 7.6                       | 7.6      | http://redhat.com/rhel/7.6              
 rhel7.7              | Red Hat Enterprise Linux 7.7                       | 7.7      | http://redhat.com/rhel/7.7              
 rhel7.8              | Red Hat Enterprise Linux 7.8                       | 7.8      | http://redhat.com/rhel/7.8              
 rhel7.9              | Red Hat Enterprise Linux 7.9                       | 7.9      | http://redhat.com/rhel/7.9              
 rhel8-unknown        | Red Hat Enterprise Linux 8 Unknown                 | 8-unknown | http://redhat.com/rhel/8-unknown        
 rhel8.0              | Red Hat Enterprise Linux 8.0                       | 8.0      | http://redhat.com/rhel/8.0              
 rhel8.1              | Red Hat Enterprise Linux 8.1                       | 8.1      | http://redhat.com/rhel/8.1              
 rhel8.10             | Red Hat Enterprise Linux 8.10                      | 8.10     | http://redhat.com/rhel/8.10             
 rhel8.2              | Red Hat Enterprise Linux 8.2                       | 8.2      | http://redhat.com/rhel/8.2              
 rhel8.3              | Red Hat Enterprise Linux 8.3                       | 8.3      | http://redhat.com/rhel/8.3              
 rhel8.4              | Red Hat Enterprise Linux 8.4                       | 8.4      | http://redhat.com/rhel/8.4              
 rhel8.5              | Red Hat Enterprise Linux 8.5                       | 8.5      | http://redhat.com/rhel/8.5              
 rhel8.6              | Red Hat Enterprise Linux 8.6                       | 8.6      | http://redhat.com/rhel/8.6              
 rhel8.7              | Red Hat Enterprise Linux 8.7                       | 8.7      | http://redhat.com/rhel/8.7              
 rhel8.8              | Red Hat Enterprise Linux 8.8                       | 8.8      | http://redhat.com/rhel/8.8              
 rhel8.9              | Red Hat Enterprise Linux 8.9                       | 8.9      | http://redhat.com/rhel/8.9              
 rhel9-unknown        | Red Hat Enterprise Linux 9 Unknown                 | 9-unknown | http://redhat.com/rhel/9-unknown        
 rhel9.0              | Red Hat Enterprise Linux 9.0                       | 9.0      | http://redhat.com/rhel/9.0              
 rhel9.1              | Red Hat Enterprise Linux 9.1                       | 9.1      | http://redhat.com/rhel/9.1              
 rhel9.2              | Red Hat Enterprise Linux 9.2                       | 9.2      | http://redhat.com/rhel/9.2              
 rhel9.3              | Red Hat Enterprise Linux 9.3                       | 9.3      | http://redhat.com/rhel/9.3              
 rhel9.4              | Red Hat Enterprise Linux 9.4                       | 9.4      | http://redhat.com/rhel/9.4              
 rhl1.0               | Red Hat Linux 1.0                                  | 1.0      | http://redhat.com/rhl/1.0               
 rhl1.1               | Red Hat Linux 1.1                                  | 1.1      | http://redhat.com/rhl/1.1               
 rhl2.0               | Red Hat Linux 2.0                                  | 2.0      | http://redhat.com/rhl/2.0               
 rhl2.1               | Red Hat Linux 2.1                                  | 2.1      | http://redhat.com/rhl/2.1               
 rhl3.0.3             | Red Hat Linux 3.0.3                                | 3.0.3    | http://redhat.com/rhl/3.0.3             
 rhl4.0               | Red Hat Linux 4.0                                  | 4.0      | http://redhat.com/rhl/4.0               
 rhl4.1               | Red Hat Linux 4.1                                  | 4.1      | http://redhat.com/rhl/4.1               
 rhl4.2               | Red Hat Linux 4.2                                  | 4.2      | http://redhat.com/rhl/4.2               
 rhl5.0               | Red Hat Linux 5.0                                  | 5.0      | http://redhat.com/rhl/5.0               
 rhl5.1               | Red Hat Linux 5.1                                  | 5.1      | http://redhat.com/rhl/5.1               
 rhl5.2               | Red Hat Linux 5.2                                  | 5.2      | http://redhat.com/rhl/5.2               
 rhl6.0               | Red Hat Linux 6.0                                  | 6.0      | http://redhat.com/rhl/6.0               
 rhl6.1               | Red Hat Linux 6.1                                  | 6.1      | http://redhat.com/rhl/6.1               
 rhl6.2               | Red Hat Linux 6.2                                  | 6.2      | http://redhat.com/rhl/6.2               
 rhl7                 | Red Hat Linux 7                                    | 7        | http://redhat.com/rhl/7                 
 rhl7.1               | Red Hat Linux 7.1                                  | 7.1      | http://redhat.com/rhl/7.1               
 rhl7.2               | Red Hat Linux 7.2                                  | 7.2      | http://redhat.com/rhl/7.2               
 rhl7.3               | Red Hat Linux 7.3                                  | 7.3      | http://redhat.com/rhl/7.3               
 rhl8.0               | Red Hat Linux 8.0                                  | 8.0      | http://redhat.com/rhl/8.0               
 rhl9                 | Red Hat Linux 9                                    | 9        | http://redhat.com/rhl/9   

Afin d'installer une machine virtuelle nous avons besoin d'identifier le Short ID de la version à installer. Cette information se trouve dans la première colonne de la sortie de la commande. Les trois autres colonnes indiquent :

  • Colonne 2,
    • Name,
      • Le nom officiel du système d'exploitation,
  • Colonne 3,
    • Version,
      • La version du système d'exploitation,
  • Colonne 4,
    • ID,
      • Un URL censé pointer vers la page officielle de la version de la distribution. Attention : ces URLs sont bien souvent inexactes,

3.2 - Configuration du Stockage des ISOs

Afin d'installer la machine virtuelle il est nécessaire d'avoir accès à l'ISO de celui-ci. Pour des raisons de performances il est souhaitable que cet ISO soit stocké localement ou bien sur un système de fichiers distant sans latence. Un ISO de Rhel 9.4 a été préchargé dans le répertoire /isos de votre VM. Les commandes utilisées étaient donc :

# ls -l | grep rhel
-rw-r--r--. 1 trainee trainee 11085742080 Oct 25 16:38 rhel-9.4-x86_64-dvd.iso

# chmod 755 rhel-9.4-x86_64-dvd.iso 

# mkdir /isos

# mv rhel-9.4-x86_64-dvd.iso /isos

Afin de créer un dépôt d'installation de Rhel 9.4, le contenu du DVD doit être copier vers /www1 :

[root@redhat9 ~]# mkdir /mnt/rhel9-install/

[root@redhat9 ~]# mount -o loop,ro -t iso9660 /isos/rhel-9.4-x86_64-dvd.iso /mnt/rhel9-install/

[root@redhat9 ~]# cp -r /mnt/rhel9-install/ /www1

Cet ISO doit être accessible par l'utilisateur et le groupe qemu.

[root@redhat9 ~]# chown -R qemu:qemu /isos

3.3 - Installation du Domain

Démarrez maintenant l'installation d'une machine virtuelle Red Hat 9 grâce à la commande virt-install :

[root@redhat9 ~]# virt-install --network bridge:virbr0 --name testvm1 --os-variant=rhel9.4 --ram=3072 --vcpus=1 --disk path=/var/lib/libvirt/images/testvm1-os.qcow2,bus=virtio,size=5 --graphics none --location=/isos/rhel-9.4-x86_64-dvd.iso --extra-args="console=tty0 console=ttyS0,115200" --check all=off

Starting install...
Retrieving 'vmlinuz'                                                                                                                                                                       |  13 MB  00:00:00     
Retrieving 'initrd.img'                                                                                                                                                                    | 102 MB  00:00:02     
Allocating 'testvm1-os.qcow2'                                                                                                                                                              | 5.0 GB  00:00:03     
Creating domain...                                                                                                                                                                         |         00:00:00     
Running text console command: virsh --connect qemu:///system console testvm1
Connected to domain 'testvm1'
Escape character is ^] (Ctrl + ])
...
Starting installer, one moment...
anaconda 34.25.4.9-1.el9_4 for Red Hat Enterprise Linux 9.4 started.
 * installation log files are stored in /tmp during the installation
 * shell is available on TTY2
 * if the graphical installation interface fails to start, try again with the
   inst.text bootoption to start text installation
 * when reporting a bug add logs from /tmp as separate text/plain attachments
================================================================================
================================================================================
Text mode provides a limited set of installation options. It does not offer
custom partitioning for full control over the disk layout. Would you like to use
VNC mode instead?

1) Start VNC
2) Use text mode

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: 

Important : Notez que la quantité de mémoire est automatiquement et provisoirement augmentée à 3072 Mo afin que l'installation se déroule correctement. Notez aussi l'utilisation du mot domain. Un domain sous KVM est un terme utilisé pour décrire une machine virtuelle.

Dans cette commande on peut constater l'utilisation de plusieurs options importantes :

Option Commentaire
–network bridge: Fixe la valeur du pont à utiliser par la VM à virbr0
–name Indique le nom de la VM
–os-variant= Egal à la valeur du Short ID identifié au-dessus
–ram= Fixe la quantité de la RAM de la VM en Mo
–vcpus= Fixe le nombre de vCPUs de la VM
–disk path= Crée une image pour la VM, au format indiqué et de la taille indiquée en Go, à l'emplacement spécifié
–graphics La valeur none indique que l'installation aura lieu en mode texte. Notez que dans le cas d'une VM Windows™, la valeur doit être spice
–location= Indique l'emplacement de l'ISO à utiliser pour l'installation
–extra-args= Indique les options de la connectivité de la console

Format des Images

Une image est un disque virtuel. KVM reconnait les formats d'image suivants :

# qemu-img -h | grep Supported
Supported formats: blkdebug blklogwrites blkverify compress copy-before-write copy-on-read file ftp ftps host_cdrom host_device http https io_uring luks nbd null-aio null-co nvme nvme-io_uring preallocate qcow2 quorum raw rbd snapshot-access throttle vdi vhdx virtio-blk-vfio-pci virtio-blk-vhost-user virtio-blk-vhost-vdpa vmdk vpc

Convertir le Format de l'Image

Il est possible de convertir un format d'image existante au format qcow2 avec la commande qemu-img convert, notamment les images au format qed, raw, vdi, vhd et vmdk. Par exemple :

# qemu-img convert -f vmdk -O qcow2 myimage.vmdk mynewimage.qcow2

Dans le cas d'une image au format vdi d'Oracle VirtualBox, il est préférable de créer une image au format raw en utilisant la commande VBoxManage :

# VBoxManage clonehd myimage.vdi myrawimage.img --format raw

Ensuite il convient d'utiliser la commande qemu-img convert pour convertir l'image au format raw en qcow2 :

# qemu-img convert -f raw -O qcow2 myrawimage.img mynewimage.qcow2

3.4 - Configuration de l'Installation de l'OS Invité

Language Settings

Commencez par appuyer sur le choix 2 :

Starting installer, one moment...
anaconda 34.25.4.9-1.el9_4 for Red Hat Enterprise Linux 9.4 started.
 * installation log files are stored in /tmp during the installation
 * shell is available on TTY2
 * if the graphical installation interface fails to start, try again with the
   inst.text bootoption to start text installation
 * when reporting a bug add logs from /tmp as separate text/plain attachments
================================================================================
================================================================================
Text mode provides a limited set of installation options. It does not offer
custom partitioning for full control over the disk layout. Would you like to use
VNC mode instead?

1) Start VNC
2) Use text mode

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: 2

Ensuite choisissez le chnoix 1 :

================================================================================
================================================================================
Installation

1) [x] Language settings                 2) [x] Time settings
       (English (United States))                (America/New_York timezone)
3) [!] Installation source               4) [!] Software selection
       (Processing...)                          (Processing...)
5) [!] Installation Destination          6) [x] Kdump
       (Processing...)                          (Kdump is enabled)
7) [x] Network configuration             8) [!] Root password
       (Unknown)                                (Root account is disabled)
9) [!] User creation
       (No user will be created)

Please make a selection from the above ['b' to begin installation, 'q' to quit,
'r' to refresh]: 1
...
4) Assamese                27) Gujarati               50) Odia
5) Asturian                28) Hebrew                 51) Punjabi
6) Belarusian              29) Hindi                  52) Polish
7) Bulgarian               30) Croatian               53) Portuguese
8) Bangla                  31) Hungarian              54) Romanian
9) Catalan                 32) Interlingua            55) Russian
10) Czech                  33) Indonesian             56) Sinhala
11) Welsh                  34) Icelandic              57) Slovak
12) Danish                 35) Italian                58) Albanian
13) German                 36) Japanese               59) Serbian
14) Greek                  37) Georgian               60) Swedish
15) English                38) Kazakh                 61) Tamil
16) Esperanto              39) Khmer                  62) Telugu
17) Spanish                40) Kannada                63) Thai
18) Estonian               41) Korean                 64) Turkish
19) Basque                 42) Lithuanian             65) Ukrainian
20) Persian                43) Latvian                66) Urdu
21) Finnish                44) Malayalam              67) Mandarin Chinese
22) Filipino               45) Marathi
23) French                 46) Burmese

Please select language support to install ['b' to return to language list, 'c'
to continue, 'q' to quit, 'r' to refresh]:

Choisissez l'option 23 puis l'option 1 :

Please select language support to install ['b' to return to language list, 'c'
to continue, 'q' to quit, 'r' to refresh]: 23
================================================================================
================================================================================
Language settings

Available locales
1) French (France)         3) French (Belgium)        5) French (Luxembourg)
2) French (Canada)         4) French (Switzerland)

Please select language support to install ['b' to return to language list, 'c'
to continue, 'q' to quit, 'r' to refresh]: 1
================================================================================
================================================================================
Installation

1) [x] Language settings                 2) [x] Time settings
       (French (France))                        (America/New_York timezone)
3) [!] Installation source               4) [!] Software selection
       (Error setting up software               (Error checking software
       source)                                  selection)
5) [!] Installation Destination          6) [x] Kdump
       (Automatic partitioning                  (Kdump is enabled)
       selected)
7) [x] Network configuration             8) [!] Root password
       (Unknown)                                (Root account is disabled)
9) [!] User creation
       (No user will be created)

Please make a selection from the above ['b' to begin installation, 'q' to quit,
'r' to refresh]: 

Network configuration

Choisissez maintenant l'option 7 :

================================================================================
================================================================================
Installation

1) [x] Language settings                 2) [x] Time settings
       (French (France))                        (America/New_York timezone)
3) [!] Installation source               4) [!] Software selection
       (Error setting up software               (Error checking software
       source)                                  selection)
5) [!] Installation Destination          6) [x] Kdump
       (Automatic partitioning                  (Kdump is enabled)
       selected)
7) [x] Network configuration             8) [!] Root password
       (Unknown)                                (Root account is disabled)
9) [!] User creation
       (No user will be created)

Please make a selection from the above ['b' to begin installation, 'q' to quit,
'r' to refresh]: 7
================================================================================
================================================================================
Network configuration

Wired (enp1s0) disconnected


Host Name:


Current host name: localhost


1) Set host name
2) Configure device enp1s0

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]:

Choisissez ensuite l'option 1 pour définir le nom d'hôte de la VM :

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: 1
================================================================================
================================================================================
Enter a new value for 'Host Name' and press ENTER: testvm1.ittraining.loc
================================================================================
================================================================================
Network configuration

Wired (enp1s0) disconnected


Host Name: testvm1.ittraining.loc


Current host name: localhost


1) Set host name
2) Configure device enp1s0

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: 

Choisissez l'option 2 pour configurer la connexion réseau :

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: 2
================================================================================
================================================================================
Device configuration

1) IPv4 address or "dhcp" for DHCP
   dhcp
2) IPv4 netmask
3) IPv4 gateway
4) IPv6 address[/prefix] or "auto" for automatic, "dhcp" for DHCP, "ignore" to
   turn off
   auto
5) IPv6 default gateway
6) Nameservers (comma separated)
7) [x] Connect automatically after reboot
8) [ ] Apply configuration in installer

Configuring device enp1s0.

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: 

Configurez les options ainsi :

================================================================================
================================================================================
Device configuration

1) IPv4 address or "dhcp" for DHCP
   192.168.56.50
2) IPv4 netmask
   255.255.255.0
3) IPv4 gateway
   192.168.56.1
4) IPv6 address[/prefix] or "auto" for automatic, "dhcp" for DHCP, "ignore" to
   turn off
   auto
5) IPv6 default gateway
6) Nameservers (comma separated)
   8.8.8.8,8.8.4.4
7) [x] Connect automatically after reboot
8) [ ] Apply configuration in installer

Configuring device enp1s0.

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: 

Pour pouvoir installer les paquets logiciels, la configuration réseau doit être appliquée immédiatement. Choisissez donc l'option 8 :

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: 8
================================================================================
================================================================================
Device configuration

1) IPv4 address or "dhcp" for DHCP
   192.168.56.50
2) IPv4 netmask
   255.255.255.0
3) IPv4 gateway
   192.168.56.1
4) IPv6 address[/prefix] or "auto" for automatic, "dhcp" for DHCP, "ignore" to
   turn off
   auto
5) IPv6 default gateway
6) Nameservers (comma separated)
   8.8.8.8,8.8.4.4
7) [x] Connect automatically after reboot
8) [x] Apply configuration in installer

Configuring device enp1s0.

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: 

Validez les configurations actuelles en appuyant sur la touche c :

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: c
================================================================================
================================================================================
Network configuration

Wired (enp1s0) connected
 IPv4 Address: 192.168.56.50 Netmask: 255.255.255.0 Gateway: 192.168.56.1
 DNS: 8.8.8.8,8.8.4.4


Host Name: testvm1.ittraining.loc


Current host name: localhost


1) Set host name
2) Configure device enp1s0

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: 

Pour retourner au menu principal, appuyez sur la touche c de nouveau :

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: c
================================================================================
================================================================================
Installation

1) [x] Language settings                 2) [x] Time settings
       (French (France))                        (America/New_York timezone)
3) [!] Installation source               4) [!] Software selection
       (Error setting up software               (Error checking software
       source)                                  selection)
5) [!] Installation Destination          6) [x] Kdump
       (Automatic partitioning                  (Kdump is enabled)
       selected)
7) [x] Network configuration             8) [!] Root password
       (Connected: enp1s0)                      (Root account is disabled)
9) [!] User creation
       (No user will be created)

Please make a selection from the above ['b' to begin installation, 'q' to quit,
'r' to refresh]: 

Time settings

Choisissez maintenant l'option 2 pour définir le fuseau d'horaire de la VM :

Please make a selection from the above ['b' to begin installation, 'q' to quit,
'r' to refresh]: 2
================================================================================
================================================================================
Time settings

Timezone: America/New_York

NTP servers: not configured

1) Change timezone
2) Configure NTP servers

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: 

Choisissez l'option 1 pour modifier le fuseau d'horaire :

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: 1
================================================================================
================================================================================
Timezone settings

Available regions
1) Europe                  5) Antarctica              9) Indian
2) Asia                    6) Pacific                 10) Arctic
3) America                 7) Australia               11) US
4) Africa                  8) Atlantic                12) Etc

Please select the timezone. Use numbers or type names directly ['b' to go back
to region list, 'c' to continue, 'q' to quit, 'r' to refresh]: 

Appuyez sur la touche 1 pour choisir Europe :

Please select the timezone. Use numbers or type names directly ['b' to go back
to region list, 'c' to continue, 'q' to quit, 'r' to refresh]: 1
================================================================================
1) Amsterdam               21) Kaliningrad            41) San_Marino
2) Andorra                 22) Kirov                  42) Sarajevo
3) Astrakhan               23) Kyiv                   43) Saratov
4) Athens                  24) Lisbon                 44) Simferopol
5) Belgrade                25) Ljubljana              45) Skopje
6) Berlin                  26) London                 46) Sofia
7) Bratislava              27) Luxembourg             47) Stockholm
8) Brussels                28) Madrid                 48) Tallinn
9) Bucharest               29) Malta                  49) Tirane
10) Budapest               30) Mariehamn              50) Ulyanovsk
11) Busingen               31) Minsk                  51) Vaduz
12) Chisinau               32) Monaco                 52) Vatican
13) Copenhagen             33) Moscow                 53) Vienna
14) Dublin                 34) Oslo                   54) Vilnius
15) Gibraltar              35) Paris                  55) Volgograd
16) Guernsey               36) Podgorica              56) Warsaw
17) Helsinki               37) Prague                 57) Zagreb
18) Isle_of_Man            38) Riga                   58) Zurich
19) Istanbul               39) Rome
20) Jersey                 40) Samara

Please select the timezone. Use numbers or type names directly ['b' to go back
to region list, 'c' to continue, 'q' to quit, 'r' to refresh]: 

Puis choisissez l'option 35 pour Paris :

Please select the timezone. Use numbers or type names directly ['b' to go back
to region list, 'c' to continue, 'q' to quit, 'r' to refresh]: 35
================================================================================
================================================================================
Installation

1) [x] Language settings                 2) [x] Time settings
       (French (France))                        (Europe/Paris timezone)
3) [!] Installation source               4) [!] Software selection
       (Error setting up software               (Error checking software
       source)                                  selection)
5) [!] Installation Destination          6) [x] Kdump
       (Automatic partitioning                  (Kdump is enabled)
       selected)
7) [x] Network configuration             8) [!] Root password
       (Connected: enp1s0)                      (Root account is disabled)
9) [!] User creation
       (No user will be created)

Please make a selection from the above ['b' to begin installation, 'q' to quit,
'r' to refresh]:  

Root password

Pour définir le mot de passe root de la VM, choisissez l'option 8 et indiquez le mot de passe fenestros :

Please make a selection from the above ['b' to begin installation, 'q' to quit,
'r' to refresh]: 8
================================================================================
================================================================================
Root password

Please select new root password. You will have to type it twice.

Password: fenestros
Password (confirm): fenestros
================================================================================
================================================================================
Question

The password you have provided is weak: The password fails the dictionary check
- it is based on a dictionary word
Would you like to use it anyway?

Please respond 'yes' or 'no': yes
================================================================================
================================================================================
Installation

1) [x] Language settings                 2) [x] Time settings
       (French (France))                        (Europe/Paris timezone)
3) [!] Installation source               4) [!] Software selection
       (Error setting up software               (Error checking software
       source)                                  selection)
5) [!] Installation Destination          6) [x] Kdump
       (Automatic partitioning                  (Kdump is enabled)
       selected)
7) [x] Network configuration             8) [x] Root password
       (Connected: enp1s0)                      (Root password is set)
9) [ ] User creation
       (No user will be created)

Please make a selection from the above ['b' to begin installation, 'q' to quit,
'r' to refresh]: 

Installation source

Choisissez l'option 3 :

Please make a selection from the above ['b' to begin installation, 'q' to quit,
'r' to refresh]: 2
================================================================================
================================================================================
Installation source

Choose an installation source type.
1) CD/DVD
2) local ISO file
3) Network

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: 

Choisissez donc l'option 3 :

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: 3
================================================================================
================================================================================
Installation source

1) http://
2) https://
3) ftp://
4) nfs

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: 

Choisissez l'option 1 et indiquez l'URL http://192.168.56.2/rhel9-install :

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: 1
================================================================================
================================================================================
Specify Repo Options

1) Repo URL

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: 1
================================================================================
================================================================================
Enter a new value for 'Repo URL' and press ENTER: http://192.168.56.2/rhel9-install
  
================================================================================
================================================================================
Specify Repo Options

1) Repo URL
   http://192.168.56.2/rhel9-install

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: 

Appuyez sur c pour continuer :

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: c
================================================================================
================================================================================
Installation

1) [x] Language settings                 2) [x] Time settings
       (French (France))                        (Europe/Paris timezone)
3) [x] Installation source               4) [!] Software selection
       (Processing...)                          (Processing...)
5) [!] Installation Destination          6) [x] Kdump
       (Automatic partitioning                  (Kdump is enabled)
       selected)
7) [x] Network configuration             8) [x] Root password
       (Connected: enp1s0)                      (Root password is set)
9) [ ] User creation
       (No user will be created)

Please make a selection from the above ['b' to begin installation, 'q' to quit,
'r' to refresh]: 

Patientez le temps de Processing.

Software selection

Choisissez l'option 4 puis l'option 3 pour indiquer une installation minimale du système :

================================================================================
================================================================================
Installation

1) [x] Language settings                 2) [x] Time settings
       (French (France))                        (Europe/Paris timezone)
3) [x] Installation source               4) [!] Software selection
       (http://192.168.56.2/rhel9-insta         (Source changed - please verify)
       ll)
5) [!] Installation Destination          6) [x] Kdump
       (Automatic partitioning                  (Kdump is enabled)
       selected)
7) [x] Network configuration             8) [x] Root password
       (Connected: enp1s0)                      (Root password is set)
9) [ ] User creation
       (No user will be created)

Please make a selection from the above ['b' to begin installation, 'q' to quit,
'r' to refresh]: 4
================================================================================
================================================================================
Software selection

Base environment

1) [x] Server with GUI                  4) [ ] Workstation
2) [ ] Server                           5) [ ] Custom Operating System
3) [ ] Minimal Install                  6) [ ] Virtualization Host

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: 3
================================================================================
================================================================================
Software selection

Base environment

1) [ ] Server with GUI                  4) [ ] Workstation
2) [ ] Server                           5) [ ] Virtualization Host
3) [x] Minimal Install                  6) [ ] Custom Operating System

Appuyez ensuite sur la touche c pour pouvoir éventuellement choisir des installations supplémentaires :

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: c
================================================================================
================================================================================
Software selection

Additional software for selected environment

1) [ ] Standard                         8) [ ] Headless Management
2) [ ] Legacy UNIX Compatibility        9) [ ] Network Servers
3) [ ] Console Internet Tools           10) [ ] RPM Development Tools
4) [ ] Container Management             11) [ ] Scientific Support
5) [ ] Development Tools                12) [ ] Security Tools
6) [ ] .NET Development                 13) [ ] Smart Card Support
7) [ ] Graphical Administration Tools   14) [ ] System Tools

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: c

Ne choisissez rien dans la liste et appuyez simplement sur la touche c pour revenir au menu principal :

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: c
================================================================================
================================================================================
Installation

1) [x] Language settings                 2) [x] Time settings
       (French (France))                        (Europe/Paris timezone)
3) [!] Installation source               4) [!] Software selection
       (Processing...)                          (Processing...)
5) [!] Installation Destination          6) [x] Kdump
       (Automatic partitioning                  (Kdump is enabled)
       selected)
7) [x] Network configuration             8) [x] Root password
       (Connected: enp1s0)                      (Root password is set)
9) [ ] User creation
       (No user will be created)

Please make a selection from the above ['b' to begin installation, 'q' to quit,
'r' to refresh]: r
================================================================================
================================================================================
Installation

1) [x] Language settings                 2) [x] Time settings
       (French (France))                        (Europe/Paris timezone)
3) [x] Installation source               4) [x] Software selection
       (http://192.168.56.2/rhel9-insta         (Minimal Install)
       ll)                                          
5) [!] Installation Destination          6) [x] Kdump
       (No disks selected)                      (Kdump is enabled)
7) [x] Network configuration             8) [x] Root password
       (Wired (enp1s0) connected)               (Password is set.)
9) [ ] User creation
       (No user will be created)

Please make a selection from the above ['b' to begin installation, 'q' to quit,
'r' to refresh]:

Installation Destination

Choisissez l'option 5 pour définir l'emplacement de l'installation :

================================================================================
================================================================================
Installation

1) [x] Language settings                 2) [x] Time settings
       (French (France))                        (Europe/Paris timezone)
3) [x] Installation source               4) [x] Software selection
       (http://192.168.56.2/rhel9-insta         (Minimal Install)
       ll)                                     
5) [!] Installation Destination          6) [x] Kdump
       (No disks selected)                      (Kdump is enabled)
7) [x] Network configuration             8) [x] Root password
       (Wired (enp1s0) connected)               (Password is set.)
9) [ ] User creation
       (No user will be created)

Please make a selection from the above ['b' to begin installation, 'q' to quit,
'r' to refresh]: 5
Probing storage...

Séléctionnez le disque vda et appuyez sur la touche c :

Please make a selection from the above ['b' to begin installation, 'q' to quit,
'r' to refresh]: 5
Probing storage...
================================================================================
================================================================================
Installation Destination

1) [x] DISK: 5 GiB (vda)

1 disk selected; 5 GiB capacity; 5 GiB free

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: c

A ce stade il vous est possible de choisir l'option 4 et de créer des partitions spécifiques en termes de points de montage en fonction de l'utilisation prévue pour la VM. Dans le cas de ce LAB, appuyez simplement sur la touche c :

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: c
================================================================================
================================================================================
Partitioning Options

1) [ ] Replace Existing Linux system(s)
2) [x] Use All Space
3) [ ] Use Free Space
4) [ ] Manually assign mount points

Installation requires partitioning of your hard drive. Select what space to use
for the install target or manually assign mount points.

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: c

A ce stade il vous est possible de choisir le type d'installation, soit Standard Partition, LVM ou LVM Thin Provisioning. Notez que le choix par défaut proposé est LVM :

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: c
================================================================================
================================================================================
Partition Scheme Options

1) [ ] Standard Partition
2) [x] LVM
3) [ ] LVM Thin Provisioning

Select a partition scheme configuration.

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: 1

Bien que préférable de choisir l'option par défaut pour des VMs en production . Par contre, pour des raisons liées à la suite de ce LAB, choisissez l'option 1 puis sur la touche c :

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: 1
================================================================================
================================================================================
Partition Scheme Options

1) [x] Standard Partition
2) [ ] LVM
3) [ ] LVM Thin Provisioning

Select a partition scheme configuration.

Please make a selection from the above ['c' to continue, 'q' to quit, 'r' to
refresh]: c
Generating updated storage configuration
Checking storage configuration...

Démarrer l'Installation

De retour au menu principal, choisissez l'option b pour démarrer l'installation :

================================================================================
================================================================================
Installation

1) [x] Language settings                 2) [x] Time settings
       (French (France))                        (Europe/Paris timezone)
3) [x] Installation source               4) [x] Software selection
       (http://192.168.56.2/rhel9-insta         (Minimal Install)
       ll)                                     
5) [x] Installation Destination          6) [x] Kdump
       (Automatic partitioning                  (Kdump is enabled)
       selected)
7) [x] Network configuration             8) [x] Root password
       (Wired (enp1s0) connected)               (Password is set.)
9) [ ] User creation
       (No user will be created)

Please make a selection from the above ['b' to begin installation, 'q' to quit,
'r' to refresh]: b

Important : Notez que nous n'avons pas spécifié d'utilisateurs. Cette décision n'est pas bloquante pour la suite de l'installation.

L'installation démarre et se poursuit :

...
Performing post-installation setup tasks
Configuring filesystem.x86_64
Configuring ca-certificates.noarch
Configuring grub2-common.noarch
Configuring authselect-libs.x86_64
Configuring kernel-modules-core.x86_64
Configuring kernel-core.x86_64
Configuring kernel-modules.x86_64
Configuring rpm.x86_64
Configuring selinux-policy-targeted.noarch
Configuring subscription-manager.x86_64
Configuring sssd-common.x86_64
Configuring crypto-policies-scripts.noarch
Configuring kexec-tools.x86_64
Configuring microcode_ctl.noarch
...
Verifying rsyslog-logrotate.x86_64 (368/368)
.
Installing boot loader
..
Performing post-installation setup tasks
.
Configuring Red Hat subscription
....
Configuring installed system
..............
Writing network configuration
.
Creating users
.....
Configuring addons
.
Generating initramfs
....
Storing configuration files and kickstarts
.
Running post-installation scripts
.
Installation complete

Use of this product is subject to the license agreement found at:
/usr/share/redhat-release/EULA

Démarrer la VM

A l'issu de l'installation, appuyez sur la touche [Enter] pour démarrez la VM :

Installation complete. Press ENTER to quit: 
...
[  OK  ] Stopped System Logging Service.
[  OK  ] Stopped target Network is Online.
[  OK  ] Stopped target Network.
         Stopping Network Manager...
[  OK  ] Started Show Plymouth Reboot Screen.
[  OK  ] Stopped Network Manager.
[  OK  ] Stopped target Preparation for Network.
[  OK  ] Stopped Generate network units from Kernel command line.
[  OK  ] Stopped Disk Manager.
..

3.5 - Vérification de la VM Invitée

Au prompt, connectez-vous en tant que root avec le mot de passe fenestros :

Red Hat Enterprise Linux 9.4 (Plow)
Kernel 5.14.0-427.13.1.el9_4.x86_64 on an x86_64

testvm1 login: root
Mot de passe : fenestros
[root@testvm1 ~]# 

Réseau

Vérifiez la prise en compte d'une adresse IPv4 dans le réseau 192.168.56.0/24 :

[root@testvm1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:cf:55:1e brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.50/24 brd 192.168.56.255 scope global noprefixroute enp1s0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fecf:551e/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

Internet

Vérifiez la connectivité de la VM :

[root@testvm1 ~]# ping www.free.fr
PING www.free.fr (212.27.48.10) 56(84) octets de données.
64 octets de www.free.fr (212.27.48.10) : icmp_seq=1 ttl=47 temps=89.2 ms
64 octets de www.free.fr (212.27.48.10) : icmp_seq=2 ttl=47 temps=89.2 ms
64 octets de www.free.fr (212.27.48.10) : icmp_seq=3 ttl=47 temps=89.2 ms
64 octets de www.free.fr (212.27.48.10) : icmp_seq=4 ttl=47 temps=89.1 ms

--- statistiques ping www.free.fr ---
4 paquets transmis, 4 reçus, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 89.129/89.150/89.162/0.012 ms

Détachez-vous de la VM :

[root@testvm1 ~]# [ALT GR]+[CTRL]+[)]
[root@redhat9 ~]#

Utilisez la commande virsh pour constater le statut de la machine virtuelle:

[root@redhat9 ~]# virsh list --all
 Id   Name      State
-------------------------
 2    testvm1   running

Important : Notez que la VM est dans un état de running et que son Id est de 2.

Important : Notez l'utilisation de la séquence de touches [ALT GR]+[CTRL]+[)] sur un clavier français afin de se détacher de la VM. C'est-à-dire, la touche [AltGr] et rester appuyer plus la touche [Ctrl] et rester appuyer plus la touche [)]. Si cela ne fonctionne pas utilisez [CTRL]+[VER MAJ]+[5].

LAB #4 - 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.

4.1 - Création d'une VM à partir d'un Clone

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@redhat9 ~]# virsh shutdown 2
Domain '2' is being shutdown

Vérifiez ensuite que la VM est arrêtée :

[root@redhat9 ~]# virsh list --all
 Id   Name      State
--------------------------
 -    testvm1   shut off

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@redhat9 ~]# virt-clone --original testvm1 --name testvm2 -f /var/lib/libvirt/images/testvm2.qcow2
Allocating 'testvm2.qcow2'                                     | 5.0 GB  00:16:01     

Clone 'testvm2' created successfully.

Pour voir la liste des VMs, utilisez la commande suivante :

[root@redhat9 ~]# virsh list --all
 Id   Name      State
--------------------------
 -    testvm1   shut off
 -    testvm2   shut off
 

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 #5 - 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 (Copy On Write),
    • 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.

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

[root@redhat9 ~]# 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 :

  • –domain,
    • le domaine à l'origine du snapshot,
  • –name,
    • le nom attribué au snapshot.
[root@redhat9 ~]# virsh snapshot-create-as --domain testvm1 --name testvm1-snap-`date "+%Y-%m-%d_%H:%M:%S"`
Domain snapshot testvm1-snap-2024-10-26_13:10:37 created

Vérifiez que le snapshot a bien été pris en compte :

[root@redhat9 ~]# virsh snapshot-list testvm1
 Name                                   Creation Time               State
-----------------------------------------------------------------------------
 testvm1-snap-2024-10-26_13:10:37       2024-10-26 13:10:37 +0200   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@redhat9 ~]# virsh snapshot-info --domain testvm1 --current
Name:           testvm1-snap-2024-10-26_13:10:37
Domain:         testvm1
Current:        yes
State:          shutoff
Location:       internal
Parent:         testvm1-snap-date +%Y-%m-%d_%H:%M:%S
Children:       0
Descendants:    0
Metadata:       yes

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

[root@redhat9 ~]# virsh start testvm2
Domain 'testvm2' started

Vérifiez ensuite l'état de la VM :

[root@redhat9 ~]# virsh list --all
 Id   Name      State
--------------------------
 1    testvm2   running
 -    testvm1   shut off

Créez un snapshot de testvm2 :

[root@redhat9 ~]# virsh snapshot-create-as --domain testvm2 --name testvm2-snap-`date "+%Y-%m-%d_%H:%M:%S"`
Domain snapshot testvm2-snap-2024-10-26_13:14:02 created

Consultez la liste des snapshots pour le domaine testvm2 :

[root@redhat9 ~]# virsh snapshot-list testvm2
 Name                               Creation Time               State
-------------------------------------------------------------------------
 testvm2-snap-2024-10-26_13:14:02   2024-10-26 13:14:02 +0200   running

Pour obtenir des informations concernant le dernier snapshot effectué pour le domaine testvm2, utilisez la commande suivante :

[root@redhat9 ~]# virsh snapshot-info --domain testvm2 --current
Name:           testvm2-snap-2024-10-26_13:14:02
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.

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

[root@redhat9 ~]# virsh shutdown testvm2
Domain 'testvm2' is being shutdown

[root@redhat9 ~]# virsh list --all
 Id   Name      State
--------------------------
 -    testvm1   shut off
 -    testvm2   shut off

Restaurez ensuite le snapshot :

[root@centos8 ~]# [root@redhat9 ~]# virsh snapshot-revert --domain testvm2 --snapshotname testvm2-snap-2024-10-26_13:14:02 --running
Domain snapshot testvm2-snap-2024-10-26_13:14:02 reverted

[root@redhat9 ~]# virsh list --all
 Id   Name      State
--------------------------
 1    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@redhat9 ~]# virsh console 1
Connected to domain 'testvm2'
Escape character is ^] (Ctrl + ])
[Enter]
testvm1 login: root
Mot de passe : fenestros
Dernière connexion : Fri Oct 25 17:52:49 sur ttyS0
[root@testvm1 ~]#

[root@testvm1 ~]# [CTRL]+[VER MAJ]+[5]
[root@redhat9 ~]#

5.4 - Suppression de Snapshots

Les snapshots peuvent être supprimés grâce à l'utilisation de la commande virsh snapshot-delete :

[root@redhat9 ~]# virsh snapshot-list testvm1
 Name                               Creation Time               State
-------------------------------------------------------------------------
 testvm1-snap-2024-10-26_13:10:37   2024-10-26 13:10:37 +0200   shutoff

[root@redhat9 ~]# virsh snapshot-delete --domain testvm1 --snapshotname "testvm1-snap-2024-10-26_13:10:37"
Domain snapshot testvm1-snap-2024-10-26_13:10:37 deleted

[root@redhat9 ~]# virsh snapshot-list testvm1
 Name   Creation Time   State
-------------------------------

[root@redhat9 ~]# virsh snapshot-list testvm2
 Name                               Creation Time               State
-------------------------------------------------------------------------
 testvm2-snap-2024-10-26_13:14:02   2024-10-26 13:14:02 +0200   running

[root@redhat9 ~]# virsh snapshot-delete --domain testvm2 --snapshotname "testvm2-snap-2024-10-26_13:14:02"
Domain snapshot testvm2-snap-2024-10-26_13:14:02 deleted

[root@redhat9 ~]# virsh snapshot-list testvm2
 Name   Creation Time   State
-------------------------------

LAB #6 - 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.

6.1 - Création d'une Sauvegarde du Disque de la VM

Actuellement seule la VM testvm2 est en cours d'exécution :

[root@redhat9 ~]# virsh list
 Id   Name      State
-------------------------
 1    testvm2   running
 

Créez donc un répertoire destiné à contenir les copies créées :

 
[root@redhat9 ~]# mkdir /vm-backups

Placez-vous dans le répertoire des images /var/lib/libvirt/images/ :

[root@redhat9 ~]# cd /var/lib/libvirt/images/

[root@redhat9 images]# ls -l
total 4193900
-rw-------. 1 root root 5369757696 Oct 26 13:30 testvm1-os.qcow2
-rw-------. 1 qemu qemu 2402222080 Oct 26 13:32 testvm2.qcow2

Copiez ensuite l'image vers le répertoire /vm-backups :

[root@redhat9 images]# cp -p testvm1-os.qcow2 /vm-backups/testvm1-backup-`date "+%Y-%m-%d_%H:%M:%S"` &
[1] 69708

Important : Notez que cette copie est effectuée en arrière plan afin de libérer le prompt en avant plan du terminal.

6.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/ :

[root@redhat9 images]# cd /etc/libvirt/qemu/

[root@redhat9 qemu]# ls -lR
.:
total 16
drwx------. 2 root root    6 Sep 12 12:48 autostart
drwx------. 3 root root   42 Oct 24 14:42 networks
-rw-------. 1 root root 6741 Oct 25 17:11 testvm1.xml
-rw-------. 1 root root 6738 Oct 26 13:23 testvm2.xml

./autostart:
total 0

./networks:
total 4
drwx------. 2 root root  25 Oct 24 13:15 autostart
-rw-------. 1 root root 574 Oct 24 14:42 default.xml

./networks/autostart:
total 0
lrwxrwxrwx. 1 root root 14 Oct 24 13:15 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@redhat9 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>77bb92d1-83a7-4c01-971c-1eb2f9f41c92</uuid>
  <metadata>
    <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
      <libosinfo:os id="http://redhat.com/rhel/9.4"/>
    </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-rhel9.4.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
  </features>
  <cpu mode='host-passthrough' check='none' migratable='on'/>
  <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' discard='unmap'/>
      <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='pci' index='0' model='pcie-root'/>
    <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>
    <controller type='pci' index='8' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='8' port='0xf'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x7'/>
    </controller>
    <controller type='pci' index='9' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='9' port='0x10'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>
    </controller>
    <controller type='pci' index='10' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='10' port='0x11'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/>
    </controller>
    <controller type='pci' index='11' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='11' port='0x12'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/>
    </controller>
    <controller type='pci' index='12' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='12' port='0x13'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x3'/>
    </controller>
    <controller type='pci' index='13' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='13' port='0x14'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x4'/>
    </controller>
    <controller type='pci' index='14' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='14' port='0x15'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x5'/>
    </controller>
    <controller type='sata' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:cf:55:1e'/>
      <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'/>
    <audio id='1' type='none'/>
    <watchdog model='itco' action='reset'/>
    <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@redhat9 qemu]# cp -p testvm1.xml /vm-backups/testvm1.xml-backup-`date "+%Y-%m-%d_%H:%M:%S"`
[1]+  Done                    cp -i -p testvm1-os.qcow2 /vm-backups/testvm1-backup-`date "+%Y-%m-%d_%H:%M:%S"`  (wd: /var/lib/libvirt/images)
(wd now: /etc/libvirt/qemu)

Une fois le processus en arrière plan terminé, vous pouvez constater la présence des deux fichiers dans le répertoire

[root@redhat9 vm-backups]# ls -l
total 1939640
-rw-------. 1 root root 5369757696 Oct 26 13:30 testvm1-backup-2024-10-26_13:36:27
-rw-------. 1 root root       6741 Oct 25 17:11 testvm1.xml-backup-2024-10-26_13:42:34

Notez que la taille de l'image de testvm1 est de 5 GiB malgré le fait qu'il n'y ait que 1,76 GiB alloué :

[root@redhat9 vm-backups]# virsh vol-info /var/lib/libvirt/images/testvm1-os.qcow2
Name:           testvm1-os.qcow2
Type:           file
Capacity:       5.00 GiB
Allocation:     1.76 GiB

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

[root@redhat9 vm-backups]# mkdir testvm1

[root@redhat9 vm-backups]# mv *2024* testvm1

[root@redhat9 vm-backups]# ls
testvm1

[root@redhat9 vm-backups]# tar cvzf testvm1-backup-`date "+%Y-%m-%d"`.tar.gz testvm1/
testvm1/
testvm1/testvm1-backup-2024-10-26_13:36:27
testvm1/testvm1.xml-backup-2024-10-26_13:42:34

[root@redhat9 vm-backups]# ls -l
total 1081932
drwxr-xr-x. 2 root root         94 Oct 26 13:47 testvm1
-rw-r--r--. 1 root root 1107897849 Oct 26 13:58 testvm1-backup-2024-10-26.tar.gz

LAB #7 - Augmentation de la Taille du Disque

7.1 - Augmenter la Taille du Disque avec la Commande qemu-img

Augmenter la Taille du Disque de la VM

Les images des VMs sont stockées dans le pool kvm-storagepool :

[root@redhat9 vm-backups]# virsh pool-list
 Name              State    Autostart
---------------------------------------
 isos              active   yes
 kvm-storagepool   active   yes
 root              active   yes

Consultez le contenu du pool kvm-storagepool :

[root@redhat9 vm-backups]# virsh vol-list kvm-storagepool
 Name               Path
--------------------------------------------------------------
 testvm1-os.qcow2   /var/lib/libvirt/images/testvm1-os.qcow2
 testvm2.qcow2      /var/lib/libvirt/images/testvm2.qcow2

Consultez ensuite les informations concernant l'image testvm1-os.qcow2 :

[root@redhat9 vm-backups]# virsh vol-info /var/lib/libvirt/images/testvm1-os.qcow2 
Name:           testvm1-os.qcow2
Type:           file
Capacity:       5.00 GiB
Allocation:     1.76 GiB

Pour pouvoir redimensionner la taille de l'image il convient d'utiliser la commande qemu-img resize :

[root@redhat9 vm-backups]# qemu-img resize /var/lib/libvirt/images/testvm1-os.qcow2 +2G
Image resized.

Vérifiez ensuite la prise en charge de la modification :

[root@redhat9 vm-backups]# virsh vol-info /var/lib/libvirt/images/testvm1-os.qcow2
Name:           testvm1-os.qcow2
Type:           file
Capacity:       7.00 GiB
Allocation:     1.76 GiB

Augmenter la Taille de la Partition Système de la VM

Démarrez la VM testvm1 :

[root@redhat9 vm-backups]# virsh start testvm1
Domain 'testvm1' started

Connectez-vous à la VM grâce à la commande virsh console :

[root@redhat9 vm-backups]# virsh console testvm1
Connected to domain 'testvm1'
Escape character is ^] (Ctrl + ])
[  OK  ] Finished Network Manager Wait Online.
[  OK  ] Reached target Network is Online.
         Starting Crash recovery kernel arming...
         Starting System Logging Service...
[  OK  ] Started System Logging Service.
[  OK  ] Reached target Multi-User System.
         Starting Record Runlevel Change in UTMP...
[  OK  ] Finished Record Runlevel Change in UTMP.
[   18.704937] block vda: the capability attribute has been deprecated.
[  OK  ] Finished Crash recovery kernel arming.

Red Hat Enterprise Linux 9.4 (Plow)
Kernel 5.14.0-427.13.1.el9_4.x86_64 on an x86_64

testvm1 login: root
Mot de passe : fenestros
Dernière connexion : Fri Oct 25 17:52:49 sur ttyS0

Constatez la taille de la partition /dev/vda3 :

[root@testvm1 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sr0     11:0    1 1024M  0 rom  
vda    253:0    0    7G  0 disk 
├─vda1 253:1    0    1G  0 part /boot
├─vda2 253:2    0  512M  0 part [SWAP]
└─vda3 253:3    0  3,5G  0 part /

Important : Notez que, pour le système d'exploitation de la VM, la taille du disque est toujours 5 Go (1G + 512M +3,5G).

Constatez ensuite l'espace disponible sur /dev/vda3 :

[

[root@testvm1 ~]# df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
devtmpfs           4,0M       0  4,0M   0% /dev
tmpfs              888M       0  888M   0% /dev/shm
tmpfs              356M    5,0M  351M   2% /run
/dev/vda3          3,5G    1,3G  2,3G  36% /
/dev/vda1          960M    216M  745M  23% /boot
tmpfs              178M       0  178M   0% /run/user/0

La partition /dev/vda3 est la partition système de la VM. Pour modifier sa taille nous avons besoin d'installer les paquets cloud-utils-growpart et gdisk :

[root@testvm1 ~]# dnf -y install cloud-utils-growpart gdisk
Mise à jour des référentiels de gestion des abonnements.
Identité du consommateur illisible

This system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register.

Erreur : Il ny a pas de dépôts activés dans « /etc/yum.repos.d", "/etc/yum/repos.d", "/etc/distro.repos.d ».

Notez que le système n'a pas été enregistré auprès de Red Hat. Utilisez donc la commande subscription-manager :

[root@testvm1 ~]# subscription-manager register
Inscription sur : subscription.rhsm.redhat.com:443/subscription
Nom d'utilisateur : <your_login> 
Mot de passe : <your_password>
Le système a été inscrit avec l'ID : 30c62b0c-3690-4534-9db3-7a4d9308fd46
Le nom du système inscrit est : testvm1.ittraining.loc

Installez les paquets cloud-utils-growpart et gdisk :

[root@testvm1 ~]# dnf -y install cloud-utils-growpart gdisk

Le paquet cloud-utils-growpart fournit la commande growpart qui permet d'étendre la partition système jusqu'à la limite de l'espace disque disponible. La commande prend deux arguments :

  • le nom du fichier spécial - /dev/vda,
  • le numéro de la partition à augmenter en taille - 3.
[root@testvm1 ~]# growpart /dev/vda 3
CHANGED: partition=3 start=3147776 old: size=7337984 end=10485759 new: size=11532255 end=14680030

L'utilisation de la commande lsblk démontre clairement l'augmentation de la taille de la partition /dev/vda3 :

[root@testvm1 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sr0     11:0    1 1024M  0 rom  
vda    253:0    0    7G  0 disk 
├─vda1 253:1    0    1G  0 part /boot
├─vda2 253:2    0  512M  0 part [SWAP]
└─vda3 253:3    0  5,5G  0 part /

Important : Notez que, pour le système d'exploitation de la VM, la taille du disque est maintenant de 7 Go (1G + 512M +5,5G).

Par contre, l'exécution de la commande df démontre que le système ne voit toujours un filesystem qu'une taille 5 Go :

[root@testvm1 ~]# df -TH
Sys. de fichiers Type     Taille Utilisé Dispo Uti% Monté sur
devtmpfs         devtmpfs   4,2M       0  4,2M   0% /dev
tmpfs            tmpfs      931M       0  931M   0% /dev/shm
tmpfs            tmpfs      373M    5,3M  368M   2% /run
/dev/vda3        xfs        3,7G    1,5G  2,3G  40% /
/dev/vda1        xfs        1,1G    226M  782M  23% /boot
tmpfs            tmpfs      187M       0  187M   0% /run/user/0

Augmenter la Taille du Système de Fichiers

Pour augmenter la taille du système de fichiers se trouvant sur /dev/vda3, il conveint d'utiliser la commande xfs_growfs :

[root@testvm1 ~]# xfs_growfs /
meta-data=/dev/vda3              isize=512    agcount=4, agsize=229312 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1 inobtcount=1 nrext64=0
data     =                       bsize=4096   blocks=917248, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=16384, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 917248 to 1441531

Cette fois-ci la sortie de la commande df démontre bien l'augmentation de la taille du système de fichiers :

[root@testvm1 ~]# df -TH
Sys. de fichiers Type     Taille Utilisé Dispo Uti% Monté sur
devtmpfs         devtmpfs   4,2M       0  4,2M   0% /dev
tmpfs            tmpfs      931M       0  931M   0% /dev/shm
tmpfs            tmpfs      373M    5,3M  368M   2% /run
/dev/vda3        xfs        5,9G    1,5G  4,4G  26% /
/dev/vda1        xfs        1,1G    226M  782M  23% /boot
tmpfs            tmpfs      187M       0  187M   0% /run/user/0

[root@testvm1 ~]# [CTRL]+[VER MAJ]+[5]
[root@redhat9 vm-backups]#

7.2 - Augmenter la Taille du Disque avec la Commande virsh

Augmenter la Taille du Disque de la VM

La VM testvm2 est en cours d'exécution :

[root@redhat9 vm-backups]# virsh list --all
 Id   Name      State
-------------------------
 1    testvm2   running
 2    testvm1   running

Utilisez la commande virsh domblklist pour afficher l'emplacement de l'image de la VM testvm2 :

[root@redhat9 vm-backups]# virsh domblklist testvm2
 Target   Source
-------------------------------------------------
 vda      /var/lib/libvirt/images/testvm2.qcow2
 sda      -

Cette fois, utilisez la commande virsh blockresize pour redimensionner la taille de l'image :

[root@redhat9 vm-backups]# virsh blockresize --domain testvm2 --path /var/lib/libvirt/images/testvm2.qcow2 --size 7G
Block device '/var/lib/libvirt/images/testvm2.qcow2' is resized

Important : Notez que la commande qemu-img resize nécessite la spécification de l'augmentation de la taille tandis que la commande virsh blockresize nécessite la spécification de la taille.

Vérifiez ensuite la prise en charge de la modification :

[root@redhat9 vm-backups]# virsh vol-info /var/lib/libvirt/images/testvm2.qcow2
Name:           testvm2.qcow2
Type:           file
Capacity:       7.00 GiB
Allocation:     2.24 GiB

Connectez-vous à la VM grâce à la commande virsh console :

[root@redhat9 vm-backups]# virsh console testvm2
Connected to domain 'testvm2'
Escape character is ^] (Ctrl + ])
[Enter]
[root@testvm1 ~]#

Ré-exécutez les mêmes commandes que la dernière fois :

[root@testvm1 ~]# subscription-manager register

[root@testvm1 ~]# dnf -y install cloud-utils-growpart gdisk

[root@testvm1 ~]# growpart /dev/vda 3
CHANGED: partition=3 start=3147776 old: size=7337984 end=10485759 new: size=11532255 end=14680030

[root@testvm1 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sr0     11:0    1 1024M  0 rom  
vda    253:0    0    7G  0 disk 
├─vda1 253:1    0    1G  0 part /boot
├─vda2 253:2    0  512M  0 part [SWAP]
└─vda3 253:3    0  5,5G  0 part /

[root@testvm1 ~]# xfs_growfs /
meta-data=/dev/vda3              isize=512    agcount=4, agsize=229312 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1 inobtcount=1 nrext64=0
data     =                       bsize=4096   blocks=917248, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=16384, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 917248 to 1441531

[root@testvm1 ~]# df -TH
Sys. de fichiers Type     Taille Utilisé Dispo Uti% Monté sur
devtmpfs         devtmpfs   4,2M       0  4,2M   0% /dev
tmpfs            tmpfs      931M       0  931M   0% /dev/shm
tmpfs            tmpfs      373M    5,3M  368M   2% /run
/dev/vda3        xfs        5,9G    1,5G  4,4G  26% /
/dev/vda1        xfs        1,1G    226M  782M  23% /boot
tmpfs            tmpfs      187M       0  187M   0% /run/user/0

[root@testvm1 ~]# [CTRL]+[VER MAJ]+[5]
[root@redhat9 vm-backups]#

LAB #8 - Réparation d'un Filesystem Corrompu

En cas de défaillance de la procédure d'augmentation de la taille du système de fichiers de l'image, il peut être nécessaire de procéder à la réparation du celui-ci.

8.1 - Préparation

La réparation est effectuée grâce à l'utilisation de la commande guestfish. Cette commande est fourni par le paquet libguestfs-tools. Si ce paquet est pas installé :

[root@redhat9 vm-backups]# dnf install -y libguestfs-tools
Updating Subscription Management repositories.
Last metadata expiration check: 0:17:12 ago on Sat 26 Oct 2024 02:23:02 PM CEST.
Package virt-win-reg-1.51.6-3.el9_4.noarch is already installed.
Dependencies resolved.
Nothing to do.
Complete!

Arrêtez la VM testvm1 :

[root@redhat9 vm-backups]# virsh shutdown testvm1
Domain 'testvm1' is being shutdown

8.2 - La Commande guestfish

Commencez par fixer la valeur de la variable LIBGUESTFS_BACKEND à direct :

[root@centos8 ~]# export LIBGUESTFS_BACKEND=direct

Ajoutez l'image à réparer à guestfish grâce à l'utilisation de l'option –a :

[root@redhat9 vm-backups]# guestfish -a /var/lib/libvirt/images/testvm1-os.qcow2

Welcome to guestfish, the guest filesystem shell for
editing virtual machine filesystems and disk images.

Type: ‘help’ for help on commands
      ‘man’ to read the manual
      ‘quit’ to quit the shell

><fs>

Initialisez guestfish avec la commande run :

[root@centos8 ~]# guestfish -a /var/lib/libvirt/images/testvm1-os.qcow2

Welcome to guestfish, the guest filesystem shell for
editing virtual machine filesystems and disk images.

Type: ‘help’ for help on commands
      ‘man’ to read the manual
      ‘quit’ to quit the shell

><fs> run

Listez ensuite les systèmes de fichiers de la VM :

[root@centos8 ~]# guestfish -a /var/lib/libvirt/images/testvm1-os.qcow2

Welcome to guestfish, the guest filesystem shell for
editing virtual machine filesystems and disk images.

Type: ‘help’ for help on commands
      ‘man’ to read the manual
      ‘quit’ to quit the shell

><fs> run
><fs> list-filesystems
/dev/sda1: ext4
/dev/sda2: swap
/dev/sda3: xfs

Procédez ensuite à la réparation des systèmes de fichiers avec la commande fsck :

><fs> run
 100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00
><fs> list-filesystems
/dev/sda1: xfs
/dev/sda2: swap
/dev/sda3: xfs
><fs> fsck xfs /dev/sda3
0
><fs> fsck ext /dev/sda1
0
><fs> q

[root@redhat9 vm-backups]# 

Important : Notez que le code retour de 0 indique qu'aucune erreur n'a été trouvée. Dans le cas contraire, fdisk tentera de réparer le système de fichiers.

Après la réparation du système de fichiers, démarrez le VM testvm1 :

[root@redhat9 vm-backups]# virsh start testvm1
Domain 'testvm1' started

LAB #9 - Gestion de la VM

9.1 La Commande shutdown

Comme il a déjà été expliqué, pour arrêter une VM, il convient d'utiliser la commande virsh shutdown :

[root@redhat9 vm-backups]# virsh shutdown testvm1
Domain 'testvm1' is being shutdown

[root@redhat9 vm-backups]# virsh list
 Id   Name      State
-------------------------
 1    testvm2   running

[root@redhat9 vm-backups]# virsh list --all
 Id   Name      State
--------------------------
 1    testvm2   running
 -    testvm1   shut off
 

9.2 La Commande reboot

La commande virsh reboot permet de re-démarrer une VM :

[root@redhat9 vm-backups]# virsh reboot 1
Domain '1' is being rebooted

[root@redhat9 vm-backups]# virsh list --all
 Id   Name      State
--------------------------
 1    testvm2   running
 -    testvm1   shut off
 

9.3 La Commande suspend

La commande virsh suspend permet de mettre en pause une VM. Bien évidement, une VM ne peut être mise en pause que quand celle-ci est en cours de fonctionnement :

[root@redhat9 vm-backups]# virsh suspend testvm1
error: Failed to suspend domain 'testvm1'
error: Requested operation is not valid: domain is not running

[root@redhat9 vm-backups]# virsh start testvm1
Domain 'testvm1' started

[root@redhat9 vm-backups]# virsh list --all
 Id   Name      State
-------------------------
 1    testvm2   running
 4    testvm1   running

[root@redhat9 vm-backups]# virsh suspend testvm1
Domain 'testvm1' suspended

[root@redhat9 vm-backups]# virsh list --all
 Id   Name      State
-------------------------
 1    testvm2   running
 4    testvm1   paused
 

9.4 La Commande resume

La commande virsh resume permet d'annuler l'effet de la commande virsh suspend :

[root@redhat9 vm-backups]# virsh resume testvm1
Domain 'testvm1' resumed

[root@redhat9 vm-backups]# virsh list --all
 Id   Name      State
-------------------------
 1    testvm2   running
 4    testvm1   running

9.5 La Commande dominfo

La commande virsh dominfo permet de consulter les informations relatives à un domaine donné :

[root@redhat9 vm-backups]# virsh dominfo 4
Id:             4
Name:           testvm1
UUID:           77bb92d1-83a7-4c01-971c-1eb2f9f41c92
OS Type:        hvm
State:          running
CPU(s):         1
CPU time:       29.9s
Max memory:     2097152 KiB
Used memory:    2097152 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: selinux
Security DOI:   0
Security label: system_u:system_r:svirt_t:s0:c305,c382 (permissive)

9.6 La Commande autostart

La commande virsh autostart permet de configurer la VM de façon à ce que celle-ci démarre automatiquement :

[root@redhat9 vm-backups]# virsh autostart 77bb92d1-83a7-4c01-971c-1eb2f9f41c92
Domain '77bb92d1-83a7-4c01-971c-1eb2f9f41c92' marked as autostarted

[root@redhat9 vm-backups]# virsh dominfo 4
Id:             4
Name:           testvm1
UUID:           77bb92d1-83a7-4c01-971c-1eb2f9f41c92
OS Type:        hvm
State:          running
CPU(s):         1
CPU time:       30.2s
Max memory:     2097152 KiB
Used memory:    2097152 KiB
Persistent:     yes
Autostart:      enable
Managed save:   no
Security model: selinux
Security DOI:   0
Security label: system_u:system_r:svirt_t:s0:c305,c382 (permissive)

Pour annuler l'effet de la commande précédente, il convient d'utiliser l'option –disable :

[root@redhat9 vm-backups]# virsh autostart --disable 4
Domain '4' unmarked as autostarted

[root@redhat9 vm-backups]# virsh dominfo 4
Id:             4
Name:           testvm1
UUID:           77bb92d1-83a7-4c01-971c-1eb2f9f41c92
OS Type:        hvm
State:          running
CPU(s):         1
CPU time:       30.3s
Max memory:     2097152 KiB
Used memory:    2097152 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: selinux
Security DOI:   0
Security label: system_u:system_r:svirt_t:s0:c305,c382 (permissive)

9.7 La Commande domuuid

La commande virsh domuuid permet d'obtenir l'UUID du domaine :

[root@redhat9 vm-backups]# virsh domuuid testvm1
77bb92d1-83a7-4c01-971c-1eb2f9f41c92

9.8 La Commande undefine

La commande virsh undefine permet de supprimer la configuration d'une VM :

[root@redhat9 vm-backups]# virsh undefine 1
Domain '1' has been undefined

[root@redhat9 vm-backups]# virsh list --all
 Id   Name      State
-------------------------
 1    testvm2   running
 4    testvm1   running
 

Important : Notez que si la VM est en cours d'exécution au moment de l'exécution de la commande, la VM est mise en mode transient. La suppression effective de la configuration a lieu quand la VM est arrêtée.

9.9 La Commande destroy

La commande virsh destroy permet d'arrêter une VM. Cette commande est l'équivalente d'un init 0. Par conséquent il est conseillé d'ajouter l'option –graceful de façon à nettoyer le cache de l'image disque avant l'arrêt :

[root@redhat9 vm-backups]# virsh destroy 1
Domain '1' destroyed

[root@redhat9 vm-backups]# virsh list --all
 Id   Name      State
-------------------------
 4    testvm1   running

[root@redhat9 vm-backups]# ls -lh /var/lib/libvirt/images/
total 4.2G
-rw-------. 1 qemu qemu 5.1G Oct 26 15:01 testvm1-os.qcow2
-rw-------. 1 root root 2.4G Oct 26 15:00 testvm2.qcow2

[root@redhat9 vm-backups]# du -sh /var/lib/libvirt/images/*
1.9G    /var/lib/libvirt/images/testvm1-os.qcow2
2.4G    /var/lib/libvirt/images/testvm2.qcow2

LAB #10 - Gestion des Ressources

10.1 - Augmenter les VCPUs et la Mémoire

La façon de modifier les ressources d'une VM en ligne de commande est d'éditer le fichier de configuration de la VM. Actuellement, la VM testvm1 a 2097152 KiB de mémoire et 1 vCPU :

[root@redhat9 vm-backups]# virsh list --all
 Id   Name      State
-------------------------
 4    testvm1   running

[root@redhat9 vm-backups]# virsh dominfo 4
Id:             4
Name:           testvm1
UUID:           77bb92d1-83a7-4c01-971c-1eb2f9f41c92
OS Type:        hvm
State:          running
CPU(s):         1
CPU time:       31.3s
Max memory:     2097152 KiB
Used memory:    2097152 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: selinux
Security DOI:   0
Security label: system_u:system_r:svirt_t:s0:c305,c382 (permissive)

Comme détaillé précédemment, ces informations se trouvent dans le fichier de configuration au format XML de la VM :

[root@centos8 ~]# cat /etc/libvirt/qemu/testvm1.xml 
...
  <memory unit='KiB'>2097152</memory>
  <currentMemory unit='KiB'>2097152</currentMemory>
  <vcpu placement='static'>1</vcpu>
...

Pour modifier la configuration, il convient d'arrêter la VM :

[root@redhat9 vm-backups]# virsh shutdown 4
Domain '4' is being shutdown

Editez ensuite les valeurs suivantes dans le fichier de configuration en utilisant la commande virsh edit :

[root@centos8 ~]# virsh edit testvm1
...
  <currentMemory unit='KiB'>2097152</currentMemory>
  <vcpu placement='static'>4</vcpu>
...

Lors de votre sauvegarde du fichier, le système vous indiquera que le fichier a été modifié :

[root@redhat9 vm-backups]# virsh edit testvm1
Domain 'testvm1' XML configuration edited.

L'application de l'augmentation du nombre de vCPUs est immédiate. Par contre ceci n'est pas le cas pour la mémoire.

Consultez la valeur de la mémoire dans le fichier /etc/libvirt/qemu/testvm1.xml :

...
  <memory unit='KiB'>4194304</memory>
  <currentMemory unit='KiB'>2097152</currentMemory>
...

Démarrez maintenant la VM testvm1 :

[root@redhat9 vm-backups]# virsh start testvm1
Domain 'testvm1' started

[root@redhat9 vm-backups]# virsh list --all
 Id   Name      State
-------------------------
 5    testvm1   running

[root@redhat9 vm-backups]# virsh dominfo 5
Id:             5
Name:           testvm1
UUID:           77bb92d1-83a7-4c01-971c-1eb2f9f41c92
OS Type:        hvm
State:          running
CPU(s):         4
CPU time:       51.7s
Max memory:     4194304 KiB
Used memory:    2097152 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: selinux
Security DOI:   0
Security label: system_u:system_r:svirt_t:s0:c149,c153 (permissive)

Pour accorder à la VM le droit d'utiliser la totalité de la mémoire qui lui a été réservée, il est nécessaire d'utiliser la commande virsh setmem :

[root@redhat9 vm-backups]# virsh setmem testvm1 4194304

Vérifiez ensuite la prise en compte de l'augmentation de la mémoire :

[root@redhat9 vm-backups]# virsh dominfo 5
Id:             5
Name:           testvm1
UUID:           77bb92d1-83a7-4c01-971c-1eb2f9f41c92
OS Type:        hvm
State:          running
CPU(s):         4
CPU time:       53.3s
Max memory:     4194304 KiB
Used memory:    4194304 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: selinux
Security DOI:   0
Security label: system_u:system_r:svirt_t:s0:c149,c153 (permissive)

10.2 - Ajouter et Supprimer un Disque Dur

Pour ajouter un disque à une VM, il convient d'abord de créer ce disque. Placez-vous donc dans le répertoire cd /var/lib/libvirt/images/ :

[root@redhat9 vm-backups]# cd /var/lib/libvirt/images/
[root@redhat9 images]#

Créez un disque d'une taille de 10 Go au format raw :

[root@redhat9 images]# qemu-img create -f raw testvm1-disk2.img 10G
Formatting 'testvm1-disk2.img', fmt=raw size=10737418240

Attachez ensuite ce disque à la VM testvm1 :

[root@redhat9 images]# virsh attach-disk testvm1 --source /var/lib/libvirt/images/testvm1-disk2.img --target vdb --persistent
Disk attached successfully

Connectez-vous à la VM avec la commande virsh console :

[root@redhat9 images]# virsh console testvm1
Connected to domain 'testvm1'
Escape character is ^] (Ctrl + ])
[Enter]
testvm1 login: root
Mot de passe : 
Dernière connexion : Sat Oct 26 14:03:04 sur ttyS0
[root@testvm1 ~]# 

Contrôlez la présence du disque ajouté :

[root@testvm1 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sr0     11:0    1 1024M  0 rom  
vda    253:0    0    7G  0 disk 
├─vda1 253:1    0    1G  0 part /boot
├─vda2 253:2    0  512M  0 part [SWAP]
└─vda3 253:3    0  5,5G  0 part /
vdb    253:16   0   10G  0 disk 

Créez une partition sur le disque :

[root@testvm1 ~]# fdisk /dev/vdb

Bienvenue dans fdisk (util-linux 2.37.4).
Les modifications resteront en mémoire jusqu'à écriture.
Soyez prudent avant d'utiliser la commande d'écriture.

Le périphérique ne contient pas de table de partitions reconnue.
Création d'une nouvelle étiquette pour disque de type DOS avec identifiant de disque 0xa45cafa8.

Commande (m pour l'aide) : n
Type de partition
   p   primaire (0 primaire, 0 étendue, 4 libre)
   e   étendue (conteneur pour partitions logiques)
Sélectionnez (p par défaut) : 

Utilisation de la réponse p par défaut.
Numéro de partition (1-4, 1 par défaut) : 
Premier secteur (2048-20971519, 2048 par défaut) : 
Dernier secteur, +/-secteurs ou +/-taille{K,M,G,T,P} (2048-20971519, 20971519 par défaut) : 

Une nouvelle partition 1 de type « Linux » et de taille 10 GiB a été créée.

Commande (m pour l'aide) : w
La table de partitions a été altérée.
Appel d'ioctl() pour relire la table de partitions.
[  296.262232]  vdb: vdb1
Synchronisation des disques.

Créez un système de fichiers de type ext4 sur la partition :

[root@testvm1 ~]# mkfs.ext4 /dev/vdb1
mke2fs 1.46.5 (30-Dec-2021)
Rejet des blocs de périphérique : complété                        
En train de créer un système de fichiers avec 2621184 4k blocs et 655360 i-noeuds.
UUID de système de fichiers=e3c88cb6-a744-440e-bf28-f15d2e9b9760
Superblocs de secours stockés sur les blocs : 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocation des tables de groupe : complété                        
Écriture des tables d'i-noeuds : complété                        
Création du journal (16384 blocs) : complété
Écriture des superblocs et de l'information de comptabilité du système de
fichiers : complété

Montez le disque et vérifiez que vous pouvez y écrire :

[root@testvm1 ~]# mount /dev/vdb1 /mnt
[  379.363989] EXT4-fs (vdb1): mounted filesystem e3c88cb6-a744-440e-bf28-f15d2e9b9760 r/w with ordered data mode. Quota mode: none.

[root@testvm1 ~]# cd /mnt

[root@testvm1 mnt]# touch test

[root@testvm1 mnt]# ls
lost+found  test

Détachez-vous de la VM :

[root@testvm1 ~]# [CTRL]+[VER MAJ]+[5]
[root@redhat9 images]#

Détachez ensuite le disque vdb de la VM :

[root@redhat9 images]# virsh detach-disk testvm1 vdb
Disk detached successfully

Reconnectez-vous à la VM et exécutez la commande lsblk :

[root@redhat9 images]# virsh console testvm1
Connected to domain 'testvm1'
Escape character is ^] (Ctrl + ])

[root@testvm1 mnt]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sr0     11:0    1 1024M  0 rom  
vda    253:0    0    7G  0 disk 
├─vda1 253:1    0    1G  0 part /boot
├─vda2 253:2    0  512M  0 part [SWAP]
└─vda3 253:3    0  5,5G  0 part /

Démontez donc le disque :

[root@testvm1 mnt]# mount | grep vdb
/dev/vdb1 on /mnt type ext4 (rw,relatime,seclabel)

[root@testvm1 mnt]# cd ..

[root@testvm1 /]# umount /mnt
[root@testvm1 /]# [  651.428840] EXT4-fs (vdb1): unmounting filesystem e3c88cb6-a744-440e-bf28-f15d2e9b9760.

[root@testvm1 ~]# [CTRL]+[VER MAJ]+[5]
[root@redhat9 images]#

LAB #11 - Journalisation

11.1 - Le Répertoire /var/log/libvirt/qemu/

Le répertoire /var/log/libvirt/qemu/ contient les journaux des VMs KVM :

[root@redhat9 images]# cd /var/log/libvirt/qemu/

[root@redhat9 qemu]# ls -l
total 68
-rw-------. 1 root root 55510 Oct 26 15:06 testvm1.log
-rw-------. 1 root root  9786 Oct 26 15:00 testvm2.log

[root@redhat9 qemu]# more testvm1.log
2024-10-24 14:01:21.404+0000: starting up libvirt version: 10.0.0, package: 6.7.el9_4 
(Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>, 2024-09-12-06:48:10, ), qemu ver
sion: 8.2.0qemu-kvm-8.2.0-11.el9_4.6, kernel: 5.14.0-427.37.1.el9_4.x86_64, hostname: 
redhat9.ittraining.loc
LC_ALL=C \
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin \
HOME=/var/lib/libvirt/qemu/domain-1-testvm1 \
XDG_DATA_HOME=/var/lib/libvirt/qemu/domain-1-testvm1/.local/share \
XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain-1-testvm1/.cache \
XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain-1-testvm1/.config \
/usr/libexec/qemu-kvm \
-name guest=testvm1,debug-threads=on \
-S \
-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvir
t/qemu/domain-1-testvm1/master-key.aes"}' \
-machine pc-q35-rhel9.4.0,usb=off,dump-guest-core=off,memory-backend=pc.ram,hpet=off,a
cpi=on \
-accel kvm \
-cpu host,migratable=on \
-m size=2097152k \
-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":2147483648}' \
-overcommit mem-lock=off \
-smp 1,sockets=1,cores=1,threads=1 \
--More--(1%)

11.2 - Le Fichier /var/log/messages

Dans le fichier /var/log/messages sont consignés les messages de KVM :

[root@redhat9 qemu]# cat /var/log/messages | grep kvm | more
Oct 21 11:55:54 redhat9 kernel: kvm-clock: Using msrs 4b564d01 and 4b564d00
Oct 21 11:55:54 redhat9 kernel: kvm-clock: using sched offset of 7103107620 cycles
Oct 21 11:55:54 redhat9 kernel: clocksource: kvm-clock: mask: 0xffffffffffffffff max_c
ycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns
Oct 21 11:55:54 redhat9 kernel: kvm-guest: KVM setup pv remote TLB flush
Oct 21 11:55:54 redhat9 kernel: kvm-guest: setup PV sched yield
Oct 21 11:55:54 redhat9 kernel: kvm-guest: PV spinlocks enabled
Oct 21 11:55:54 redhat9 kernel: kvm-guest: setup PV IPIs
Oct 21 11:55:54 redhat9 kernel: clocksource: Switched to clocksource kvm-clock
Oct 21 11:55:54 redhat9 systemd: Detected virtualization kvm.
Oct 21 11:56:03 redhat9 systemd: Detected virtualization kvm.
Oct 22 11:01:48 redhat9 kernel: kvm-clock: Using msrs 4b564d01 and 4b564d00
Oct 22 11:01:48 redhat9 kernel: kvm-clock: using sched offset of 83160775052787 cycles
Oct 22 11:01:48 redhat9 kernel: clocksource: kvm-clock: mask: 0xffffffffffffffff max_c
ycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns
Oct 22 11:01:48 redhat9 kernel: kvm-guest: KVM setup pv remote TLB flush
Oct 22 11:01:48 redhat9 kernel: kvm-guest: setup PV sched yield
Oct 22 11:01:48 redhat9 kernel: kvm-guest: PV spinlocks enabled
Oct 22 11:01:48 redhat9 kernel: kvm-guest: setup PV IPIs
Oct 22 11:01:48 redhat9 kernel: clocksource: Switched to clocksource kvm-clock
Oct 22 11:01:48 redhat9 systemd: Detected virtualization kvm.
Oct 22 11:01:55 redhat9 systemd: Detected virtualization kvm.
Oct 22 15:22:15 redhat9 kernel: kvm-clock: Using msrs 4b564d01 and 4b564d00
--More--

LAB #12 - Gestion de KVM avec Cockpit

12.1 - Installation et Démarrage

Cockpit est la nouvelle interface de gestion du serveur de Red Hat 9. Celui-ci est installé par défaut. Par contre, le module supplémentaire pour gérer des machines virtuelles ne l'est pas. Installez donc le paquet cockpit-machines :

[root@redhat9 qemu]# dnf install cockpit-machines -y

Activez-et démarrez le socket cockpit :

[root@redhat9 qemu]# systemctl start --now cockpit.socket

[root@redhat9 qemu]# systemctl status cockpit.socket
● cockpit.socket - Cockpit Web Service Socket
     Loaded: loaded (/usr/lib/systemd/system/cockpit.socket; disabled; preset: disabl>
     Active: active (listening) since Sat 2024-10-26 15:26:22 CEST; 16s ago
      Until: Sat 2024-10-26 15:26:22 CEST; 16s ago
   Triggers: ● cockpit.service
       Docs: man:cockpit-ws(8)
     Listen: [::]:9090 (Stream)
    Process: 74750 ExecStartPost=/usr/share/cockpit/motd/update-motd  localhost (code>
    Process: 74757 ExecStartPost=/bin/ln -snf active.motd /run/cockpit/motd (code=exi>
      Tasks: 0 (limit: 48799)
     Memory: 92.0K
        CPU: 19ms
     CGroup: /system.slice/cockpit.socket

Oct 26 15:26:22 redhat9.ittraining.loc systemd[1]: Starting Cockpit Web Service Socke>
Oct 26 15:26:22 redhat9.ittraining.loc systemd[1]: Listening on Cockpit Web Service S>
[root@redhat9 qemu]# 

Le cas échéant, ajoutez une règle dans le pare-feu afin de pouvoir utiliser cockpit :

[root@redhat9 qemu]# firewall-cmd --add-service=cockpit --permanent
Warning: ALREADY_ENABLED: cockpit
success

Ajoutez trainee au group wheel :

[root@redhat9 qemu]# usermod -aG wheel trainee

[root@redhat9 qemu]# groups trainee
trainee : trainee wheel

[root@redhat9 ~]# exit
logout

[trainee@redhat9 ~]$ groups
trainee

[trainee@redhat9 ~]$ newgrp trainee

[trainee@redhat9 ~]$ groups
trainee wheel

12.2 - Connexion à l'Interface

Ouvrez la connexion Debian11_VNC_10.0.2.46 dans l'interface de Guacamole. Connectez-vous en tant que trainee et ouvrez le navigateur web. Saisissez l'adresse https://10.0.2.101:9090. Cliquez sur le bouton Advanced :

Cliquez sur le bouton Accept the Risk and Continue :

Entrez les coordonnées de connexion trainee / trainee et cliquez sur le bouton Log in :

Cliquez sur le bouton Turn on administrative access :

Entrez le mot de passe trainee et validez :

12.3 - Visualisation de la Configuration de KVM

Cliquez ensuite sur Virtual Machines dans la colonne de gauche :

Cliquez maintenant sur le lien 3 Storage pools :

Pour consulter les informations concernant le storage pool kvm-storagepool, cliquez sur celui-ci :

Cliquez ensuite sur les liens Virtual machines > Networks puis sur le lien default :

LAB #13 - Gestion des Machines Virtuelles avec Cockpit

13.1 - Création d'une VM en Mode Graphique à partir d'un ISO

A l'aide de l'interface cockpit, installez une nouvelle machine virtuelle, testvm2 ayant 2vCPUs et 2Go de RAM, à partir de l'ISO et procédez à sa configuration :

13.2 - Création et Suppression d'un Snapshot de la vm testvm2

A l'aide de l'interface cockpit, créez puis supprimez un snapshot de la machine virtuelle, testvm2,

13.3 - Augmentation des Ressources de la VM testvm2

A l'aide de l'interface cockpit, augmentez le nombre de vCPUs de la machine virtuelle testvm2 à 4 puis augmentez la mémoire allouée à la machine virtuelle à 4 Go.

13.4 - Ajout et Suppression d'un Disque Dur à la VM testvm2

A l'aide de l'interface cockpit, ajoutez un disque dur de 20 Go à la machine virtuelle testvm2.

A Faire : Supprimez la machine virtuelle testvm2. Assurez-vous que votre machine virtuelle testvm1 soit arrêtée.

LAB #14 - Création d'une Machine Virtuelle avec Kickstart

14.1 - Créer un fichier Kickstart

Naviguez au site https://access.redhat.com/labsinfo/kickstartconfig :

Cliquez sur le bouton GO TO APPLICATION et connectez-vous avec votre compte Red Hat Developer :

Remplissez le formulaire selon l'exemple qui suit :








Cliquez sur le bouton Show Text :
Téléchargez le fichier kickstart.txt. Renommez ce fichier /root/kickstart.cfg. Votre fichier devrait ressembler à l'exemple qui suit :

lang en_US
keyboard --xlayouts='fr'
timezone Europe/Paris --utc
rootpw $2b$10$bazf6qcwKcbw6mqDcJGaROOkoX3.nRMkEbyyu5OVaWCwNWofqDtju --iscrypted
reboot
cdrom
bootloader --append="rhgb quiet crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M"
zerombr
clearpart --all --initlabel
autopart
network --device=enp1s0 --hostname=testvm2.ittraining.loc --bootproto=static --ip=192.168.56.100 --netmask=255.255.255.0 --gateway=192.168.56.1 --nameserver=8.8.8.8
firstboot --disable
selinux --enforcing
firewall --enabled --http --ssh
%post
echo "This system was deployed using Kickstart on $(date)" > /etc/motd
%end
%packages
@^minimal-environment
@web-server
@file-server
%end

14.2 - Création d'une VM avec Kickstart

[root@redhat9 ~]# virt-install --name testvm2 --memory=2048 --vcpus=2 --location=/isos/rhel-9.4-x86_64-dvd.iso --disk path=/var/lib/libvirt/images/testvm2-os.qcow2,bus=virtio,size=5 --network bridge=virbr0 --graphics=none --os-variant=rhel9.4 --console pty,target_type=serial --initrd-inject kickstart.cfg --extra-args "inst.ks=file:/kickstart.cfg console=tty0 console=ttyS0,115200n8"

Attendez la fin de l’installation automatique.


Copyright © 2024 Hugh Norris

Menu