Configuration et gestion de la virtualisation


Red Hat Enterprise Linux 9

Configurer votre hôte, créer et administrer des machines virtuelles, et comprendre les fonctions de virtualisation

Red Hat Customer Content Services

Résumé

Pour utiliser un système Red Hat Enterprise Linux (RHEL) en tant qu'hôte de virtualisation, suivez les instructions de ce document.
Les informations fournies comprennent
  • Les capacités et les cas d'utilisation de la virtualisation
  • Comment gérer votre hôte et vos machines virtuelles à l'aide d'utilitaires en ligne de commande, ainsi qu'à l'aide de la console web
  • Les limites de la prise en charge de la virtualisation sur différentes architectures de systèmes, telles que Intel 64, AMD64 et IBM Z

Fournir un retour d'information sur la documentation de Red Hat

Nous apprécions vos commentaires sur notre documentation. Faites-nous savoir comment nous pouvons l'améliorer.

Soumettre un retour d'information via Jira (compte requis)

  1. Connectez-vous au site web Jira.
  2. Cliquez sur Create dans la barre de navigation supérieure
  3. Saisissez un titre descriptif dans le champ Summary.
  4. Saisissez votre suggestion d'amélioration dans le champ Description. Incluez des liens vers les parties pertinentes de la documentation.
  5. Cliquez sur Create en bas de la boîte de dialogue.

Chapitre 1. Introduction de la virtualisation dans RHEL

Si vous n'êtes pas familier avec le concept de virtualisation ou sa mise en œuvre dans Linux, les sections suivantes fournissent une vue d'ensemble de la virtualisation dans RHEL 9 : ses bases, ses avantages, ses composants et d'autres solutions de virtualisation possibles fournies par Red Hat.

1.1. Qu'est-ce que la virtualisation ?

RHEL 9 offre la fonctionnalité virtualization, qui permet à une machine exécutant RHEL 9 de host plusieurs machines virtuelles (VM), également appelées guests. Les VM utilisent le matériel physique et les ressources informatiques de l'hôte pour exécuter un système d'exploitation distinct et virtualisé (guest OS) en tant que processus de l'espace utilisateur sur le système d'exploitation de l'hôte.

En d'autres termes, la virtualisation permet d'avoir des systèmes d'exploitation dans des systèmes d'exploitation.

Les machines virtuelles vous permettent de tester en toute sécurité les configurations et les fonctionnalités des logiciels, d'exécuter des logiciels existants ou d'optimiser l'efficacité de la charge de travail de votre matériel. Pour plus d'informations sur les avantages de la virtualisation, voir Avantages de la virtualisation.

Pour plus d'informations sur ce qu'est la virtualisation, voir la page thématique sur la virtualisation.

Prochaines étapes

1.2. Avantages de la virtualisation

L'utilisation de machines virtuelles (VM) présente les avantages suivants par rapport à l'utilisation de machines physiques :

  • Flexible and fine-grained allocation of resources

    Une VM s'exécute sur une machine hôte, qui est généralement physique, et du matériel physique peut également être attribué au système d'exploitation invité. Cependant, l'allocation des ressources physiques à la VM se fait au niveau du logiciel et est donc très flexible. Une VM utilise une fraction configurable de la mémoire, des processeurs ou de l'espace de stockage de l'hôte, et cette configuration peut spécifier des demandes de ressources très fines.

    Par exemple, ce que le système d'exploitation invité considère comme son disque peut être représenté comme un fichier sur le système de fichiers de l'hôte, et la taille de ce disque est moins limitée que les tailles disponibles pour les disques physiques.

  • Software-controlled configurations

    L'ensemble de la configuration d'une VM est sauvegardé sous forme de données sur l'hôte et est sous le contrôle du logiciel. Par conséquent, une VM peut facilement être créée, supprimée, clonée, migrée, exploitée à distance ou connectée à un système de stockage distant.

  • Separation from the host

    Un système d'exploitation invité fonctionne sur un noyau virtualisé, distinct du système d'exploitation hôte. Cela signifie que n'importe quel système d'exploitation peut être installé sur une VM et que même si le système d'exploitation invité devient instable ou est compromis, l'hôte n'est en aucun cas affecté.

  • Space and cost efficiency

    Une seule machine physique peut héberger un grand nombre de machines virtuelles. Il n'est donc pas nécessaire d'utiliser plusieurs machines physiques pour effectuer les mêmes tâches, ce qui réduit les besoins en espace, en énergie et en maintenance associés au matériel physique.

  • Software compatibility

    Étant donné qu'une VM peut utiliser un système d'exploitation différent de son hôte, la virtualisation permet d'exécuter des applications qui n'ont pas été publiées à l'origine pour votre système d'exploitation hôte. Par exemple, en utilisant un système d'exploitation invité RHEL 7, vous pouvez exécuter des applications publiées pour RHEL 7 sur un système hôte RHEL 9.

    Note

    Tous les systèmes d'exploitation ne sont pas pris en charge en tant que système d'exploitation invité dans un hôte RHEL 9. Pour plus de détails, voir Fonctionnalités recommandées dans la virtualisation RHEL 9.

La virtualisation dans RHEL 9 est constituée des principaux composants logiciels suivants :

Hypervisor

La base de la création de machines virtuelles (VM) dans RHEL 9 est hypervisor, une couche logicielle qui contrôle le matériel et permet d'exécuter plusieurs systèmes d'exploitation sur une machine hôte.

L'hyperviseur comprend le module Kernel-based Virtual Machine (KVM) et les pilotes du noyau de virtualisation. Ces composants garantissent que le noyau Linux de la machine hôte fournit aux logiciels de l'espace utilisateur les ressources nécessaires à la virtualisation.

Au niveau de l'espace utilisateur, l'émulateur QEMU simule une plate-forme matérielle virtualisée complète dans laquelle le système d'exploitation invité peut s'exécuter, et gère la manière dont les ressources sont allouées sur l'hôte et présentées à l'invité.

En outre, la suite logicielle libvirt sert de couche de gestion et de communication, facilitant l'interaction avec QEMU, appliquant les règles de sécurité et fournissant un certain nombre d'outils supplémentaires pour la configuration et l'exécution des machines virtuelles.

Configuration XML

Un fichier de configuration XML basé sur l'hôte (également connu sous le nom de fichier domain XML ) détermine tous les paramètres et périphériques d'une VM spécifique. La configuration comprend

  • Métadonnées telles que le nom de la VM, le fuseau horaire et d'autres informations sur la VM.
  • Description des dispositifs de la VM, y compris les unités centrales virtuelles (vCPUS), les dispositifs de stockage, les dispositifs d'entrée/sortie, les cartes d'interface réseau et d'autres matériels, réels et virtuels.
  • Paramètres de la VM tels que la quantité maximale de mémoire qu'elle peut utiliser, les paramètres de redémarrage et d'autres paramètres relatifs au comportement de la VM.

Pour plus d'informations sur le contenu d'une configuration XML, voir Exemple de configuration XML de machine virtuelle.

Interaction des composants

Lorsqu'une VM est démarrée, l'hyperviseur utilise la configuration XML pour créer une instance de la VM en tant que processus de l'espace utilisateur sur l'hôte. L'hyperviseur rend également le processus VM accessible aux interfaces basées sur l'hôte, telles que les utilitaires virsh, virt-install, et guestfish, ou l'interface graphique de la console web.

Lorsque ces outils de virtualisation sont utilisés, libvirt traduit leurs données en instructions pour QEMU. QEMU communique les instructions à KVM, qui s'assure que le noyau attribue correctement les ressources nécessaires à l'exécution des instructions. Par conséquent, QEMU peut exécuter les changements correspondants dans l'espace utilisateur, tels que la création ou la modification d'une VM, ou l'exécution d'une action dans le système d'exploitation invité de la VM.

Note

Bien que QEMU soit un composant essentiel de l'architecture, il n'est pas destiné à être utilisé directement sur les systèmes RHEL 9, pour des raisons de sécurité. Par conséquent, les commandes qemu-* ne sont pas prises en charge par Red Hat, et il est fortement recommandé d'interagir avec QEMU en utilisant libvirt.

Pour plus d'informations sur les interfaces basées sur l'hôte, voir Outils et interfaces pour la gestion de la virtualisation.

Figure 1.1. Architecture de virtualisation RHEL 9

1.4. Outils et interfaces pour la gestion de la virtualisation

Vous pouvez gérer la virtualisation dans RHEL 9 en utilisant l'interface de ligne de commande (CLI) ou plusieurs interfaces utilisateur graphiques (GUI).

Interface de ligne de commande

La CLI est la méthode la plus puissante pour gérer la virtualisation dans RHEL 9. Les principales commandes de la CLI pour la gestion des machines virtuelles (VM) sont les suivantes :

  • virsh - Un utilitaire de ligne de commande de virtualisation polyvalent et un shell avec une grande variété d'objectifs, en fonction des arguments fournis. En voici un exemple :

    • Démarrage et arrêt d'une VM - virsh start et virsh shutdown
    • Liste des machines virtuelles disponibles - virsh list
    • Création d'une VM à partir d'un fichier de configuration - virsh create
    • Entrer dans un shell de virtualisation - virsh

    Pour plus d'informations, voir la page de manuel virsh(1).

  • virt-install - Un utilitaire CLI pour créer de nouvelles VM. Pour plus d'informations, voir la page de manuel virt-install(1).
  • virt-xml - Un utilitaire permettant de modifier la configuration d'une VM.
  • guestfish - Un utilitaire permettant d'examiner et de modifier les images de disques VM. Pour plus d'informations, voir la page de manuel guestfish(1).

Interfaces graphiques

Vous pouvez utiliser les interfaces graphiques suivantes pour gérer la virtualisation dans RHEL 9 :

  • Le site RHEL 9 web console, également connu sous le nom de Cockpit, fournit une interface utilisateur graphique facile à utiliser et accessible à distance pour gérer les machines virtuelles et les hôtes de virtualisation.

    Pour obtenir des instructions sur la gestion de base de la virtualisation avec la console web, voir Gestion des machines virtuelles dans la console web.

1.5. Solutions de virtualisation Red Hat

Les produits Red Hat suivants sont construits sur la base des fonctionnalités de virtualisation de RHEL 9 et étendent les capacités de virtualisation KVM disponibles dans RHEL 9. En outre, de nombreuses limitations de la virtualisation de RHEL 9 ne s'appliquent pas à ces produits :

Virtualisation OpenShift

Basée sur la technologie KubeVirt, OpenShift Virtualization fait partie de la plateforme Red Hat OpenShift Container Platform et permet d'exécuter des machines virtuelles dans des conteneurs.

Pour plus d'informations sur OpenShift Virtualization, consultez les pages de Red Hat Hybrid Cloud.

Plate-forme Red Hat OpenStack (RHOSP)

Red Hat OpenStack Platform offre une base intégrée pour créer, déployer et faire évoluer un nuage OpenStack public ou privé sécurisé et fiable.

Pour plus d'informations sur Red Hat OpenStack Platform, consultez le portail client de Red Hat ou la suite de documentation de Red Hat OpenStack Platform.

Note

Pour plus de détails sur les fonctionnalités de virtualisation non prises en charge par RHEL mais prises en charge par d'autres solutions de virtualisation Red Hat, voir : Fonctionnalités non prises en charge dans la virtualisation RHEL 9

Chapitre 2. Permettre la virtualisation

Pour utiliser la virtualisation dans RHEL 9, vous devez installer les paquets de virtualisation et vous assurer que votre système est configuré pour héberger des machines virtuelles (VM). Les étapes spécifiques pour ce faire varient en fonction de l'architecture de votre processeur.

2.1. Activation de la virtualisation sur AMD64 et Intel 64

Pour configurer un hyperviseur KVM et créer des machines virtuelles (VM) sur un système AMD64 ou Intel 64 exécutant RHEL 9, suivez les instructions ci-dessous.

Conditions préalables

  • Red Hat Enterprise Linux 9 est installé et enregistré sur votre machine hôte.
  • Votre système répond aux exigences matérielles suivantes pour fonctionner en tant qu'hôte de virtualisation :

    • L'architecture de votre machine hôte prend en charge la virtualisation KVM.
    • Les ressources minimales suivantes doivent être disponibles :

      • 6 Go d'espace disque libre pour l'hôte, plus 6 Go pour chaque VM prévue.
      • 2 Go de RAM pour l'hôte, plus 2 Go supplémentaires pour chaque VM prévue.

Procédure

  1. Installer les paquets de l'hyperviseur de virtualisation.

    # dnf install qemu-kvm libvirt virt-install virt-viewer
    Copy to Clipboard Toggle word wrap
  2. Démarrer les services de virtualisation :

    # for drv in qemu network nodedev nwfilter secret storage interface; do systemctl start virt${drv}d{,-ro,-admin}.socket; done
    Copy to Clipboard Toggle word wrap

Vérification

  1. Vérifiez que votre système est prêt à devenir un hôte de virtualisation :

    # virt-host-validate
    [...]
    QEMU: Checking for device assignment IOMMU support         : PASS
    QEMU: Checking if IOMMU is enabled by kernel               : WARN (IOMMU appears to be disabled in kernel. Add intel_iommu=on to kernel cmdline arguments)
    LXC: Checking for Linux >= 2.6.26                          : PASS
    [...]
    LXC: Checking for cgroup 'blkio' controller mount-point    : PASS
    LXC: Checking if device /sys/fs/fuse/connections exists    : FAIL (Load the 'fuse' module to enable /proc/ overrides)
    Copy to Clipboard Toggle word wrap
  2. Si tous les contrôles virt-host-validate renvoient une valeur PASS, votre système est prêt à créer des VM.

    Si l'un des contrôles renvoie une valeur FAIL, suivez les instructions affichées pour résoudre le problème.

    Si l'un des contrôles renvoie une valeur WARN, envisagez de suivre les instructions affichées pour améliorer les capacités de virtualisation.

Résolution de problèmes

  • Si la virtualisation KVM n'est pas prise en charge par le processeur hôte, virt-host-validate génère le message suivant :

    QEMU: Checking for hardware virtualization: FAIL (Only emulated CPUs are available, performance will be significantly limited)
    Copy to Clipboard Toggle word wrap

    Cependant, les machines virtuelles installées sur un tel système hôte ne démarreront pas et n'auront pas de problèmes de performance.

    Pour contourner ce problème, vous pouvez modifier la valeur <domain type> dans la configuration XML de la VM en qemu. Notez cependant que Red Hat ne prend pas en charge les VM qui utilisent le type de domaine qemu, et que ce paramètre est fortement déconseillé dans les environnements de production.

2.2. Activation de la virtualisation sur IBM Z

Pour configurer un hyperviseur KVM et créer des machines virtuelles (VM) sur un système IBM Z exécutant RHEL 9, suivez les instructions ci-dessous.

Conditions préalables

  • Les ressources minimales suivantes doivent être disponibles :

    • 6 Go d'espace disque libre pour l'hôte, plus 6 Go pour chaque VM prévue.
    • 2 Go de RAM pour l'hôte, plus 2 Go supplémentaires pour chaque VM prévue.
    • 4 CPU sur l'hôte. Les VM peuvent généralement fonctionner avec une seule vCPU assignée, mais Red Hat recommande d'assigner 2 vCPU ou plus par VM afin d'éviter que les VM ne deviennent insensibles en cas de charge élevée.
  • Votre système hôte IBM Z utilise un processeur z13 ou ultérieur.
  • RHEL 9 est installé sur une partition logique (LPAR). En outre, la LPAR prend en charge les fonctions de virtualisation start-interpretive execution (SIE).

    Pour le vérifier, recherchez sie dans votre fichier /proc/cpuinfo.

    # grep sie /proc/cpuinfo
    features        : esan3 zarch stfle msa ldisp eimm dfp edat etf3eh highgprs te sie
    Copy to Clipboard Toggle word wrap

Procédure

  1. Installer les paquets de virtualisation :

    # dnf install qemu-kvm libvirt virt-install
    Copy to Clipboard Toggle word wrap
  2. Démarrer les services de virtualisation :

    # for drv in qemu network nodedev nwfilter secret storage interface; do systemctl start virt${drv}d{,-ro,-admin}.socket; done
    Copy to Clipboard Toggle word wrap

Vérification

  1. Vérifiez que votre système est prêt à devenir un hôte de virtualisation.

    # virt-host-validate
    [...]
    QEMU: Checking if device /dev/kvm is accessible             : PASS
    QEMU: Checking if device /dev/vhost-net exists              : PASS
    QEMU: Checking if device /dev/net/tun exists                : PASS
    QEMU: Checking for cgroup 'memory' controller support       : PASS
    QEMU: Checking for cgroup 'memory' controller mount-point   : PASS
    [...]
    Copy to Clipboard Toggle word wrap
  2. Si tous les contrôles virt-host-validate renvoient une valeur PASS, votre système est prêt à créer des VM.

    Si l'un des contrôles renvoie une valeur FAIL, suivez les instructions affichées pour résoudre le problème.

    Si l'un des contrôles renvoie une valeur WARN, envisagez de suivre les instructions affichées pour améliorer les capacités de virtualisation.

Résolution de problèmes

  • Si la virtualisation KVM n'est pas prise en charge par le processeur hôte, virt-host-validate génère le message suivant :

    QEMU: Checking for hardware virtualization: FAIL (Only emulated CPUs are available, performance will be significantly limited)
    Copy to Clipboard Toggle word wrap

    Cependant, les machines virtuelles installées sur un tel système hôte ne démarreront pas et n'auront pas de problèmes de performance.

    Pour contourner ce problème, vous pouvez modifier la valeur <domain type> dans la configuration XML de la VM en qemu. Notez cependant que Red Hat ne prend pas en charge les VM qui utilisent le type de domaine qemu, et que ce paramètre est fortement déconseillé dans les environnements de production.

2.3. Activation de la virtualisation sur ARM 64

Pour configurer un hyperviseur KVM afin de créer des machines virtuelles (VM) sur un système ARM 64 (également connu sous le nom de AArch64) qui exécute RHEL 9, suivez les instructions ci-dessous.

Conditions préalables

  • Votre système hôte et vos systèmes invités utilisent un noyau avec une taille de page mémoire de 64 Ko. Pour installer un tel noyau sur un système RHEL, voir Installation de RHEL sur ARM avec Kernel-64k.
  • Les ressources minimales suivantes doivent être disponibles :

    • 6 Go d'espace disque libre pour l'hôte, plus 6 Go pour chaque invité prévu.
    • 4 Go de RAM pour l'hôte, plus 4 Go pour chaque invité.

Procédure

  1. Installer les paquets de virtualisation :

    # dnf install qemu-kvm libvirt virt-install
    Copy to Clipboard Toggle word wrap
  2. Démarrer les services de virtualisation :

    # for drv in qemu network nodedev nwfilter secret storage interface; do systemctl start virt${drv}d{,-ro,-admin}.socket; done
    Copy to Clipboard Toggle word wrap

Vérification

  1. Vérifiez que votre système est prêt à devenir un hôte de virtualisation :

    # virt-host-validate
    [...]
    QEMU: Checking if device /dev/vhost-net exists              : PASS
    QEMU: Checking if device /dev/net/tun exists                : PASS
    QEMU: Checking for cgroup 'memory' controller support       : PASS
    QEMU: Checking for cgroup 'memory' controller mount-point   : PASS
    [...]
    QEMU: Checking for cgroup 'blkio' controller support        : PASS
    QEMU: Checking for cgroup 'blkio' controller mount-point    : PASS
    QEMU: Checking if IOMMU is enabled by kernel                : WARN (Unknown if this platform has IOMMU support)
    Copy to Clipboard Toggle word wrap
  2. Si tous les contrôles virt-host-validate renvoient une valeur PASS, votre système est prêt à créer des machines virtuelles.

    Si l'un des contrôles renvoie une valeur FAIL, suivez les instructions affichées pour résoudre le problème.

    Si l'un des contrôles renvoie une valeur WARN, envisagez de suivre les instructions affichées pour améliorer les capacités de virtualisation.

Pour utiliser certaines fonctionnalités sur une machine virtuelle (VM) hébergée sur votre système RHEL 9, vous devez d'abord configurer la VM pour qu'elle utilise l'agent invité QEMU (GA).

Pour une liste complète de ces fonctionnalités, voir Fonctionnalités de virtualisation nécessitant l'agent invité QEMU.

Les étapes spécifiques requises pour configurer QEMU GA sur une VM diffèrent en fonction du système d'exploitation invité utilisé par la VM :

Pour permettre à un hôte RHEL d'effectuer un certain sous-ensemble d'opérations sur une machine virtuelle (VM) Linux, vous devez activer l'agent invité QEMU (GA).

Vous pouvez activer QEMU GA à la fois sur les machines virtuelles en cours d'exécution et sur celles qui sont arrêtées.

Procédure

  1. Créer un fichier de configuration XML pour l'AG QEMU, par exemple nommé qemuga.xml:

    # touch qemuga.xml
    Copy to Clipboard Toggle word wrap
  2. Ajoutez les lignes suivantes au fichier :

    <channel type='unix'>
       <source mode='bind' path='/var/lib/libvirt/qemu/f16x86_64.agent'/>
       <target type='virtio' name='org.qemu.guest_agent.0'/>
    </channel>
    Copy to Clipboard Toggle word wrap
  3. Utilisez le fichier XML pour ajouter QEMU GA à la configuration de la VM.

    • Si la VM est en cours d'exécution, utilisez la commande suivante :

      # virsh attach-device <vm-name> qemuga.xml --live --config
      Copy to Clipboard Toggle word wrap
    • Si la VM est arrêtée, utilisez la commande suivante :

      # virsh attach-device <vm-name> qemuga.xml --config
      Copy to Clipboard Toggle word wrap
  4. Dans le système d'exploitation invité Linux, installez l'AG QEMU :

    # dnf install qemu-guest-agent
    Copy to Clipboard Toggle word wrap
  5. Démarrer le service QEMU GA sur l'invité :

    # systemctl start qemu-guest-agent
    Copy to Clipboard Toggle word wrap

Vérification

Pour vous assurer que QEMU GA est activé et fonctionne sur la VM Linux, effectuez l'une des opérations suivantes :

  • Dans le système d'exploitation invité, utilisez la commande systemctl status qemu-guest-agent | grep Loaded. Si la sortie comprend enabled, QEMU GA est actif sur la VM.
  • Utilisez la commande virsh domfsinfo <vm-name> sur l'hôte. Si elle affiche une sortie, QEMU GA est actif sur la VM spécifiée.

2.4.2. Activation de QEMU Guest Agent sur les invités Windows

Pour permettre à un hôte RHEL d'effectuer un certain sous-ensemble d'opérations sur une machine virtuelle (VM) Windows, vous devez activer l'agent invité QEMU (GA). Pour ce faire, ajoutez un périphérique de stockage contenant le programme d'installation de l'agent invité QEMU à une machine virtuelle existante ou lors de la création d'une nouvelle machine virtuelle, et installez les pilotes sur le système d'exploitation invité Windows.

Pour installer l'agent invité (GA) à l'aide de l'interface graphique, voir la procédure ci-dessous. Pour installer l'AG dans une interface de ligne de commande, utilisez le programme d'installation Microsoft Windows (MSI).

Conditions préalables

Procédure

  1. Dans le système d'exploitation invité Windows, ouvrez l'application File Explorer.
  2. Cliquez sur This PC.
  3. Dans le volet Devices and drives, ouvrez le support virtio-win.
  4. Ouvrez le dossier guest-agent.
  5. En fonction du système d'exploitation installé sur la VM, exécutez l'un des programmes d'installation suivants :

    • Si vous utilisez un système d'exploitation 32 bits, exécutez le programme d'installation qemu-ga-i386.msi.
    • Si vous utilisez un système d'exploitation 64 bits, exécutez le programme d'installation qemu-ga-x86_64.msi.
  6. Optional: Si vous souhaitez utiliser le pilote série para-virtualisé (virtio-serial) comme interface de communication entre l'hôte et l'invité Windows, vérifiez que le pilote virtio-serial est installé sur l'invité Windows. Pour plus d'informations sur l'installation des pilotes virtio, voir : Installation des pilotes virtio sur un invité Windows.

Vérification

  1. Sur votre VM Windows, accédez à la fenêtre Services.

    Computer Management > Services

  2. Assurez-vous que l'état du service QEMU Guest Agent est Running.

Si vous activez QEMU Guest Agent (GA) sur une machine virtuelle (VM), vous pouvez utiliser les commandes suivantes sur votre hôte pour gérer la VM :

virsh shutdown --mode=agent
Cette méthode d'arrêt est plus fiable que virsh shutdown --mode=acpi, car virsh shutdown utilisé avec QEMU GA garantit l'arrêt d'un invité coopératif dans un état propre.
virsh domfsfreeze et virsh domfsthaw
Gèle le système de fichiers de l'invité de manière isolée.
virsh domfstrim

Indique à l'invité de découper son système de fichiers, ce qui permet de réduire les données à transférer lors des migrations.

Important

Si vous souhaitez utiliser cette commande pour gérer une VM Linux, vous devez également définir le booléen SELinux suivant dans le système d'exploitation invité :

# setsebool virt_qemu_ga_read_nonsecurity_files on
Copy to Clipboard Toggle word wrap
virsh domtime
Interroge ou règle l'horloge de l'hôte.
virsh setvcpus --guest
Indique à l'invité de mettre les processeurs hors ligne, ce qui est utile lorsque les processeurs ne peuvent pas être débranchés à chaud.
virsh domifaddr --source agent
Interroge l'adresse IP du système d'exploitation invité en utilisant QEMU GA. Cette fonction est utile, par exemple, lorsque l'interface de l'invité est directement reliée à une interface hôte.
virsh domfsinfo
Affiche une liste des systèmes de fichiers montés dans l'invité en cours d'exécution.
virsh set-user-password
Définit le mot de passe d'un compte utilisateur donné dans l'invité.
virsh set-user-sshkeys

Modifie le fichier des clés SSH autorisées pour un utilisateur donné dans l'invité.

Important

Si vous souhaitez utiliser cette commande pour gérer une VM Linux, vous devez également définir le booléen SELinux suivant dans le système d'exploitation invité :

# setsebool virt_qemu_ga_manage_ssh on
Copy to Clipboard Toggle word wrap

Chapitre 3. Création de machines virtuelles

Pour créer une machine virtuelle (VM) dans RHEL 9, utilisez l'interface de ligne de commande ou la console web RHEL 9.

Pour créer une machine virtuelle (VM) sur votre hôte RHEL 9 à l'aide de l'utilitaire virt-install, suivez les instructions ci-dessous.

Conditions préalables

  • La virtualisation est activée sur votre système hôte.
  • Vous disposez d'une quantité suffisante de ressources système à allouer à vos machines virtuelles, telles que l'espace disque, la mémoire vive ou les processeurs. Les valeurs recommandées peuvent varier de manière significative en fonction des tâches prévues et de la charge de travail des VM.
  • Une source d'installation du système d'exploitation (OS) est disponible localement ou sur un réseau. Il peut s'agir de l'une des sources suivantes

    • Une image ISO d'un support d'installation
    • Une image disque d'une installation VM existante

      Avertissement

      L'installation à partir d'un CD-ROM ou d'un DVD-ROM hôte n'est pas possible dans RHEL 9. Si vous sélectionnez un CD-ROM ou un DVD-ROM comme source d'installation lors de l'utilisation d'une méthode d'installation de VM disponible dans RHEL 9, l'installation échouera. Pour plus d'informations, consultez la base de connaissances de Red Hat.

      Notez également que Red Hat ne prend en charge qu'un nombre limité de systèmes d'exploitation invités.

  • Facultatif : Un fichier Kickstart peut être fourni pour faciliter et accélérer la configuration de l'installation.

Procédure

Pour créer une VM et lancer l'installation de son système d'exploitation, utilisez la commande virt-install, avec les arguments obligatoires suivants :

  • --namele nom de la nouvelle machine
  • --memoryla quantité de mémoire allouée
  • --vcpusle nombre d'unités centrales virtuelles allouées
  • --diskle type et la taille de l'espace de stockage alloué
  • --cdrom ou --location: le type et l'emplacement de la source d'installation du système d'exploitation

En fonction de la méthode d'installation choisie, les options et valeurs nécessaires peuvent varier. Voir les commandes ci-dessous pour des exemples :

  • La commande suivante crée une VM nommée demo-guest1 qui installe le système d'exploitation Windows 10 à partir d'une image ISO stockée localement dans le fichier /home/username/Downloads/Win10install.iso. Cette VM est également dotée de 2048 MiB de RAM et de 2 vCPU, et un disque virtuel qcow2 de 80 GiB est automatiquement configuré pour la VM.

    # virt-install \
        --name demo-guest1 --memory 2048 \
        --vcpus 2 --disk size=80 --os-variant win10 \
        --cdrom /home/username/Downloads/Win10install.iso
    Copy to Clipboard Toggle word wrap
  • La commande suivante crée une VM nommée demo-guest2 qui utilise l'image /home/username/Downloads/rhel9.iso pour exécuter un système d'exploitation RHEL 9 à partir d'un CD live. Aucun espace disque n'est attribué à cette VM, de sorte que les modifications apportées pendant la session ne seront pas conservées. En outre, la VM se voit attribuer 4096 MiB de RAM et 4 vCPU.

    # virt-install \
        --name demo-guest2 --memory 4096 --vcpus 4 \
        --disk none --livecd --os-variant rhel9.0 \
        --cdrom /home/username/Downloads/rhel9.iso
    Copy to Clipboard Toggle word wrap
  • La commande suivante crée une VM RHEL 9 nommée demo-guest3 qui se connecte à une image disque existante, /home/username/backup/disk.qcow2. Cela revient à déplacer physiquement un disque dur d'une machine à l'autre, de sorte que le système d'exploitation et les données disponibles pour demo-guest3 sont déterminés par la manière dont l'image a été gérée précédemment. En outre, cette VM est dotée de 2048 MiB de RAM et de 2 vCPU.

    # virt-install \
        --name demo-guest3 --memory 2048 --vcpus 2 \
        --os-variant rhel9.0 --import \
        --disk /home/username/backup/disk.qcow2
    Copy to Clipboard Toggle word wrap

    Notez que l'option --os-variant est fortement recommandée lors de l'importation d'une image disque. Si elle n'est pas fournie, les performances de la VM créée seront affectées négativement.

  • La commande suivante crée une VM nommée demo-guest4 qui s'installe à partir de l'URL http://example.com/OS-install. Pour que l'installation démarre avec succès, l'URL doit contenir une arborescence d'installation du système d'exploitation qui fonctionne. En outre, le système d'exploitation est automatiquement configuré à l'aide du fichier kickstart de /home/username/ks.cfg. Cette VM est également dotée de 2048 MiB de RAM, de 2 vCPU et d'un disque virtuel qcow2 de 160 GiB.

    # virt-install \
        --name demo-guest4 --memory 2048 --vcpus 2 --disk size=160 \
        --os-variant rhel9.0 --location http://example.com/OS-install \
        --initrd-inject /home/username/ks.cfg --extra-args="inst.ks=file:/ks.cfg console=tty0 console=ttyS0,115200n8"
    Copy to Clipboard Toggle word wrap

    En outre, si vous souhaitez héberger demo-guest4 sur un hôte RHEL 9 on an ARM 64, incluez les lignes suivantes pour vous assurer que le fichier kickstart installe le paquetage kernel-64k:

    %packages
    -kernel
    kernel-64k
    %end
    Copy to Clipboard Toggle word wrap
  • La commande suivante crée une VM nommée demo-guest5 qui s'installe à partir d'un fichier image RHEL9.iso en mode texte uniquement, sans graphiques. Elle connecte la console invitée à la console série. La VM a 16384 MiB de mémoire, 16 vCPU, et 280 GiB de disque. Ce type d'installation est utile pour se connecter à un hôte sur un réseau lent.

    # virt-install \
        --name demo-guest5 --memory 16384 --vcpus 16 --disk size=280 \
        --os-variant rhel9.0 --location RHEL9.iso \
        --graphics none --extra-args='console=ttyS0'
    Copy to Clipboard Toggle word wrap
  • La commande suivante crée une VM nommée demo-guest6, qui a la même configuration que demo-guest5, mais qui réside sur l'hôte distant 192.0.2.1.

    # virt-install \
        --connect qemu+ssh://root@192.0.2.1/system --name demo-guest6 --memory 16384 \
        --vcpus 16 --disk size=280 --os-variant rhel9.0 --location RHEL9.iso \
        --graphics none --extra-args='console=ttyS0'
    Copy to Clipboard Toggle word wrap
  • La commande suivante crée une VM nommée demo-guest-7, qui a la même configuration que demo-guest5, mais pour son stockage, elle utilise un périphérique DASD médiatisé mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8, et lui attribue le numéro de périphérique 1111.

    # virt-install \
        --name demo-guest7 --memory 16384 --vcpus 16 --disk size=280 \
        --os-variant rhel9.0 --location RHEL9.iso --graphics none \
        --disk none --hostdev mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8,address.type=ccw,address.cssid=0xfe,address.ssid=0x0,address.devno=0x1111,boot-order=1 \
        --extra-args 'rd.dasd=0.0.1111'
    Copy to Clipboard Toggle word wrap

    Notez que le nom du dispositif médiatisé disponible pour l'installation peut être récupéré à l'aide de la commande virsh nodedev-list --cap mdev.

Vérification

  • Si la VM est créée avec succès, une fenêtre virt-viewer s'ouvre avec une console graphique de la VM et démarre l'installation du système d'exploitation invité.

Résolution de problèmes

  • Si virt-install échoue avec une erreur cannot find default network:

    • Assurez-vous que le paquetage libvirt-daemon-config-network est installé :

      # {PackageManagerCommand} info libvirt-daemon-config-network
      Installed Packages
      Name         : libvirt-daemon-config-network
      [...]
      Copy to Clipboard Toggle word wrap
    • Vérifiez que le réseau par défaut libvirt est actif et configuré pour démarrer automatiquement :

      # virsh net-list --all
       Name      State    Autostart   Persistent
      --------------------------------------------
       default   active   yes         yes
      Copy to Clipboard Toggle word wrap
    • Si ce n'est pas le cas, activez le réseau par défaut et configurez-le pour qu'il démarre automatiquement :

      # virsh net-autostart default
      Network default marked as autostarted
      
      # virsh net-start default
      Network default started
      Copy to Clipboard Toggle word wrap
      • Si l'activation du réseau par défaut échoue avec l'erreur suivante, c'est que le paquet libvirt-daemon-config-network n'a pas été installé correctement.

        error: failed to get network 'default'
        error: Network not found: no network with matching name 'default'
        Copy to Clipboard Toggle word wrap

        Pour résoudre ce problème, réinstallez libvirt-daemon-config-network:

        # {PackageManagerCommand} reinstall libvirt-daemon-config-network
        Copy to Clipboard Toggle word wrap
      • Si l'activation du réseau par défaut échoue avec une erreur similaire à la suivante, un conflit s'est produit entre le sous-réseau du réseau par défaut et une interface existante sur l'hôte.

        error: Failed to start network default
        error: internal error: Network is already in use by interface ens2
        Copy to Clipboard Toggle word wrap

        Pour résoudre ce problème, utilisez la commande virsh net-edit default et modifiez les valeurs de 192.0.2.* dans la configuration pour un sous-réseau qui n'est pas déjà utilisé sur l'hôte.

Pour gérer les machines virtuelles (VM) dans une interface graphique sur un hôte RHEL 9, utilisez la console Web. Les sections suivantes fournissent des informations sur l'utilisation de la console Web RHEL 9 pour créer des machines virtuelles et y installer des systèmes d'exploitation invités.

Pour créer une machine virtuelle (VM) sur une machine hôte à laquelle votre console web RHEL 9 est connectée, suivez les instructions ci-dessous.

Conditions préalables

Procédure

  1. Dans l'interface Virtual Machines de la console web, cliquez sur Create VM.

    La boîte de dialogue Create new virtual machine apparaît.

  2. Saisissez la configuration de base de la VM que vous souhaitez créer.

    • Name - Le nom de la VM.
    • Connection - Le niveau de privilèges accordé à la session. Pour plus de détails, développez la boîte de dialogue associée dans la console web.
    • Installation type - L'installation peut utiliser un support d'installation local, une URL, un démarrage réseau PXE, une image de base dans le nuage ou télécharger un système d'exploitation à partir d'un ensemble limité de systèmes d'exploitation.
    • Operating system - Le système d'exploitation invité fonctionnant sur la VM. Notez que Red Hat ne prend en charge qu'un nombre limité de systèmes d'exploitation invités.

      Note

      Pour télécharger et installer Red Hat Enterprise Linux directement à partir de la console Web, vous devez ajouter un jeton hors ligne dans le champ Offline token.

    • Storage - Le type de stockage.
    • Storage Limit - La quantité d'espace de stockage.
    • Memory - La quantité de mémoire.
  3. Créer la VM :

    • Si vous souhaitez que la VM installe automatiquement le système d'exploitation, cliquez sur Créer et exécuter.
    • Si vous souhaitez modifier la VM avant l'installation du système d'exploitation, cliquez sur Créer et modifier.

Vous pouvez créer une machine virtuelle (VM) en important une image disque d'une installation VM existante dans la console web RHEL 9.

Conditions préalables

  • Le plug-in VM de la console web est installé sur votre système.
  • Vous disposez d'une quantité suffisante de ressources système à allouer à vos machines virtuelles, telles que l'espace disque, la mémoire vive ou les processeurs. Les valeurs recommandées peuvent varier considérablement en fonction des tâches prévues et de la charge de travail des VM.
  • Vous avez téléchargé une image disque d'une installation VM existante.

Procédure

  1. Dans l'interface Virtual Machines de la console web, cliquez sur Import VM.

    Le site Import a virtual machine dialog s'affiche.

  2. Saisissez la configuration de base de la VM que vous souhaitez créer :

    • Name - Le nom de la VM.
    • Disk image - Chemin d'accès à l'image disque existante d'une VM sur le système hôte.
    • Operating system - Le système d'exploitation fonctionnant sur un disque VM. Notez que Red Hat ne prend en charge qu'un nombre limité de systèmes d'exploitation invités.
    • Memory - Quantité de mémoire à allouer à la VM.
  3. Importer la VM :

    • Pour installer le système d'exploitation sur la VM sans modifier les paramètres de la VM, cliquez sur Importer et exécuter.
    • Pour modifier les paramètres de la VM avant l'installation du système d'exploitation, cliquez sur Importer et modifier.

Lorsqu'une machine virtuelle (VM) démarre pour la première fois, vous devez installer un système d'exploitation sur la VM.

Note

Si vous cliquez sur Créer et exécuter ou Importer et exécuter lors de la création d'une nouvelle VM, la routine d'installation du système d'exploitation démarre automatiquement lors de la création de la VM.

Procédure

  1. Dans l'interface Virtual Machines, cliquez sur la VM sur laquelle vous souhaitez installer un système d'exploitation invité.

    Une nouvelle page s'ouvre avec des informations de base sur la VM sélectionnée et des commandes permettant de gérer divers aspects de la VM.

  2. Optional: Modifier le micrologiciel.

    Note

    Vous ne pouvez modifier le microprogramme que si vous avez sélectionné Créer et modifier ou Importer et modifier lors de la création d'une nouvelle VM et si le système d'exploitation n'est pas déjà installé sur la VM.

    . Cliquez sur le micrologiciel.

    1. Dans la fenêtre Change Firmware, sélectionnez le micrologiciel requis.
    2. Cliquez sur Enregistrer.
  3. Cliquez sur Installer.

    La routine d'installation du système d'exploitation s'exécute dans la console VM.

Résolution de problèmes

  • Si la routine d'installation échoue, supprimez et recréez la VM avant de recommencer l'installation.

Par défaut, les images de cloud distro n'ont pas de comptes de connexion. Cependant, en utilisant la console web RHEL, vous pouvez maintenant créer une machine virtuelle (VM) et spécifier les identifiants de connexion des comptes root et utilisateur, qui sont ensuite transmis à cloud-init.

Conditions préalables

  • Le plug-in VM de la console web est installé sur votre système.
  • La virtualisation est activée sur votre système hôte.
  • Vous disposez d'une quantité suffisante de ressources système à allouer à vos machines virtuelles, telles que l'espace disque, la mémoire vive ou les processeurs. Les valeurs recommandées peuvent varier de manière significative en fonction des tâches prévues et de la charge de travail des VM.

Procédure

  1. Dans l'interface Machines virtuelles de la console web, cliquez sur Create VM.

    La boîte de dialogue Créer une nouvelle machine virtuelle apparaît.

  2. Dans le champ Name, entrez un nom pour la VM.
  3. Dans l'onglet Details, dans le champ Installation type, sélectionnez Cloud base image.

  4. Dans le champ Installation source, indiquez le chemin d'accès au fichier image sur votre système hôte.
  5. Saisissez la configuration de la VM que vous souhaitez créer.

    • Operating system - Le système d'exploitation de la VM. Notez que Red Hat ne prend en charge qu'un nombre limité de systèmes d'exploitation invités.
    • Storage - Le type de stockage avec lequel la VM doit être configurée.
    • Storage Limit - La quantité d'espace de stockage nécessaire pour configurer la VM.
    • Memory - La quantité de mémoire avec laquelle la VM doit être configurée.
  6. Cliquez sur l'onglet Automation.

    Définissez vos informations d'authentification pour le cloud.

    • Root password - Saisissez un mot de passe racine pour votre VM. Laissez le champ vide si vous ne souhaitez pas définir de mot de passe root.
    • User login - Saisissez un identifiant pour l'utilisateur de cloud-init. Laissez ce champ vide si vous ne souhaitez pas créer de compte utilisateur.
    • User password - Entrez un mot de passe. Laissez ce champ vide si vous ne souhaitez pas créer de compte utilisateur.

  7. Cliquez sur Créer et exécuter.

    La VM est créée.

Chapitre 4. Démarrage des machines virtuelles

Pour démarrer une machine virtuelle (VM) dans RHEL 9, vous pouvez utiliser l'interface de ligne de commande ou l'interface graphique de la console web.

Conditions préalables

  • Avant de pouvoir démarrer une VM, il faut la créer et, idéalement, l'installer avec un système d'exploitation. Pour savoir comment procéder, voir Création de machines virtuelles.

Vous pouvez utiliser l'interface de ligne de commande (CLI) pour démarrer une machine virtuelle (VM) arrêtée ou restaurer une VM sauvegardée. En utilisant l'interface de ligne de commande, vous pouvez démarrer des machines virtuelles locales et distantes.

Conditions préalables

  • Une VM inactive qui est déjà définie.
  • Le nom de la VM.
  • Pour les machines virtuelles distantes :

    • L'adresse IP de l'hôte où se trouve la VM.
    • Privilèges d'accès à la racine de l'hôte.

Procédure

  • Pour une VM locale, utilisez l'utilitaire virsh start.

    Par exemple, la commande suivante démarre la VM demo-guest1.

    # virsh start demo-guest1
    Domain 'demo-guest1' started
    Copy to Clipboard Toggle word wrap
  • Pour une VM située sur un hôte distant, utilisez l'utilitaire virsh start ainsi que la connexion SSH QEMU à l'hôte.

    Par exemple, la commande suivante démarre la VM demo-guest1 sur l'hôte 192.0.2.1.

    # virsh -c qemu+ssh://root@192.0.2.1/system start demo-guest1
    
    root@192.0.2.1's password:
    
    Domain 'demo-guest1' started
    Copy to Clipboard Toggle word wrap

Si une machine virtuelle (VM) est dans l'état shut off, vous pouvez la démarrer à l'aide de la console web RHEL 9. Vous pouvez également configurer la VM pour qu'elle soit démarrée automatiquement au démarrage de l'hôte.

Conditions préalables

Procédure

  1. Dans l'interface Machines virtuelles, cliquez sur la VM que vous souhaitez démarrer.

    Une nouvelle page s'ouvre avec des informations détaillées sur la VM sélectionnée et des commandes pour arrêter et supprimer la VM.

  2. Cliquez sur Exécuter.

    La VM démarre et vous pouvez vous connecter à sa console ou à sa sortie graphique.

  3. Optional: Pour configurer la VM afin qu'elle démarre automatiquement au démarrage de l'hôte, cochez la case Autostart dans la section Overview.

    Si vous utilisez des interfaces réseau qui ne sont pas gérées par libvirt, vous devez également apporter des modifications supplémentaires à la configuration de systemd. Sinon, les machines virtuelles concernées risquent de ne pas démarrer, voir Démarrage automatique des machines virtuelles au démarrage de l'hôte.

Lorsqu'un hôte avec une machine virtuelle (VM) en cours d'exécution redémarre, la VM est arrêtée et doit être redémarrée manuellement par défaut. Pour s'assurer qu'une VM est active lorsque son hôte est en cours d'exécution, vous pouvez configurer la VM pour qu'elle soit démarrée automatiquement.

Conditions préalables

Procédure

  1. Utilisez l'utilitaire virsh autostart pour configurer la VM afin qu'elle démarre automatiquement au démarrage de l'hôte.

    Par exemple, la commande suivante configure la VM demo-guest1 pour qu'elle démarre automatiquement.

    # virsh autostart demo-guest1
    Domain 'demo-guest1' marked as autostarted
    Copy to Clipboard Toggle word wrap
  2. Si vous utilisez des interfaces réseau qui ne sont pas gérées par libvirt, vous devez également apporter des modifications supplémentaires à la configuration de systemd. Dans le cas contraire, les machines virtuelles concernées risquent de ne pas démarrer.

    Note

    Ces interfaces comprennent par exemple

    • Dispositifs de pont créés par NetworkManager
    • Les réseaux configurés pour utiliser <forward mode='bridge'/>
    1. Dans l'arborescence des répertoires de configuration de systemd, créez un répertoire virtqemud.service.d s'il n'existe pas encore.

      # mkdir -p /etc/systemd/system/virtqemud.service.d/
      Copy to Clipboard Toggle word wrap
    2. Créez un fichier 10-network-online.conf systemd unit override dans le répertoire précédemment créé. Le contenu de ce fichier remplace la configuration par défaut de systemd pour le service virtqemud.

      # touch /etc/systemd/system/virtqemud.service.d/10-network-online.conf
      Copy to Clipboard Toggle word wrap
    3. Ajoutez les lignes suivantes au fichier 10-network-online.conf. Ce changement de configuration garantit que systemd ne démarre le service virtqemud qu'une fois que le réseau de l'hôte est prêt.

      [Unit]
      After=network-online.target
      Copy to Clipboard Toggle word wrap

Vérification

  1. Affichez la configuration de la VM et vérifiez que l'option autostart est activée.

    Par exemple, la commande suivante affiche des informations de base sur la VM demo-guest1, y compris l'option autostart.

    # virsh dominfo demo-guest1
    Id:             2
    Name:           demo-guest1
    UUID:           e46bc81c-74e2-406e-bd7a-67042bae80d1
    OS Type:        hvm
    State:          running
    CPU(s):         2
    CPU time:       385.9s
    Max memory:     4194304 KiB
    Used memory:    4194304 KiB
    Persistent:     yes
    Autostart:      enable
    Managed save:   no
    Security model: selinux
    Security DOI:   0
    Security label: system_u:system_r:svirt_t:s0:c873,c919 (enforcing)
    Copy to Clipboard Toggle word wrap
  2. Si vous utilisez des interfaces réseau qui ne sont pas gérées par libvirt, vérifiez si le contenu du fichier 10-network-online.conf correspond à la sortie suivante.

    $ cat /etc/systemd/system/virtqemud.service.d/10-network-online.conf
    [Unit]
    After=network-online.target
    Copy to Clipboard Toggle word wrap

Chapitre 5. Connexion aux machines virtuelles

Pour interagir avec une machine virtuelle (VM) dans RHEL 9, vous devez vous y connecter en effectuant l'une des opérations suivantes :

Si les machines virtuelles auxquelles vous vous connectez se trouvent sur un hôte distant plutôt que sur un hôte local, vous pouvez éventuellement configurer votre système pour un accès plus pratique aux hôtes distants.

Conditions préalables

Pour interagir avec une machine virtuelle (VM) dans la console web RHEL 9, vous devez vous connecter à la console de la VM. Il existe des consoles graphiques et des consoles série.

En utilisant l'interface de la console de la machine virtuelle (VM), vous pouvez visualiser la sortie graphique d'une VM sélectionnée dans la console web de RHEL 9.

Conditions préalables

  • Le plug-in VM de la console web est installé sur votre système.
  • Assurez-vous que l'hôte et la machine virtuelle prennent en charge une interface graphique.

Procédure

  1. Dans l'interface Machines virtuelles, cliquez sur la VM dont vous souhaitez afficher la console graphique.

    Une nouvelle page s'ouvre avec une section Overview et une section Console pour la VM.

  2. Sélectionnez la console VNC dans le menu déroulant de la console.

    La console VNC apparaît sous le menu de l'interface web.

    La console graphique apparaît dans l'interface web.

  3. Cliquez pour agrandir

    Vous pouvez désormais interagir avec la console VM en utilisant la souris et le clavier de la même manière que vous interagissez avec une machine réelle. L'affichage de la console VM reflète les activités effectuées sur la VM.

Note

L'hôte sur lequel la console web est exécutée peut intercepter des combinaisons de touches spécifiques, telles que Ctrl+Alt+Supprles empêchant d'être envoyées à la VM.

Pour envoyer ces combinaisons de touches, cliquez sur le menu Envoyer une touche et sélectionnez la séquence de touches à envoyer.

Par exemple, pour envoyer la touche Ctrl+Alt+Del à la VM, cliquez sur la touche Envoyer et sélectionnez l'entrée de menu Ctrl Alt Del.

Résolution de problèmes

  • Si le fait de cliquer dans la console graphique n'a aucun effet, agrandissez la console en plein écran. Il s'agit d'un problème connu lié au décalage du curseur de la souris.

En utilisant l'interface de la console web, vous pouvez afficher la console graphique d'une machine virtuelle (VM) sélectionnée dans un visualiseur distant, tel que Virt Viewer.

Note

Vous pouvez lancer Virt Viewer à partir de la console web. D'autres visionneuses VNC peuvent être lancées manuellement.

Conditions préalables

  • Le plug-in VM de la console web est installé sur votre système.
  • Assurez-vous que l'hôte et la machine virtuelle prennent en charge une interface graphique.
  • Avant de pouvoir afficher la console graphique dans Virt Viewer, vous devez installer Virt Viewer sur la machine à laquelle la console web est connectée.

    1. Cliquez sur Lancer la visionneuse à distance.

      Le virt viewer, .vv, permet de télécharger des fichiers.

    2. Ouvrir le fichier pour lancer Virt Viewer.
Note

Remote Viewer est disponible sur la plupart des systèmes d'exploitation. Cependant, certaines extensions de navigateur et certains plug-ins ne permettent pas à la console web d'ouvrir Virt Viewer.

Procédure

  1. Dans l'interface Machines virtuelles, cliquez sur la VM dont vous souhaitez afficher la console graphique.

    Une nouvelle page s'ouvre avec une section Overview et une section Console pour la VM.

  2. Sélectionnez Desktop Viewer dans le menu déroulant de la console.

  3. Cliquez sur Lancer la visionneuse à distance.

    La console graphique s'ouvre dans Virt Viewer.

    Vous pouvez interagir avec la console VM en utilisant la souris et le clavier de la même manière que vous interagissez avec une machine réelle. L'affichage de la console VM reflète les activités effectuées sur la VM.

Note

Le serveur sur lequel tourne la console web peut intercepter des combinaisons de touches spécifiques, telles que Ctrl+Alt+Supprles empêchant ainsi d'être envoyées à la VM.

Pour envoyer ces combinaisons de touches, cliquez sur le menu Envoyer une touche et sélectionnez la séquence de touches à envoyer.

Par exemple, pour envoyer la touche Ctrl+Alt+Del à la VM, cliquez sur le menu Envoyer la touche et sélectionnez l'entrée de menu Ctrl Alt Del.

Résolution de problèmes

  • Si le fait de cliquer dans la console graphique n'a aucun effet, agrandissez la console en plein écran. Il s'agit d'un problème connu lié au décalage du curseur de la souris.
  • Si le lancement du visualiseur à distance dans la console web ne fonctionne pas ou n'est pas optimal, vous pouvez vous connecter manuellement avec n'importe quelle application de visualisation en utilisant les protocoles suivants :

    • Address - L'adresse par défaut est 127.0.0.1. Vous pouvez modifier le paramètre vnc_listen dans /etc/libvirt/qemu.conf pour le remplacer par l'adresse IP de l'hôte.
    • VNC port - 5901

Vous pouvez afficher la console série d'une machine virtuelle (VM) sélectionnée dans la console web RHEL 9. Cette fonction est utile lorsque la machine hôte ou la VM n'est pas configurée avec une interface graphique.

Pour plus d'informations sur la console de série, voir Ouvrir la console de série d'une machine virtuelle.

Conditions préalables

Procédure

  1. Dans le volet Machines virtuelles, cliquez sur la VM dont vous souhaitez afficher la console série.

    Une nouvelle page s'ouvre avec une section Overview et une section Console pour la VM.

  2. Sélectionnez Console série dans le menu déroulant Console.

    La console graphique apparaît dans l'interface web.

Vous pouvez déconnecter et reconnecter la console série de la VM.

  • Pour déconnecter la console série de la VM, cliquez sur Disconnect (Déconnecter).
  • Pour reconnecter la console série à la VM, cliquez sur Reconnect.

La prise en charge du protocole d'affichage à distance SPICE a été supprimée sur les hôtes RHEL 9. Si vous avez une machine virtuelle (VM) configurée pour utiliser le protocole SPICE, vous pouvez remplacer le protocole SPICE par le protocole VNC en utilisant la console web. Dans le cas contraire, la machine virtuelle ne démarre pas. Cependant, certains périphériques SPICE, tels que l'audio et le passage USB, seront supprimés de la VM parce qu'ils n'ont pas de remplacement approprié dans le protocole VNC.

Important

Par défaut, les machines virtuelles RHEL 8 sont configurées pour utiliser le protocole SPICE. Sur un hôte RHEL 9, ces machines virtuelles ne démarrent pas, à moins que vous ne passiez de SPICE à VNC.

Conditions préalables

  • Le plug-in VM de la console web est installé sur votre système.
  • Vous disposez d'une VM existante qui est configurée pour utiliser le protocole d'affichage à distance SPICE et qui est déjà arrêtée.

Procédure

  1. Dans l'interface Machines virtuelles de la console web, cliquez sur le bouton Menu de la VM configurée pour utiliser le protocole SPICE.

    Un menu déroulant s'ouvre avec des commandes pour diverses opérations VM.

  2. Cliquez sur Remplacer les dispositifs SPICE.

    La boîte de dialogue Remplacer les dispositifs SPICE s'ouvre.

    Note

    Si vous avez plusieurs machines virtuelles existantes qui utilisent le protocole SPICE, elles sont répertoriées dans cette boîte de dialogue. Vous pouvez y sélectionner plusieurs machines virtuelles à convertir de SPICE à VNC en une seule étape.

  3. Cliquez sur Remplacer.

    Une confirmation de la réussite de l'opération apparaît.

Pour se connecter à une console graphique d'une machine virtuelle KVM (VM) et l'ouvrir dans l'application de bureau Virt Viewer, suivez la procédure ci-dessous.

Conditions préalables

  • Votre système, ainsi que la machine virtuelle à laquelle vous vous connectez, doivent prendre en charge les affichages graphiques.
  • Si la VM cible se trouve sur un hôte distant, une connexion et des privilèges d'accès à la racine de l'hôte sont nécessaires.
  • Optional: Si la VM cible est située sur un hôte distant, configurez votre libvirt et SSH pour un accès plus pratique aux hôtes distants.

Procédure

  • Pour vous connecter à une VM locale, utilisez la commande suivante et remplacez guest-name par le nom de la VM à laquelle vous souhaitez vous connecter :

    # virt-viewer guest-name
    Copy to Clipboard Toggle word wrap
  • Pour se connecter à une VM distante, utilisez la commande virt-viewer avec le protocole SSH. Par exemple, la commande suivante permet de se connecter en tant que root à une VM appelée guest-name, située sur le système distant 192.0.2.1. La connexion nécessite également une authentification root pour 192.0.2.1.

    # virt-viewer --direct --connect qemu+ssh://root@192.0.2.1/system guest-name
    root@192.0.2.1's password:
    Copy to Clipboard Toggle word wrap

Vérification

Si la connexion fonctionne correctement, l'écran VM s'affiche dans la fenêtre Virt Viewer.

Vous pouvez interagir avec la console VM en utilisant la souris et le clavier de la même manière que vous interagissez avec une machine réelle. L'affichage de la console VM reflète les activités effectuées sur la VM.

Résolution de problèmes

  • Si le fait de cliquer dans la console graphique n'a aucun effet, agrandissez la console en plein écran. Il s'agit d'un problème connu lié au décalage du curseur de la souris.

5.3. Se connecter à une machine virtuelle en utilisant SSH

Pour interagir avec le terminal d'une machine virtuelle (VM) en utilisant le protocole de connexion SSH, suivez la procédure ci-dessous.

Conditions préalables

  • Vous disposez d'une connexion réseau et des privilèges d'accès root à la VM cible.
  • Si la VM cible se trouve sur un hôte distant, vous disposez également de privilèges de connexion et d'accès root à cet hôte.
  • Votre réseau VM attribue des adresses IP par dnsmasq générées par libvirt. C'est le cas par exemple dans les réseaux NAT libvirt.

    Notamment, si votre VM utilise l'une des configurations réseau suivantes, vous ne pouvez pas vous connecter à la VM à l'aide de SSH :

    • hostdev interfaces
    • Interfaces directes
    • Interfaces de pont
  • Le composant libvirt-nss est installé et activé sur l'hôte de la VM. Si ce n'est pas le cas, procédez comme suit :

    1. Installez le paquetage libvirt-nss:

      # dnf install libvirt-nss
      Copy to Clipboard Toggle word wrap
    2. Modifiez le fichier /etc/nsswitch.conf et ajoutez libvirt_guest à la ligne hosts:

      ...
      passwd:      compat
      shadow:      compat
      group:       compat
      hosts:       files libvirt_guest dns
      ...
      Copy to Clipboard Toggle word wrap

Procédure

  1. Lorsque vous vous connectez à une machine virtuelle distante, vous devez d'abord vous connecter en SSH à son hôte physique. L'exemple suivant illustre la connexion à une machine hôte 192.0.2.1 à l'aide des informations d'identification root :

    # ssh root@192.0.2.1
    root@192.0.2.1's password:
    Last login: Mon Sep 24 12:05:36 2021
    root~#
    Copy to Clipboard Toggle word wrap
  2. Utilisez le nom de la VM et les informations d'accès de l'utilisateur pour vous y connecter. Par exemple, la procédure suivante permet de se connecter à la VM testguest1 à l'aide des informations d'identification de l'utilisateur root :

    # ssh root@testguest1
    root@testguest1's password:
    Last login: Wed Sep 12 12:05:36 2018
    root~]#
    Copy to Clipboard Toggle word wrap

Résolution de problèmes

  • Si vous ne connaissez pas le nom de la VM, vous pouvez dresser la liste de toutes les VM disponibles sur l'hôte à l'aide de la commande virsh list --all:

    # virsh list --all
    Id    Name                           State
    ----------------------------------------------------
    2     testguest1                    running
    -     testguest2                    shut off
    Copy to Clipboard Toggle word wrap

5.4. Ouvrir la console série d'une machine virtuelle

En utilisant la commande virsh console, il est possible de se connecter à la console série d'une machine virtuelle (VM).

Ceci est utile lorsque la VM :

  • Ne fournit pas de protocoles VNC et n'offre donc pas d'affichage vidéo pour les outils d'interface graphique.
  • Ne dispose pas d'une connexion réseau et ne peut donc pas être contacté à l'aide de SSH.

Conditions préalables

  • Le chargeur d'amorçage GRUB de votre hôte doit être configuré pour utiliser la console série. Pour le vérifier, vérifiez que le fichier /etc/default/grub de votre hôte contient le paramètre GRUB_TERMINAL=serial.

    $ sudo grep GRUB_TERMINAL /etc/default/grub
    GRUB_TERMINAL=serial
    Copy to Clipboard Toggle word wrap
  • La VM doit avoir un périphérique de console série configuré, tel que console type='pty'. Pour vérifier, procédez comme suit :

    # virsh dumpxml vm-name | grep console
    
    <console type='pty' tty='/dev/pts/2'>
    </console>
    Copy to Clipboard Toggle word wrap
  • La console série doit être configurée dans la ligne de commande du noyau de la machine virtuelle. Pour le vérifier, la sortie de la commande cat /proc/cmdline sur la VM doit inclure console=<console-name>, où <console-name> est spécifique à l'architecture :

    • Pour AMD64 et Intel 64 : ttyS0
    • Pour ARM 64 : ttyAMA0

      Note

      Les commandes suivantes de cette procédure utilisent ttyS0.

      # cat /proc/cmdline
      BOOT_IMAGE=/vmlinuz-3.10.0-948.el7.x86_64 root=/dev/mapper/rhel-root ro console=tty0 console=ttyS0,9600n8 rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb
      Copy to Clipboard Toggle word wrap

      Si la console série n'est pas configurée correctement sur une VM, l'utilisation de virsh console pour se connecter à la VM vous connecte à une console invitée qui ne répond pas. Cependant, vous pouvez toujours quitter la console qui ne répond pas en utilisant la touche Ctrl+] pour quitter la console qui ne répond pas.

    • Pour configurer la console série sur la VM, procédez comme suit :

      1. Sur la VM, activez l'option console=ttyS0 kernel :

        # grubby --update-kernel=ALL --args="console=ttyS0"
        Copy to Clipboard Toggle word wrap
      2. Effacez les options du noyau qui pourraient empêcher vos modifications de prendre effet.

        # grub2-editenv - unset kernelopts
        Copy to Clipboard Toggle word wrap
      3. Redémarrez la VM.
  • Le service serial-getty@<console-name> doit être activé. Par exemple, sur AMD64 et Intel 64 :

    # systemctl status serial-getty@ttyS0.service
    
    ○ serial-getty@ttyS0.service - Serial Getty on ttyS0
         Loaded: loaded (/usr/lib/systemd/system/serial-getty@.service; enabled; preset: enabled)
    Copy to Clipboard Toggle word wrap

Procédure

  1. Sur votre système hôte, utilisez la commande virsh console. L'exemple suivant se connecte à la VM guest1, si le pilote libvirt prend en charge la gestion de la console sécurisée :

    # virsh console guest1 --safe
    Connected to domain 'guest1'
    Escape character is ^]
    
    Subscription-name
    Kernel 3.10.0-948.el7.x86_64 on an x86_64
    
    localhost login:
    Copy to Clipboard Toggle word wrap
  2. Vous pouvez interagir avec la console virsh de la même manière qu'avec une interface de ligne de commande standard.

Lorsque vous gérez des machines virtuelles sur un système hôte distant à l'aide des utilitaires libvirt, il est recommandé d'utiliser la syntaxe -c qemu ssh://root@hostname/system. Par exemple, pour utiliser la commande virsh list en tant que root sur l'hôte 192.0.2.1:

# virsh -c qemu+ssh://root@192.0.2.1/system list
root@192.0.2.1's password:

Id   Name              State
---------------------------------
1    remote-guest      running
Copy to Clipboard Toggle word wrap

Cependant, vous pouvez supprimer la nécessité de spécifier les détails de la connexion en modifiant votre configuration SSH et libvirt. Par exemple :

# virsh -c remote-host list
root@192.0.2.1's password:

Id   Name              State
---------------------------------
1    remote-guest      running
Copy to Clipboard Toggle word wrap

Pour activer cette amélioration, suivez les instructions ci-dessous.

Procédure

  1. Modifiez le fichier ~/.ssh/config avec les détails suivants, où host-alias est un nom abrégé associé à un hôte distant spécifique et un alias pour root@192.0.2.1, et hosturl est l'adresse URL de l'hôte :

    # vi ~/.ssh/config
    Host example-host-alias
      User                    root
      Hostname                192.0.2.1
    Copy to Clipboard Toggle word wrap
  2. Modifiez le fichier /etc/libvirt/libvirt.conf avec les détails suivants, le example-qemu-host-alias est un alias d'hôte que les utilitaires QEMU et libvirt associeront à qemu ssh://192.0.2.1/system avec l'hôte prévu example-host-alias:

    # vi /etc/libvirt/libvirt.conf
    uri_aliases = [
      "example-qemu-host-alias=qemu+ssh://example-host-alias/system",
    ]
    Copy to Clipboard Toggle word wrap

Vérification

  1. Confirmez que vous pouvez gérer des machines virtuelles distantes en utilisant des utilitaires basés sur libvirt sur le système local avec un paramètre supplémentaire -c qemu-host-alias ajouté. Cela permet d'exécuter automatiquement les commandes via SSH sur l'hôte distant.

    Par exemple, vérifiez que la liste suivante répertorie les machines virtuelles sur l'hôte distant 192.0.2.1, dont la connexion a été configurée à l'adresse example-qemu-host-alias dans les étapes précédentes :

    # virsh -c example-qemu-host-alias list
    
    root@192.0.2.1's password:
    
    Id   Name                       State
    ----------------------------------------
    1    example-remote-guest      running
    Copy to Clipboard Toggle word wrap
    Note

    Outre virsh, l'option -c (ou --connect) et la configuration de l'accès à l'hôte distant décrite ci-dessus peuvent être utilisées par les utilitaires suivants :

Prochaines étapes

Si vous souhaitez utiliser les utilitaires libvirt exclusivement sur un seul hôte distant, vous pouvez également définir une connexion spécifique comme cible par défaut pour les utilitaires basés sur libvirt. Toutefois, cela n'est pas recommandé si vous souhaitez également gérer des machines virtuelles sur votre hôte local ou sur différents hôtes distants.

  • Vous pouvez éditer le fichier /etc/libvirt/libvirt.conf et définir la valeur du paramètre uri_default à example-qemu-host-alias comme cible libvirt par défaut.

    # These can be used in cases when no URI is supplied by the application
    # (@uri_default also prevents probing of the hypervisor driver).
    #
    uri_default = "example-qemu-host-alias"
    Copy to Clipboard Toggle word wrap

    Par conséquent, toutes les commandes basées sur libvirt seront automatiquement exécutées sur l'hôte distant spécifié.

    $ virsh list
    root@192.0.2.1's password:
    
    Id   Name              State
    ---------------------------------
    1   example-remote-guest      running
    Copy to Clipboard Toggle word wrap
  • Lorsque vous vous connectez à un hôte distant, vous pouvez éviter de fournir le mot de passe root au système distant. Pour ce faire, utilisez une ou plusieurs des méthodes suivantes :

  • L'option -c (ou --connect) peut être utilisée pour exécuter le programme virt-install, virt-vieweret virsh sur un hôte distant.

Chapitre 6. Arrêt des machines virtuelles

Pour arrêter une machine virtuelle en cours d'exécution hébergée sur RHEL 9, utilisez l'interface de ligne de commande ou l'interface graphique de la console Web.

Pour arrêter une machine virtuelle (VM) réactive, effectuez l'une des opérations suivantes :

  • Utilisez une commande d'arrêt appropriée au système d'exploitation de l'invité lorsque vous êtes connecté à l'invité.
  • Utilisez la commande virsh shutdown sur l'hôte :

    • Si la VM se trouve sur un hôte local :

      # virsh shutdown demo-guest1
      Domain 'demo-guest1' is being shutdown
      Copy to Clipboard Toggle word wrap
    • Si la VM se trouve sur un hôte distant, dans cet exemple 192.0.2.1 :

      # virsh -c qemu+ssh://root@192.0.2.1/system shutdown demo-guest1
      
      root@192.0.2.1's password:
      Domain 'demo-guest1' is being shutdown
      Copy to Clipboard Toggle word wrap

Pour forcer une VM à s'arrêter, par exemple si elle ne répond plus, utilisez la commande virsh destroy sur l'hôte :

# virsh destroy demo-guest1
Domain 'demo-guest1' destroyed
Copy to Clipboard Toggle word wrap
Note

La commande virsh destroy ne supprime pas la configuration de la VM ou les images de disque. Elle ne fait que mettre fin à l'instance de la VM en cours d'exécution, de la même manière que l'on débranche le cordon d'alimentation d'une machine physique. Ainsi, dans de rares cas, virsh destroy peut entraîner la corruption du système de fichiers de la VM. L'utilisation de cette commande n'est donc recommandée que si toutes les autres méthodes d'arrêt ont échoué.

À l'aide de la console web RHEL 9, vous pouvez arrêter ou redémarrer des machines virtuelles en cours d'exécution. Vous pouvez également envoyer une interruption non masquable à une machine virtuelle qui ne répond pas.

6.2.1. Arrêter des machines virtuelles dans la console web

Si une machine virtuelle (VM) est dans l'état running, vous pouvez l'arrêter en utilisant la console web RHEL 9.

Conditions préalables

Procédure

  1. Dans l'interface Machines virtuelles, recherchez la ligne de la VM que vous souhaitez arrêter.
  2. Dans la partie droite de la ligne, cliquez sur Arrêter.

    La machine virtuelle s'arrête.

Résolution de problèmes

  • Si la VM ne s'arrête pas, cliquez sur le bouton Menu à côté du bouton Arrêter et sélectionnez Forcer l'arrêt.
  • Pour arrêter une VM qui ne répond pas, vous pouvez également envoyer une interruption non masquable.

Si une machine virtuelle (VM) est dans l'état running, vous pouvez la redémarrer en utilisant la console web RHEL 9.

Conditions préalables

Procédure

  1. Dans l'interface Machines virtuelles, recherchez la ligne de la VM que vous souhaitez redémarrer.
  2. Sur le côté droit de la ligne, cliquez sur le bouton Menu .

    Un menu déroulant d'actions apparaît.

  3. Dans le menu déroulant, cliquez sur Redémarrer.

    La VM s'arrête et redémarre.

Résolution de problèmes

  • Si la VM ne redémarre pas, cliquez sur le bouton Menu à côté du bouton Redémarrer et sélectionnez Forcer le redémarrage.
  • Pour arrêter une VM qui ne répond pas, vous pouvez également envoyer une interruption non masquable.

L'envoi d'une interruption non masquable (NMI) peut amener une machine virtuelle (VM) en cours d'exécution qui ne répond pas à réagir ou à s'arrêter. Par exemple, vous pouvez envoyer la touche Ctrl+Alt+Del À une VM qui ne répond pas à l'entrée standard.

Conditions préalables

Procédure

  1. Dans l'interface Machines virtuelles, recherchez la ligne de la VM à laquelle vous souhaitez envoyer un NMI.
  2. Sur le côté droit de la ligne, cliquez sur le bouton Menu .

    Un menu déroulant d'actions apparaît.

  3. Dans le menu déroulant, cliquez sur Envoyer une interruption non masquable.

    Un NMI est envoyé à la VM.

Chapitre 7. Suppression des machines virtuelles

Pour supprimer des machines virtuelles dans RHEL 9, utilisez l'interface de ligne de commande ou l'interface graphique de la console web.

Pour supprimer une machine virtuelle (VM), vous pouvez supprimer sa configuration XML et les fichiers de stockage associés de l'hôte à l'aide de la ligne de commande. Suivez la procédure ci-dessous :

Conditions préalables

  • Sauvegarder les données importantes de la VM.
  • Arrêtez la VM.
  • Assurez-vous qu'aucune autre VM n'utilise le même stockage associé.

Procédure

  • Utilisez l'utilitaire virsh undefine.

    Par exemple, la commande suivante supprime la VM guest1, les volumes de stockage associés et la mémoire vive non volatile, le cas échéant.

    # virsh undefine guest1 --remove-all-storage --nvram
    Domain 'guest1' has been undefined
    Volume 'vda'(/home/images/guest1.qcow2) removed.
    Copy to Clipboard Toggle word wrap

Pour supprimer une machine virtuelle (VM) et ses fichiers de stockage associés de l'hôte auquel la console web RHEL 9 est connectée, suivez la procédure ci-dessous :

Conditions préalables

  • Le plug-in VM de la console web est installé sur votre système.
  • Sauvegarder les données importantes de la VM.
  • Assurez-vous qu'aucune autre VM n'utilise le même stockage associé.
  • Optional: Arrêtez la VM.

Procédure

  1. Dans l'interface Machines virtuelles, cliquez sur le bouton Menu de la VM que vous souhaitez supprimer.

    Un menu déroulant apparaît avec des commandes pour diverses opérations VM.

  2. Cliquez sur Supprimer.

    Une boîte de dialogue de confirmation apparaît.

  3. Optional: Pour supprimer tout ou partie des fichiers de stockage associés à la VM, cochez les cases situées en regard des fichiers de stockage à supprimer.
  4. Cliquez sur Supprimer.

    La VM et tous les fichiers de stockage sélectionnés sont supprimés.

Pour gérer les machines virtuelles dans une interface graphique sur un hôte RHEL 9, vous pouvez utiliser le volet Virtual Machines dans la console Web RHEL 9.

La console web RHEL 9 est une interface web pour l'administration du système. Parmi ses fonctionnalités, la console web fournit une vue graphique des machines virtuelles (VM) sur le système hôte, et permet de créer, d'accéder et de configurer ces VM.

Notez que pour utiliser la console web pour gérer vos machines virtuelles sur RHEL 9, vous devez d'abord installer un plug-in de console web pour la virtualisation.

Prochaines étapes

Avant d'utiliser la console Web RHEL 9 pour gérer les machines virtuelles (VM), vous devez installer le plug-in de machine virtuelle de la console Web sur l'hôte.

Conditions préalables

  • Assurez-vous que la console web est installée et activée sur votre machine.

    # systemctl status cockpit.socket
    cockpit.socket - Cockpit Web Service Socket
    Loaded: loaded (/usr/lib/systemd/system/cockpit.socket
    [...]
    Copy to Clipboard Toggle word wrap

    Si cette commande renvoie Unit cockpit.socket could not be found, suivez le document Installation de la console web pour activer la console web.

Procédure

  • Installer le plug-in cockpit-machines.

    # dnf install cockpit-machines
    Copy to Clipboard Toggle word wrap

Vérification

  1. Accédez à la console web, par exemple en saisissant l'adresse https://localhost:9090 dans votre navigateur.
  2. Se connecter.
  3. Si l'installation a réussi, Machines virtuelles apparaît dans le menu latéral de la console web.

Vous pouvez avoir besoin de renommer une machine virtuelle (VM) existante pour éviter les conflits de noms ou attribuer un nouveau nom unique en fonction de votre cas d'utilisation. Pour renommer la VM, vous pouvez utiliser la console web RHEL.

Conditions préalables

Procédure

  1. Dans l'interface Machines virtuelles, cliquez sur le bouton Menu de la VM que vous souhaitez renommer.

    Un menu déroulant apparaît avec des commandes pour diverses opérations VM.

  2. Cliquez sur Renommer.

    La boîte de dialogue Rename a VM apparaît.

  3. Dans le champ New name, entrez un nom pour la VM.
  4. Cliquez sur Renommer.

Vérification

  • Vérifiez que le nouveau nom de la VM est apparu dans l'interface Machines virtuelles.

En utilisant la console web RHEL 9, vous pouvez effectuer les actions suivantes pour gérer les machines virtuelles (VM) sur votre système.

Expand
Tableau 8.1. Tâches de gestion des machines virtuelles que vous pouvez effectuer dans la console web RHEL 9
TâchePour plus de détails, voir

Créer une VM et l'installer avec un système d'exploitation invité

Création de machines virtuelles et installation de systèmes d'exploitation invités à l'aide de la console web

Supprimer une VM

Suppression de machines virtuelles à l'aide de la console web

Démarrer, arrêter et redémarrer la VM

Démarrer des machines virtuelles à l'aide de la console web et Arrêter et redémarrer des machines virtuelles à l'aide de la console web

Se connecter à une VM et interagir avec elle à l'aide de diverses consoles

Interagir avec les machines virtuelles en utilisant la console web

Visualiser diverses informations sur la VM

Visualisation des informations sur les machines virtuelles à l'aide de la console web

Ajuster la mémoire hôte allouée à une VM

Ajouter et supprimer la mémoire d'une machine virtuelle à l'aide de la console web

Gérer les connexions réseau pour la VM

Utilisation de la console web pour gérer les interfaces réseau des machines virtuelles

Gérer le stockage de la VM disponible sur l'hôte et attacher des disques virtuels à la VM

Gestion du stockage pour les machines virtuelles à l'aide de la console web

Configurer les paramètres de l'unité centrale virtuelle de la VM

Gestion des CPU virtuels à l'aide de la console web

Migration en direct d'une VM

Migration en direct d'une machine virtuelle à l'aide de la console web

Gérer les dispositifs hôtes

Gestion des périphériques hôtes à l'aide de la console web

Gérer les lecteurs optiques virtuels

Gestion des lecteurs optiques virtuels

Attacher un dispositif de surveillance

Attacher un dispositif de surveillance à une machine virtuelle en utilisant la console web

Lorsque vous devez ajuster ou dépanner un aspect de votre déploiement de virtualisation sur RHEL 9, la première étape à effectuer consiste généralement à afficher des informations sur l'état et la configuration actuels de vos machines virtuelles. Pour ce faire, vous pouvez utiliser l'interface de ligne de commande ou la console Web. Vous pouvez également consulter les informations dans la configuration XML de la machine virtuelle.

Pour récupérer des informations sur les machines virtuelles (VM) de votre hôte et leurs configurations, utilisez une ou plusieurs des commandes suivantes.

Procédure

  • Pour obtenir une liste des machines virtuelles sur votre hôte :

    # virsh list --all
    Id   Name              State
    ----------------------------------
    1    testguest1             running
    -    testguest2             shut off
    -    testguest3             shut off
    -    testguest4             shut off
    Copy to Clipboard Toggle word wrap
  • Pour obtenir des informations de base sur une VM spécifique :

    # virsh dominfo testguest1
    Id:             1
    Name:           testguest1
    UUID:           a973666f-2f6e-415a-8949-75a7a98569e1
    OS Type:        hvm
    State:          running
    CPU(s):         2
    CPU time:       188.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:c486,c538 (enforcing)
    Copy to Clipboard Toggle word wrap
  • Pour obtenir la configuration XML complète d'une VM spécifique :

    # virsh dumpxml testguest2
    
    <domain type='kvm' id='1'>
      <name>testguest2</name>
      <uuid>a973434f-2f6e-4ěša-8949-76a7a98569e1</uuid>
      <metadata>
    [...]
    Copy to Clipboard Toggle word wrap
  • Pour obtenir des informations sur les disques et autres périphériques de bloc d'une VM :

    # virsh domblklist testguest3
     Target   Source
    ---------------------------------------------------------------
     vda      /var/lib/libvirt/images/testguest3.qcow2
     sda      -
     sdb      /home/username/Downloads/virt-p2v-1.36.10-1.el7.iso
    Copy to Clipboard Toggle word wrap
  • Pour obtenir des informations sur les systèmes de fichiers d'une VM et leurs points de montage :

    # virsh domfsinfo testguest3
    Mountpoint   Name   Type   Target
    ------------------------------------
     /            dm-0   xfs
     /boot        vda1   xfs
    Copy to Clipboard Toggle word wrap
  • Pour obtenir plus de détails sur les vCPU d'une VM spécifique :

    # virsh vcpuinfo testguest4
    VCPU:           0
    CPU:            3
    State:          running
    CPU time:       103.1s
    CPU Affinity:   yyyy
    
    VCPU:           1
    CPU:            0
    State:          running
    CPU time:       88.6s
    CPU Affinity:   yyyy
    Copy to Clipboard Toggle word wrap

    Pour configurer et optimiser les vCPU de votre VM, voir Optimiser les performances du CPU de la machine virtuelle.

  • Pour dresser la liste de toutes les interfaces réseau virtuelles de votre hôte :

    # virsh net-list --all
     Name       State    Autostart   Persistent
    ---------------------------------------------
     default    active   yes         yes
     labnet     active   yes         yes
    Copy to Clipboard Toggle word wrap

    Pour obtenir des informations sur une interface spécifique :

    # virsh net-info default
    Name:           default
    UUID:           c699f9f6-9202-4ca8-91d0-6b8cb9024116
    Active:         yes
    Persistent:     yes
    Autostart:      yes
    Bridge:         virbr0
    Copy to Clipboard Toggle word wrap

    Pour plus d'informations sur les interfaces réseau, les réseaux de VM et les instructions pour les configurer, voir Configuration des connexions réseau des machines virtuelles.

En utilisant la console web RHEL 9, vous pouvez afficher des informations sur toutes les machines virtuelles et tous les pools de stockage auxquels la session de la console web peut accéder.

Vous pouvez afficher des informations sur une VM sélectionnée à laquelle la session de la console Web est connectée. Il s'agit notamment d'informations sur les disques, l'interface réseau virtuelle et l'utilisation des ressources.

En utilisant la console web, vous pouvez accéder à une vue d'ensemble de la virtualisation qui contient des informations résumées sur les machines virtuelles (VM), les pools de stockage et les réseaux disponibles.

Conditions préalables

Procédure

  • Cliquez sur Machines virtuelles dans le menu latéral de la console Web.

    Une boîte de dialogue s'affiche avec des informations sur les pools de stockage disponibles, les réseaux disponibles et les machines virtuelles auxquelles la console Web est connectée.

Les informations comprennent les éléments suivants :

  • Storage Pools - Le nombre de pools de stockage, actifs ou inactifs, accessibles par la console web et leur état.
  • Networks - Le nombre de réseaux, actifs ou inactifs, auxquels la console web peut accéder et leur état.
  • Name - Le nom de la VM.
  • Connection - Le type de connexion libvirt, système ou session.
  • State - L'état de la VM.

En utilisant la console web, vous pouvez afficher des informations détaillées sur les pools de stockage disponibles sur votre système. Les pools de stockage peuvent être utilisés pour créer des images de disque pour vos machines virtuelles.

Conditions préalables

Procédure

  1. Cliquez sur Pools de stockage en haut de l'interface Machines virtuelles.

    La fenêtre Storage pools s'affiche et présente une liste des pools de stockage configurés.

    Les informations comprennent les éléments suivants :

    • Name - Le nom du pool de stockage.
    • Size - L'allocation actuelle et la capacité totale du pool de stockage.
    • Connection - La connexion utilisée pour accéder au pool de stockage.
    • State - L'état du pool de stockage.
  2. Cliquez sur la flèche située à côté du pool de stockage dont vous souhaitez consulter les informations.

    La ligne se développe pour faire apparaître le volet Vue d'ensemble contenant des informations détaillées sur le pool de stockage sélectionné.

    Les informations comprennent

    • Target path - Emplacement du pool de stockage.
    • Persistent - Indique si le pool de stockage a une configuration persistante ou non.
    • Autostart - Indique si le pool de stockage démarre automatiquement au démarrage du système.
    • Type - Le type de pool de stockage.
  3. Pour afficher la liste des volumes de stockage associés au pool de stockage, cliquez sur Volumes de stockage.

    Le volet Volumes de stockage s'affiche et présente une liste des volumes de stockage configurés.

    Les informations comprennent

    • Name - Le nom du volume de stockage.
    • Used by - La VM qui utilise actuellement le volume de stockage.
    • Size - La taille du volume.

En utilisant la console web, vous pouvez afficher des informations de base, telles que les ressources affectées ou les détails de l'hyperviseur, à propos d'une machine virtuelle (VM) sélectionnée.

Conditions préalables

Procédure

  1. Cliquez sur Machines virtuelles dans le menu latéral de la console Web.
  2. Cliquez sur la VM dont vous souhaitez consulter les informations.

    Une nouvelle page s'ouvre avec une section Vue d'ensemble contenant des informations de base sur la VM sélectionnée et une section Console permettant d'accéder à l'interface graphique de la VM.

    La section Vue d'ensemble comprend les informations générales suivantes sur la VM :

    • State - L'état de la VM, en cours d'exécution ou à l'arrêt.
    • Memory - Quantité de mémoire attribuée à la VM.
    • CPU - Le nombre et le type de CPU virtuels configurés pour la VM.
    • Boot Order - L'ordre de démarrage configuré pour la VM.
    • Autostart - Activation ou non du démarrage automatique pour la VM.

    Les informations comprennent également les détails suivants sur l'hyperviseur :

    • Emulated Machine - Type de machine émulée par la VM.
    • Firmware - Le micrologiciel de la VM.

En utilisant la console web, vous pouvez visualiser la mémoire et l'utilisation du processeur virtuel d'une machine virtuelle (VM) sélectionnée.

Conditions préalables

Procédure

  1. Dans l'interface Machines virtuelles, cliquez sur la VM dont vous voulez voir les informations.

    Une nouvelle page s'ouvre avec une section Vue d'ensemble contenant des informations de base sur la VM sélectionnée et une section Console permettant d'accéder à l'interface graphique de la VM.

  2. Faites défiler jusqu'à Usage.

    La section Utilisation affiche des informations sur l'utilisation de la mémoire et du processeur virtuel de la VM.

En utilisant la console web, vous pouvez afficher des informations détaillées sur les disques affectés à une machine virtuelle (VM) sélectionnée.

Conditions préalables

Procédure

  1. Cliquez sur la VM dont vous souhaitez consulter les informations.

    Une nouvelle page s'ouvre avec une section Vue d'ensemble contenant des informations de base sur la VM sélectionnée et une section Console permettant d'accéder à l'interface graphique de la VM.

  2. Faites défiler jusqu'à Disques.

    La section Disques affiche des informations sur les disques affectés à la VM, ainsi que des options permettant d'accéder à Add ou Edit.

Les informations comprennent les éléments suivants :

  • Device - Le type de périphérique du disque.
  • Used - Quantité de disque actuellement allouée.
  • Capacity - Taille maximale du volume de stockage.
  • Bus - Le type de disque émulé.
  • Access - Si le disque est Writeable ou Read-only. Pour les disques raw, vous pouvez également définir l'accès à Writeable and shared.
  • Source - L'unité de disque ou le fichier.

En utilisant la console web RHEL 9, vous pouvez afficher et modifier les interfaces réseau virtuelles sur une machine virtuelle (VM) sélectionnée :

Conditions préalables

Procédure

  1. Dans l'interface Machines virtuelles, cliquez sur la VM dont vous voulez voir les informations.

    Une nouvelle page s'ouvre avec une section Vue d'ensemble contenant des informations de base sur la VM sélectionnée et une section Console permettant d'accéder à l'interface graphique de la VM.

  2. Faites défiler jusqu'à Interfaces réseau.

    La section Interfaces réseau affiche des informations sur l'interface réseau virtuelle configurée pour la VM ainsi que des options pour les interfaces réseau Add, Delete, Edit, ou Unplug.

    Les informations comprennent les éléments suivants :

    • Type - Type d'interface réseau pour la VM. Les types comprennent le réseau virtuel, le pont vers le réseau local et l'attachement direct.

      Note

      La connexion Ethernet générique n'est pas prise en charge dans RHEL 9 et les versions ultérieures.

    • Model type - Le modèle de l'interface réseau virtuelle.
    • MAC Address - L'adresse MAC de l'interface réseau virtuelle.
    • IP Address - L'adresse IP de l'interface réseau virtuelle.
    • Source - La source de l'interface réseau. Elle dépend du type de réseau.
    • State - État de l'interface réseau virtuelle.
  3. Pour modifier les paramètres de l'interface réseau virtuelle, cliquez sur Edit. La boîte de dialogue Virtual Network Interface Settings (Paramètres de l'interface réseau virtuelle) s'ouvre.

  4. Modifier le type d'interface, la source, le modèle ou l'adresse MAC.
  5. Cliquez sur Enregistrer. L'interface réseau est modifiée.

    Note

    Les modifications apportées aux paramètres de l'interface réseau virtuelle ne prennent effet qu'après le redémarrage de la VM.

    En outre, l'adresse MAC ne peut être modifiée que lorsque la machine virtuelle est éteinte.

9.3. Exemple de configuration XML d'une machine virtuelle

La configuration XML d'une VM, également appelée domain XML, détermine les paramètres et les composants de la VM. Le tableau suivant présente les sections d'un exemple de configuration XML d'une machine virtuelle (VM) et en explique le contenu.

Pour obtenir la configuration XML d'une VM, vous pouvez utiliser la commande virsh dumpxml suivie du nom de la VM.

# virsh dumpxml testguest1
Copy to Clipboard Toggle word wrap
Expand
Tableau 9.1. Exemple de configuration XML
Domaine Section XMLDescription
<domain type='kvm'>
 <name>Testguest1</name>
 <uuid>ec6fbaa1-3eb4-49da-bf61-bb02fbec4967</uuid>
 <memory unit='KiB'>1048576</memory>
 <currentMemory unit='KiB'>1048576</currentMemory>
Copy to Clipboard Toggle word wrap

Il s'agit d'une machine virtuelle KVM appelée Testguest1, avec 1024 MiB de RAM alloués.

 <vcpu placement='static'>1</vcpu>
Copy to Clipboard Toggle word wrap

La VM est dotée d'un seul processeur virtuel (vCPU).

Pour plus d'informations sur la configuration des vCPU, voir Optimisation des performances du processeur de la machine virtuelle.

 <os>
  <type arch='x86_64' machine='pc-q35-rhel9.0.0'>hvm</type>
  <boot dev='hd'/>
 </os>
Copy to Clipboard Toggle word wrap

L'architecture de la machine est réglée sur AMD64 et Intel 64, et utilise le type de machine Intel Q35 pour déterminer la compatibilité des fonctionnalités. Le système d'exploitation est configuré pour être démarré à partir du disque dur.

Pour plus d'informations sur la création d'une machine virtuelle avec un système d'exploitation installé, voir Création de machines virtuelles et installation de systèmes d'exploitation invités à l'aide de la console web.

 <features>
  <acpi/>
  <apic/>
 </features>
Copy to Clipboard Toggle word wrap

Les fonctionnalités des hyperviseurs acpi et apic sont désactivées.

 <cpu mode='host-model' check='partial'/>
Copy to Clipboard Toggle word wrap

Les définitions de l'unité centrale de l'hôte à partir de capabilities XML (obtenues avec virsh domcapabilities) sont automatiquement copiées dans la configuration XML de la VM. Par conséquent, lorsque la VM est démarrée, libvirt choisit un modèle d'unité centrale similaire à l'unité centrale de l'hôte, puis ajoute des fonctions supplémentaires pour se rapprocher le plus possible du modèle de l'hôte.

 <clock offset='utc'>
  <timer name='rtc' tickpolicy='catchup'/>
  <timer name='pit' tickpolicy='delay'/>
  <timer name='hpet' present='no'/>
 </clock>
Copy to Clipboard Toggle word wrap

L'horloge du matériel virtuel de la VM utilise le fuseau horaire UTC. En outre, trois horloges différentes sont configurées pour la synchronisation avec l'hyperviseur QEMU.

 <on_poweroff>destroy</on_poweroff>
 <on_reboot>restart</on_reboot>
 <on_crash>destroy</on_crash>
Copy to Clipboard Toggle word wrap

Lorsque la VM s'éteint ou que son système d'exploitation s'arrête de manière inattendue, libvirt met fin à la VM et libère toutes les ressources qui lui ont été allouées. Lorsque la VM est redémarrée, libvirt la redémarre avec la même configuration.

 <pm>
  <suspend-to-mem enabled='no'/>
  <suspend-to-disk enabled='no'/>
 </pm>
Copy to Clipboard Toggle word wrap

Les états de veille ACPI S3 et S4 sont désactivés pour cette VM.

<devices>
 <emulator>/usr/libexec/qemu-kvm</emulator>
 <disk type='file' device='disk'>
  <driver name='qemu' type='qcow2'/>
  <source file='/var/lib/libvirt/images/Testguest.qcow2'/>
  <target dev='vda' bus='virtio'/>
 </disk>
 <disk type='file' device='cdrom'>
  <driver name='qemu' type='raw'/>
  <target dev='sdb' bus='sata'/>
  <readonly/>
 </disk>
Copy to Clipboard Toggle word wrap

La VM utilise le fichier binaire /usr/libexec/qemu-kvm pour l'émulation et dispose de deux périphériques de disque.

Le premier disque est un disque dur virtualisé basé sur le disque /var/lib/libvirt/images/Testguest.qcow2 stocké sur l'hôte, et son nom de périphérique logique est défini sur vda. Dans les invités Windows, il est recommandé d'utiliser le bus sata au lieu de virtio.

Le deuxième disque est un CD-ROM virtualisé et son nom de périphérique logique est sdb.

  <controller type='usb' index='0' model='qemu-xhci' ports='15'/>
  <controller type='sata' index='0'/>
  <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='0x10'/>
  </controller>
  <controller type='pci' index='2' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='2' port='0x11'/>
  </controller>
  <controller type='pci' index='3' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='3' port='0x12'/>
  </controller>
  <controller type='pci' index='4' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='4' port='0x13'/>
  </controller>
  <controller type='pci' index='5' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='5' port='0x14'/>
  </controller>
  <controller type='pci' index='6' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='6' port='0x15'/>
  </controller>
  <controller type='pci' index='7' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='7' port='0x16'/>
  </controller>
  <controller type='virtio-serial' index='0'/>
Copy to Clipboard Toggle word wrap

La VM utilise un seul contrôleur pour attacher les périphériques USB et un contrôleur racine pour les périphériques PCI-Express (PCIe). En outre, un contrôleur virtio-serial est disponible, ce qui permet à la VM d'interagir avec l'hôte de diverses manières, comme la console série.

Pour plus d'informations sur les dispositifs virtuels, voir Types de dispositifs virtuels.

 <interface type='network'>
  <mac address='52:54:00:65:29:21'/>
  <source network='default'/>
  <model type='virtio'/>
 </interface>
Copy to Clipboard Toggle word wrap

Une interface réseau est configurée dans la VM qui utilise le réseau virtuel default et le modèle de périphérique réseau virtio. Pour les invités Windows, il est recommandé d'utiliser le modèle e1000e au lieu de virtio.

Pour plus d'informations sur la configuration de l'interface réseau, voir Optimisation des performances du réseau de la machine virtuelle.

  <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>
Copy to Clipboard Toggle word wrap

Une console série pty est installée sur la VM, ce qui permet une communication rudimentaire de la VM avec l'hôte. La console utilise le canal UNIX sur le port 1. Cette configuration est automatique et il n'est pas recommandé de la modifier.

Pour plus d'informations sur l'interaction avec les machines virtuelles, voir Interagir avec les machines virtuelles à l'aide de la console web.

  <input type='tablet' bus='usb'>
   <address type='usb' bus='0' port='1'/>
  </input>
  <input type='mouse' bus='ps2'/>
  <input type='keyboard' bus='ps2'/>
Copy to Clipboard Toggle word wrap

La VM utilise un port virtuel usb, qui est configuré pour recevoir l'entrée de la tablette, et un port virtuel ps2 configuré pour recevoir l'entrée de la souris et du clavier. Ces paramètres sont configurés automatiquement et il n'est pas recommandé de les modifier.

  <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'>
   <listen type='address' address='127.0.0.1'/>
  </graphics>
Copy to Clipboard Toggle word wrap

La VM utilise le protocole vnc pour le rendu de sa sortie graphique.

  <redirdev bus='usb' type='tcp'>
   <source mode='connect' host='localhost' service='4000'/>
   <protocol type='raw'/>
  </redirdev>
  <memballoon model='virtio'>
   <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
  </memballoon>
 </devices>
</domain>
Copy to Clipboard Toggle word wrap

La VM utilise tcp re-director pour attacher des périphériques USB à distance, et le memory ballooning est activé. Ces paramètres sont configurés automatiquement et il n'est pas recommandé de les modifier.

Pour libérer les ressources du système, vous pouvez arrêter une machine virtuelle (VM) fonctionnant sur ce système. Cependant, lorsque vous avez de nouveau besoin de la VM, vous devez démarrer le système d'exploitation invité et redémarrer les applications, ce qui peut prendre un temps considérable. Pour réduire ce temps d'arrêt et permettre à la charge de travail de la VM de commencer à fonctionner plus tôt, vous pouvez utiliser la fonction de sauvegarde et de restauration pour éviter complètement l'arrêt du système d'exploitation et la séquence de démarrage.

Cette section fournit des informations sur la sauvegarde des VM, ainsi que sur leur restauration dans le même état sans un démarrage complet de la VM.

La sauvegarde d'une machine virtuelle (VM) permet d'enregistrer sa mémoire et l'état des périphériques sur le disque de l'hôte et d'arrêter immédiatement le processus de la VM. Vous pouvez sauvegarder une VM qui est en cours d'exécution ou en pause, et lors de la restauration, la VM reviendra à cet état.

Ce processus libère des ressources de RAM et de CPU sur le système hôte en échange d'espace disque, ce qui peut améliorer les performances du système hôte. Lorsque la VM est restaurée, le système d'exploitation invité n'ayant pas besoin d'être démarré, la longue période de démarrage est également évitée.

Pour sauvegarder une machine virtuelle, vous pouvez utiliser l'interface de ligne de commande (CLI). Pour plus d'informations, voir Sauvegarder des machines virtuelles à l'aide de l'interface de ligne de commande.

Pour restaurer une VM, vous pouvez utiliser le CLI ou l'interface graphique de la console web.

Vous pouvez également sauvegarder et restaurer l'état d'une VM à l'aide d'instantanés. Pour plus d'informations, voir Sauvegarde et restauration de l'état d'une machine virtuelle à l'aide d'instantanés.

Vous pouvez enregistrer une machine virtuelle (VM) et son état actuel sur le disque de l'hôte. Cette fonction est utile, par exemple, lorsque vous devez utiliser les ressources de l'hôte à d'autres fins. La VM sauvegardée peut alors être rapidement restaurée à son état de fonctionnement antérieur.

Pour sauvegarder une VM à l'aide de la ligne de commande, suivez la procédure ci-dessous.

Conditions préalables

  • Assurez-vous que vous disposez d'un espace disque suffisant pour sauvegarder la VM et sa configuration. Notez que l'espace occupé par la VM dépend de la quantité de RAM allouée à cette VM.
  • S'assurer que la VM est persistante.
  • Optional: Sauvegarder les données importantes de la VM si nécessaire.

Procédure

  • Utilisez l'utilitaire virsh managedsave.

    Par exemple, la commande suivante arrête la VM demo-guest1 et enregistre sa configuration.

    # virsh managedsave demo-guest1
    Domain 'demo-guest1' saved by libvirt
    Copy to Clipboard Toggle word wrap

    Le fichier VM sauvegardé est situé par défaut dans le répertoire /var/lib/libvirt/qemu/save sous le nom de demo-guest1.save.

    La prochaine fois que la VM sera démarrée, elle restaurera automatiquement l'état sauvegardé dans le fichier ci-dessus.

Vérification

  • Répertoriez les machines virtuelles pour lesquelles la fonction de gestion des sauvegardes est activée. Dans l'exemple suivant, les VM répertoriées sous saved ont leur sauvegarde gérée activée.

    # virsh list --managed-save --all
    Id    Name                           State
    ----------------------------------------------------
    -     demo-guest1                    saved
    -     demo-guest2                    shut off
    Copy to Clipboard Toggle word wrap

    Pour dresser la liste des machines virtuelles dont l'image de sauvegarde est gérée :

    # virsh list --with-managed-save --all
    Id    Name                           State
    ----------------------------------------------------
    -     demo-guest1                    shut off
    Copy to Clipboard Toggle word wrap

    Notez que pour lister les machines virtuelles sauvegardées qui sont dans un état d'arrêt, vous devez utiliser les options --all ou --inactive avec la commande.

Résolution de problèmes

  • Si le fichier VM sauvegardé est corrompu ou illisible, la restauration de la VM lancera un démarrage VM standard à la place.

Vous pouvez utiliser l'interface de ligne de commande (CLI) pour démarrer une machine virtuelle (VM) arrêtée ou restaurer une VM sauvegardée. En utilisant l'interface de ligne de commande, vous pouvez démarrer des machines virtuelles locales et distantes.

Conditions préalables

  • Une VM inactive qui est déjà définie.
  • Le nom de la VM.
  • Pour les machines virtuelles distantes :

    • L'adresse IP de l'hôte où se trouve la VM.
    • Privilèges d'accès à la racine de l'hôte.

Procédure

  • Pour une VM locale, utilisez l'utilitaire virsh start.

    Par exemple, la commande suivante démarre la VM demo-guest1.

    # virsh start demo-guest1
    Domain 'demo-guest1' started
    Copy to Clipboard Toggle word wrap
  • Pour une VM située sur un hôte distant, utilisez l'utilitaire virsh start ainsi que la connexion SSH QEMU à l'hôte.

    Par exemple, la commande suivante démarre la VM demo-guest1 sur l'hôte 192.0.2.1.

    # virsh -c qemu+ssh://root@192.0.2.1/system start demo-guest1
    
    root@192.0.2.1's password:
    
    Domain 'demo-guest1' started
    Copy to Clipboard Toggle word wrap

Si une machine virtuelle (VM) est dans l'état shut off, vous pouvez la démarrer à l'aide de la console web RHEL 9. Vous pouvez également configurer la VM pour qu'elle soit démarrée automatiquement au démarrage de l'hôte.

Conditions préalables

Procédure

  1. Dans l'interface Machines virtuelles, cliquez sur la VM que vous souhaitez démarrer.

    Une nouvelle page s'ouvre avec des informations détaillées sur la VM sélectionnée et des commandes pour arrêter et supprimer la VM.

  2. Cliquez sur Exécuter.

    La VM démarre et vous pouvez vous connecter à sa console ou à sa sortie graphique.

  3. Optional: Pour configurer la VM afin qu'elle démarre automatiquement au démarrage de l'hôte, cochez la case Autostart dans la section Overview.

    Si vous utilisez des interfaces réseau qui ne sont pas gérées par libvirt, vous devez également apporter des modifications supplémentaires à la configuration de systemd. Sinon, les machines virtuelles concernées risquent de ne pas démarrer, voir Démarrage automatique des machines virtuelles au démarrage de l'hôte.

Chapitre 11. Clonage de machines virtuelles

Pour créer rapidement une nouvelle machine virtuelle (VM) avec un ensemble spécifique de propriétés, vous pouvez clone une VM existante.

Le clonage crée une nouvelle VM qui utilise sa propre image disque pour le stockage, mais la plupart de la configuration et des données stockées du clone sont identiques à celles de la VM source. Cela permet de préparer plusieurs VM optimisées pour une certaine tâche sans avoir à optimiser chaque VM individuellement.

11.1. Comment fonctionne le clonage de machines virtuelles ?

Le clonage d'une machine virtuelle (VM) copie la configuration XML de la VM source et de ses images de disque, et apporte des ajustements aux configurations pour garantir l'unicité de la nouvelle VM. Il s'agit notamment de changer le nom de la VM et de s'assurer qu'elle utilise les clones d'images de disque. Néanmoins, les données stockées sur les disques virtuels du clone sont identiques à celles de la VM source.

Ce processus est plus rapide que la création d'une nouvelle VM et son installation avec un système d'exploitation invité, et peut être utilisé pour générer rapidement des VM avec une configuration et un contenu spécifiques.

Si vous envisagez de créer plusieurs clones d'une VM, créez d'abord une VM template qui ne contient pas de clone :

  • Paramètres uniques, tels que la configuration MAC persistante du réseau, qui peuvent empêcher les clones de fonctionner correctement.
  • Les données sensibles, telles que les clés SSH et les fichiers de mots de passe.

Pour plus d'informations, voir Création de modèles de machines virtuelles.

11.2. Création de modèles de machines virtuelles

Pour créer plusieurs clones de machines virtuelles (VM) qui fonctionnent correctement, vous pouvez supprimer les informations et les configurations qui sont propres à une VM source, telles que les clés SSH ou la configuration MAC du réseau persistant. Vous créez ainsi une VM template, que vous pouvez utiliser pour créer facilement et en toute sécurité des clones de VM.

Vous pouvez créer des modèles de VM à l'aide de l'utilitaire virt-sysprep ou les créer manuellement en fonction de vos besoins.

Pour créer un modèle de clonage à partir d'une machine virtuelle (VM) existante, vous pouvez utiliser l'utilitaire virt-sysprep. Cet utilitaire supprime certaines configurations susceptibles d'entraîner un fonctionnement incorrect du clone, telles que des paramètres réseau spécifiques ou des métadonnées d'enregistrement du système. Par conséquent, virt-sysprep rend la création de clones de la VM plus efficace et garantit un fonctionnement plus fiable des clones.

Conditions préalables

  • Le paquet guestfs-tools, qui contient l'utilitaire virt-sysprep, est installé sur votre hôte :

    # dnf install guestfs-tools
    Copy to Clipboard Toggle word wrap
  • La VM source destinée à servir de modèle est arrêtée.
  • Vous savez où se trouve l'image disque de la VM source et vous êtes le propriétaire du fichier image disque de la VM.

    Notez que les images de disque pour les machines virtuelles créées dans la connexion système de libvirt sont situées dans le répertoire /var/lib/libvirt/images et appartiennent par défaut à l'utilisateur root :

    # ls -la /var/lib/libvirt/images
    -rw-------.  1 root root  9665380352 Jul 23 14:50 a-really-important-vm.qcow2
    -rw-------.  1 root root  8591507456 Jul 26  2017 an-actual-vm-that-i-use.qcow2
    -rw-------.  1 root root  8591507456 Jul 26  2017 totally-not-a-fake-vm.qcow2
    -rw-------.  1 root root 10739318784 Sep 20 17:57 another-vm-example.qcow2
    Copy to Clipboard Toggle word wrap
  • Optional: Toutes les données importantes se trouvant sur le disque de la VM source ont été sauvegardées. Si vous souhaitez conserver la VM source intacte, clonez-la d'abord et transformez le clone en modèle.

Procédure

  1. Assurez-vous d'être connecté en tant que propriétaire de l'image disque de la VM :

    # whoami
    root
    Copy to Clipboard Toggle word wrap
  2. Optional: Copier l'image disque de la VM.

    # cp /var/lib/libvirt/images/a-really-important-vm.qcow2 /var/lib/libvirt/images/a-really-important-vm-original.qcow2
    Copy to Clipboard Toggle word wrap

    Il est utilisé ultérieurement pour vérifier que la VM a bien été transformée en modèle.

  3. Utilisez la commande suivante et remplacez /var/lib/libvirt/images/a-really-important-vm.qcow2 par le chemin d'accès à l'image disque de la VM source.

    # virt-sysprep -a /var/lib/libvirt/images/a-really-important-vm.qcow2
    [   0.0] Examining the guest ...
    [   7.3] Performing "abrt-data" ...
    [   7.3] Performing "backup-files" ...
    [   9.6] Performing "bash-history" ...
    [   9.6] Performing "blkid-tab" ...
    [...]
    Copy to Clipboard Toggle word wrap

Vérification

  • Pour confirmer que le processus a réussi, comparez l'image disque modifiée à l'image originale. L'exemple suivant montre la création réussie d'un modèle :

    # virt-diff -a /var/lib/libvirt/images/a-really-important-vm-orig.qcow2 -A /var/lib/libvirt/images/a-really-important-vm.qcow2
    - - 0644       1001 /etc/group-
    - - 0000        797 /etc/gshadow-
    = - 0444         33 /etc/machine-id
    [...]
    - - 0600        409 /home/username/.bash_history
    - d 0700          6 /home/username/.ssh
    - - 0600        868 /root/.bash_history
    [...]
    Copy to Clipboard Toggle word wrap

11.2.2. Créer manuellement un modèle de machine virtuelle

Pour créer un modèle à partir d'une machine virtuelle (VM) existante, vous pouvez réinitialiser ou déconfigurer manuellement une VM invitée afin de la préparer au clonage.

Conditions préalables

  • Assurez-vous de connaître l'emplacement de l'image disque de la VM source et d'être le propriétaire du fichier d'image disque de la VM.

    Notez que les images de disque pour les machines virtuelles créées dans la connexion système de libvirt sont par défaut situées dans le répertoire /var/lib/libvirt/images et appartiennent à l'utilisateur root :

    # ls -la /var/lib/libvirt/images
    -rw-------.  1 root root  9665380352 Jul 23 14:50 a-really-important-vm.qcow2
    -rw-------.  1 root root  8591507456 Jul 26  2017 an-actual-vm-that-i-use.qcow2
    -rw-------.  1 root root  8591507456 Jul 26  2017 totally-not-a-fake-vm.qcow2
    -rw-------.  1 root root 10739318784 Sep 20 17:57 another-vm-example.qcow2
    Copy to Clipboard Toggle word wrap
  • Assurez-vous que la machine virtuelle est arrêtée.
  • Optional: Toutes les données importantes présentes sur le disque de la VM ont été sauvegardées. Si vous souhaitez conserver la VM source intacte, clonez-la d'abord et modifiez le clone pour créer un modèle.

Procédure

  1. Configurer la VM pour le clonage :

    1. Installer les logiciels nécessaires sur le clone.
    2. Configurez tous les paramètres non uniques pour le système d'exploitation.
    3. Configurer les paramètres de l'application qui ne sont pas uniques.
  2. Supprimer la configuration du réseau :

    1. Supprimez toutes les règles udev persistantes à l'aide de la commande suivante :

      # rm -f /etc/udev/rules.d/70-persistent-net.rules
      Copy to Clipboard Toggle word wrap
      Note

      Si les règles udev ne sont pas supprimées, le nom du premier NIC peut être eth1 au lieu de eth0.

    2. Supprimer les informations uniques des fichiers NMConnection dans le répertoire /etc/NetworkManager/system-connections/.

      1. Supprimez l'adresse MAC, l'adresse IP, le DNS, la passerelle et toute autre information unique ou les paramètres non souhaités.

        *ID=ExampleNetwork
        BOOTPROTO="dhcp"
        HWADDR="AA:BB:CC:DD:EE:FF"                  <- REMOVE
        NM_CONTROLLED="yes"
        ONBOOT="yes"
        TYPE="Ethernet"
        UUID="954bd22c-f96c-4b59-9445-b39dd86ac8ab" <- REMOVE
        Copy to Clipboard Toggle word wrap
      2. Supprimer les informations similaires de unique et les paramètres non souhaités des fichiers /etc/hosts et /etc/resolv.conf.
  3. Supprimer les détails de l'enregistrement :

    • Pour les machines virtuelles enregistrées sur le Red Hat Network (RHN) :

      # rm /etc/sysconfig/rhn/systemid
      Copy to Clipboard Toggle word wrap
    • Pour les machines virtuelles enregistrées auprès du gestionnaire d'abonnement Red Hat (RHSM) :

      • Si vous n'avez pas l'intention d'utiliser la VM d'origine :

        # subscription-manager unsubscribe --all # subscription-manager unregister # subscription-manager clean
        Copy to Clipboard Toggle word wrap
      • Si vous prévoyez d'utiliser la VM d'origine :

        # subscription-manager clean
        Copy to Clipboard Toggle word wrap
        Note

        Le profil RHSM original reste dans le portail avec votre code d'identification. Utilisez la commande suivante pour réactiver votre enregistrement RHSM sur la VM après son clonage :

        # subscription-manager register --consumerid=71rd64fx-6216-4409-bf3a-e4b7c7bd8ac9
        Copy to Clipboard Toggle word wrap
  4. Supprimer les autres détails uniques :

    1. Supprimer les paires de clés publiques et privées SSH :

      # rm -rf /etc/ssh/ssh_host_example
      Copy to Clipboard Toggle word wrap
    2. Supprimer la configuration des périphériques LVM :

      # rm /etc/lvm/devices/system.devices
      Copy to Clipboard Toggle word wrap
    3. Supprimer tout autre identifiant ou configuration spécifique à l'application qui pourrait entraîner des conflits en cas d'exécution sur plusieurs machines.
  5. Supprimez le fichier gnome-initial-setup-done pour configurer la VM afin qu'elle exécute l'assistant de configuration au prochain démarrage :

    # rm ~/.config/gnome-initial-setup-done
    Copy to Clipboard Toggle word wrap
    Note

    L'assistant qui s'exécute au démarrage suivant dépend des configurations qui ont été supprimées de la VM. En outre, lors du premier démarrage du clone, il est recommandé de modifier le nom d'hôte.

Pour les tests, afin de créer une nouvelle machine virtuelle (VM) avec un ensemble spécifique de propriétés, vous pouvez cloner une VM existante à l'aide de l'interface CLI.

Conditions préalables

  • La VM source est arrêtée.
  • Assurez-vous qu'il y a suffisamment d'espace disque pour stocker les images de disque clonées.
  • Optional: Lorsque vous créez plusieurs clones de VM, supprimez les données et les paramètres uniques de la VM source afin de garantir le bon fonctionnement des VM clonées. Pour plus d'informations, voir Création de modèles de machines virtuelles.

Procédure

  • Utilisez l'utilitaire virt-clone avec les options appropriées à votre environnement et à votre cas d'utilisation.

    Sample use cases

    • La commande suivante clone une VM locale nommée example-VM-1 et crée la VM example-VM-1-clone. Elle crée et alloue également l'image disque example-VM-1-clone.qcow2 au même endroit que l'image disque de la VM d'origine et avec les mêmes données :

      # virt-clone --original example-VM-1 --auto-clone
      Allocating 'example-VM-1-clone.qcow2'                            | 50.0 GB  00:05:37
      
      Clone 'example-VM-1-clone' created successfully.
      Copy to Clipboard Toggle word wrap
    • La commande suivante clone une VM nommée example-VM-2, et crée une VM locale nommée example-VM-3, qui n'utilise que deux des multiples disques de example-VM-2:

      # virt-clone --original example-VM-2 --name example-VM-3 --file /var/lib/libvirt/images/disk-1-example-VM-2.qcow2 --file /var/lib/libvirt/images/disk-2-example-VM-2.qcow2
      Allocating 'disk-1-example-VM-2-clone.qcow2'                                      | 78.0 GB  00:05:37
      Allocating 'disk-2-example-VM-2-clone.qcow2'                                      | 80.0 GB  00:05:37
      
      Clone 'example-VM-3' created successfully.
      Copy to Clipboard Toggle word wrap
    • Pour cloner votre VM sur un autre hôte, migrez la VM sans la redéfinir sur l'hôte local. Par exemple, les commandes suivantes clonent la VM example-VM-3 précédemment créée sur le système distant 192.0.2.1, y compris ses disques locaux. Notez que vous devez disposer des privilèges root pour exécuter ces commandes sur 192.0.2.1:

      # virsh migrate --offline --persistent example-VM-3 qemu+ssh://root@192.0.2.1/system
      root@192.0.2.1's password:
      
      # scp /var/lib/libvirt/images/<disk-1-example-VM-2-clone>.qcow2 root@192.0.2.1/<user@remote_host.com>://var/lib/libvirt/images/
      
      # scp /var/lib/libvirt/images/<disk-2-example-VM-2-clone>.qcow2 root@192.0.2.1/<user@remote_host.com>://var/lib/libvirt/images/
      Copy to Clipboard Toggle word wrap

Vérification

  1. Pour vérifier que la VM a été clonée avec succès et qu'elle fonctionne correctement :

    1. Confirmez que le clone a été ajouté à la liste des VM sur votre hôte :

      # virsh list --all
      Id   Name                  State
      ---------------------------------------
      -    example-VM-1          shut off
      -    example-VM-1-clone    shut off
      Copy to Clipboard Toggle word wrap
    2. Démarrez le clone et observez s'il démarre :

      # virsh start example-VM-1-clone
      Domain 'example-VM-1-clone' started
      Copy to Clipboard Toggle word wrap

Pour créer de nouvelles machines virtuelles (VM) avec un ensemble spécifique de propriétés, vous pouvez cloner une VM que vous avez précédemment configurée à l'aide de la console web.

Note

Le clonage d'une VM entraîne également le clonage des disques associés à cette VM.

Conditions préalables

Procédure

  1. Dans l'interface Machines virtuelles de la console web, cliquez sur le bouton Menu de la VM que vous souhaitez cloner.

    Un menu déroulant apparaît avec des commandes pour diverses opérations VM.

  2. Cliquez sur Cloner.

    La boîte de dialogue Créer un clone de VM s'affiche.

  3. Optional: Saisissez un nouveau nom pour le clone de VM.
  4. Cliquez sur Cloner.

    Une nouvelle VM est créée sur la base de la VM source.

Vérification

  • Confirmez que la VM clonée apparaît dans la liste des VM disponibles sur votre hôte.

Chapitre 12. Migration des machines virtuelles

Si l'hôte actuel d'une machine virtuelle (VM) ne convient plus ou ne peut plus être utilisé, ou si vous souhaitez redistribuer la charge de travail d'hébergement, vous pouvez migrer la VM vers un autre hôte KVM.

12.1. Comment fonctionne la migration des machines virtuelles

La partie essentielle de la migration d'une machine virtuelle (VM) consiste à copier la configuration XML d'une VM vers une machine hôte différente. Si la VM migrée n'est pas arrêtée, la migration transfère également l'état de la mémoire de la VM et de tous les périphériques virtualisés vers une machine hôte de destination. Pour que la VM reste fonctionnelle sur l'hôte de destination, les images de disque de la VM doivent rester disponibles.

Par défaut, la VM migrée est transitoire sur l'hôte de destination et reste définie sur l'hôte source.

Vous pouvez migrer une VM en cours d'exécution en utilisant les migrations live ou non-live. Pour migrer une VM éteinte, vous devez utiliser une migration offline. Pour plus de détails, voir le tableau suivant.

Expand
Tableau 12.1. Types de migration de VM
Type de migrationDescriptionCas d'utilisationStorage requirements

Live migration

La VM continue de fonctionner sur la machine hôte source pendant que KVM transfère les pages mémoire de la VM vers la machine hôte de destination. Lorsque la migration est presque terminée, KVM suspend brièvement la VM et la reprend sur l'hôte de destination.

Utile pour les machines virtuelles qui nécessitent une disponibilité constante. Cependant, les machines virtuelles qui modifient les pages de mémoire plus rapidement que KVM ne peut les transférer, telles que les machines virtuelles soumises à une forte charge d'E/S, ne peuvent pas être migrées en direct, et non-live migration doit être utilisé à la place.

Les images de disque de la VM doivent être situées sur un réseau partagé, accessible à la fois à l'hôte source et à l'hôte de destination.

Non-live migration

Suspend la VM, copie sa configuration et sa mémoire sur l'hôte de destination et reprend la VM.

Elle entraîne une indisponibilité de la VM, mais elle est généralement plus fiable que la migration en direct. Recommandé pour les machines virtuelles soumises à une forte charge de mémoire.

Les images de disque de la VM doivent être situées sur un réseau partagé, accessible à la fois à l'hôte source et à l'hôte de destination.

Offline migration

Déplace la configuration de la VM vers l'hôte de destination

Recommandé pour les machines virtuelles arrêtées et dans les cas où l'arrêt de la machine virtuelle ne perturbe pas la charge de travail.

Les images de disque de la VM ne doivent pas nécessairement être disponibles sur un réseau partagé et peuvent être copiées ou déplacées manuellement vers l'hôte de destination.

Vous pouvez également combiner live migration et non-live migration. Cette méthode est recommandée, par exemple, lors de la migration en direct d'une VM qui utilise un très grand nombre de vCPU ou une grande quantité de mémoire, ce qui empêche la migration de s'achever. Dans un tel scénario, vous pouvez suspendre la VM source. Cela permet d'éviter la génération de pages de mémoire sales supplémentaires et d'augmenter considérablement les chances de réussite de la migration. En fonction de la charge de travail de l'invité et du nombre de pages statiques pendant la migration, une telle migration hybrid peut entraîner un temps d'arrêt nettement inférieur à celui d'une migration non live.

12.2. Avantages de la migration des machines virtuelles

La migration des machines virtuelles (VM) peut être utile pour :

Équilibrage de la charge
Les machines virtuelles peuvent être déplacées vers des machines hôtes moins utilisées si leur hôte est surchargé ou si un autre hôte est sous-utilisé.
Indépendance du matériel
Lorsque vous avez besoin de mettre à niveau, d'ajouter ou de supprimer des périphériques matériels sur la machine hôte, vous pouvez déplacer en toute sécurité les machines virtuelles vers d'autres hôtes. Cela signifie que les VM ne subissent pas de temps d'arrêt pour les améliorations matérielles.
Économie d'énergie
Les machines virtuelles peuvent être redistribuées à d'autres hôtes, et les systèmes hôtes non chargés peuvent ainsi être mis hors tension pour économiser de l'énergie et réduire les coûts pendant les périodes de faible utilisation.
Migration géographique
Les machines virtuelles peuvent être déplacées vers un autre emplacement physique pour réduire la latence ou pour d'autres raisons.

12.3. Limites de la migration des machines virtuelles

Avant de migrer des machines virtuelles (VM) dans RHEL 9, assurez-vous de connaître les limites de la migration.

  • La migration des machines virtuelles depuis ou vers une connexion de session de libvirt n'est pas fiable et n'est donc pas recommandée.
  • Les machines virtuelles qui utilisent certaines fonctions et configurations ne fonctionneront pas correctement si elles sont migrées, ou la migration échouera. Il s'agit notamment des fonctions suivantes

    • Passage d'appareil
    • Affectation des dispositifs SR-IOV
    • Dispositifs médiatisés, tels que les vGPU
  • Une migration entre des hôtes qui utilisent l'épinglage NUMA (Non-Uniform Memory Access) ne fonctionne que si les hôtes ont une topologie similaire. Cependant, les performances des charges de travail en cours d'exécution peuvent être affectées par la migration.
  • Les CPU émulés, tant sur la VM source que sur la VM de destination, doivent être identiques, sinon la migration risque d'échouer. Toute différence entre les VM dans les domaines suivants liés au processeur peut entraîner des problèmes de migration :

    • Modèle de CPU

    • Paramètres du micrologiciel
    • Version du microcode
    • Version du BIOS
    • Paramètres du BIOS
    • Version de QEMU
    • Version du noyau
  • La migration en direct d'une VM qui utilise plus de 1 To de mémoire peut, dans certains cas, ne pas être fiable. Pour savoir comment éviter ou résoudre ce problème, voir La migration en direct d'une VM prend beaucoup de temps sans se terminer.

Pour que les machines virtuelles (VM) migrées fonctionnent correctement sur l'hôte de destination, les CPU des hôtes source et de destination doivent être compatibles. Pour vous en assurer, calculez une base commune de CPU avant de commencer la migration.

Note

Les instructions de cette section s'appuient sur un exemple de scénario de migration avec les processeurs hôtes suivants :

  • Hôte source : Intel Core i7-8650U
  • Hôtes de destination : Intel Xeon CPU E5-2620 v2

Conditions préalables

  • La virtualisation est installée et activée sur votre système.
  • Vous disposez d'un accès administrateur à l'hôte source et à l'hôte de destination pour la migration.

Procédure

  1. Sur l'hôte source, obtenez les caractéristiques de son processeur et collez-les dans un nouveau fichier XML, tel que domCaps-CPUs.xml.

    # virsh domcapabilities | xmllint --xpath "//cpu/mode[@name='host-model']" - > domCaps-CPUs.xml
    Copy to Clipboard Toggle word wrap
  2. Dans le fichier XML, remplacez les balises <mode> </mode> par <cpu> </cpu>.
  3. Optional: Vérifiez que le contenu du fichier domCaps-CPUs.xml ressemble à ce qui suit :

    # cat domCaps-CPUs.xml
    
        <cpu>
              <model fallback="forbid">Skylake-Client-IBRS</model>
              <vendor>Intel</vendor>
              <feature policy="require" name="ss"/>
              <feature policy="require" name="vmx"/>
              <feature policy="require" name="pdcm"/>
              <feature policy="require" name="hypervisor"/>
              <feature policy="require" name="tsc_adjust"/>
              <feature policy="require" name="clflushopt"/>
              <feature policy="require" name="umip"/>
              <feature policy="require" name="md-clear"/>
              <feature policy="require" name="stibp"/>
              <feature policy="require" name="arch-capabilities"/>
              <feature policy="require" name="ssbd"/>
              <feature policy="require" name="xsaves"/>
              <feature policy="require" name="pdpe1gb"/>
              <feature policy="require" name="invtsc"/>
              <feature policy="require" name="ibpb"/>
              <feature policy="require" name="ibrs"/>
              <feature policy="require" name="amd-stibp"/>
              <feature policy="require" name="amd-ssbd"/>
              <feature policy="require" name="rsba"/>
              <feature policy="require" name="skip-l1dfl-vmentry"/>
              <feature policy="require" name="pschange-mc-no"/>
              <feature policy="disable" name="hle"/>
              <feature policy="disable" name="rtm"/>
        </cpu>
    Copy to Clipboard Toggle word wrap
  4. Sur l'hôte de destination, utilisez la commande suivante pour obtenir les caractéristiques de son processeur :

    # virsh domcapabilities | xmllint --xpath "//cpu/mode[@name='host-model']" -
    
        <mode name="host-model" supported="yes">
                <model fallback="forbid">IvyBridge-IBRS</model>
                <vendor>Intel</vendor>
                <feature policy="require" name="ss"/>
                <feature policy="require" name="vmx"/>
                <feature policy="require" name="pdcm"/>
                <feature policy="require" name="pcid"/>
                <feature policy="require" name="hypervisor"/>
                <feature policy="require" name="arat"/>
                <feature policy="require" name="tsc_adjust"/>
                <feature policy="require" name="umip"/>
                <feature policy="require" name="md-clear"/>
                <feature policy="require" name="stibp"/>
                <feature policy="require" name="arch-capabilities"/>
                <feature policy="require" name="ssbd"/>
                <feature policy="require" name="xsaveopt"/>
                <feature policy="require" name="pdpe1gb"/>
                <feature policy="require" name="invtsc"/>
                <feature policy="require" name="ibpb"/>
                <feature policy="require" name="amd-ssbd"/>
                <feature policy="require" name="skip-l1dfl-vmentry"/>
                <feature policy="require" name="pschange-mc-no"/>
        </mode>
    Copy to Clipboard Toggle word wrap
  5. Ajoutez les caractéristiques de l'unité centrale obtenues de l'hôte de destination au fichier domCaps-CPUs.xml de l'hôte source. Remplacez à nouveau les balises <mode> </mode> par <cpu> </cpu> et enregistrez le fichier.
  6. Optional: Vérifiez que le fichier XML contient à présent les caractéristiques de l'unité centrale des deux hôtes.

    # cat domCaps-CPUs.xml
    
        <cpu>
              <model fallback="forbid">Skylake-Client-IBRS</model>
              <vendor>Intel</vendor>
              <feature policy="require" name="ss"/>
              <feature policy="require" name="vmx"/>
              <feature policy="require" name="pdcm"/>
              <feature policy="require" name="hypervisor"/>
              <feature policy="require" name="tsc_adjust"/>
              <feature policy="require" name="clflushopt"/>
              <feature policy="require" name="umip"/>
              <feature policy="require" name="md-clear"/>
              <feature policy="require" name="stibp"/>
              <feature policy="require" name="arch-capabilities"/>
              <feature policy="require" name="ssbd"/>
              <feature policy="require" name="xsaves"/>
              <feature policy="require" name="pdpe1gb"/>
              <feature policy="require" name="invtsc"/>
              <feature policy="require" name="ibpb"/>
              <feature policy="require" name="ibrs"/>
              <feature policy="require" name="amd-stibp"/>
              <feature policy="require" name="amd-ssbd"/>
              <feature policy="require" name="rsba"/>
              <feature policy="require" name="skip-l1dfl-vmentry"/>
              <feature policy="require" name="pschange-mc-no"/>
              <feature policy="disable" name="hle"/>
              <feature policy="disable" name="rtm"/>
        </cpu>
        <cpu>
              <model fallback="forbid">IvyBridge-IBRS</model>
              <vendor>Intel</vendor>
              <feature policy="require" name="ss"/>
              <feature policy="require" name="vmx"/>
              <feature policy="require" name="pdcm"/>
              <feature policy="require" name="pcid"/>
              <feature policy="require" name="hypervisor"/>
              <feature policy="require" name="arat"/>
              <feature policy="require" name="tsc_adjust"/>
              <feature policy="require" name="umip"/>
              <feature policy="require" name="md-clear"/>
              <feature policy="require" name="stibp"/>
              <feature policy="require" name="arch-capabilities"/>
              <feature policy="require" name="ssbd"/>
              <feature policy="require" name="xsaveopt"/>
              <feature policy="require" name="pdpe1gb"/>
              <feature policy="require" name="invtsc"/>
              <feature policy="require" name="ibpb"/>
              <feature policy="require" name="amd-ssbd"/>
              <feature policy="require" name="skip-l1dfl-vmentry"/>
              <feature policy="require" name="pschange-mc-no"/>
        </cpu>
    Copy to Clipboard Toggle word wrap
  7. Utilisez le fichier XML pour calculer la ligne de base de la fonctionnalité CPU pour la VM que vous avez l'intention de migrer.

    # virsh hypervisor-cpu-baseline domCaps-CPUs.xml
    
        <cpu mode='custom' match='exact'>
          <model fallback='forbid'>IvyBridge-IBRS</model>
          <vendor>Intel</vendor>
          <feature policy='require' name='ss'/>
          <feature policy='require' name='vmx'/>
          <feature policy='require' name='pdcm'/>
          <feature policy='require' name='pcid'/>
          <feature policy='require' name='hypervisor'/>
          <feature policy='require' name='arat'/>
          <feature policy='require' name='tsc_adjust'/>
          <feature policy='require' name='umip'/>
          <feature policy='require' name='md-clear'/>
          <feature policy='require' name='stibp'/>
          <feature policy='require' name='arch-capabilities'/>
          <feature policy='require' name='ssbd'/>
          <feature policy='require' name='xsaveopt'/>
          <feature policy='require' name='pdpe1gb'/>
          <feature policy='require' name='invtsc'/>
          <feature policy='require' name='ibpb'/>
          <feature policy='require' name='amd-ssbd'/>
          <feature policy='require' name='skip-l1dfl-vmentry'/>
          <feature policy='require' name='pschange-mc-no'/>
        </cpu>
    Copy to Clipboard Toggle word wrap
  8. Ouvrez la configuration XML de la VM que vous souhaitez migrer et remplacez le contenu de la section <cpu> par les paramètres obtenus à l'étape précédente.

    # virsh edit VM-name
    Copy to Clipboard Toggle word wrap
  9. Si la VM est en cours d'exécution, redémarrez-la.

    # virsh reboot VM-name
    Copy to Clipboard Toggle word wrap

Pour effectuer une migration en direct d'une machine virtuelle (VM) entre des hôtes KVM pris en charge, un stockage VM partagé est nécessaire. La procédure suivante fournit des instructions pour partager une image de VM stockée localement avec l'hôte source et l'hôte de destination à l'aide du protocole NFS.

Conditions préalables

  • La machine virtuelle destinée à la migration est arrêtée.
  • Optional: Un système hôte est disponible pour héberger le stockage qui n'est pas l'hôte source ou l'hôte de destination, mais l'hôte source et l'hôte de destination peuvent tous deux l'atteindre via le réseau. Il s'agit de la solution optimale pour le stockage partagé et elle est recommandée par Red Hat.
  • Assurez-vous que le verrouillage des fichiers NFS n'est pas utilisé car il n'est pas pris en charge par KVM.
  • NFS est installé et activé sur les hôtes source et destination. Voir
  • Déploiement d'un serveur NFS.

Procédure

  1. Connectez-vous à l'hôte qui fournira le stockage partagé. Dans cet exemple, il s'agit de l'hôte example-shared-storage:

    # ssh root@example-shared-storage
    root@example-shared-storage's password:
    Last login: Mon Sep 24 12:05:36 2019
    root~#
    Copy to Clipboard Toggle word wrap
  2. Créez un répertoire sur l'hôte source qui contiendra l'image disque et sera partagé avec les hôtes de migration :

    # mkdir /var/lib/libvirt/shared-images
    Copy to Clipboard Toggle word wrap
  3. Copiez l'image disque de la VM depuis l'hôte source vers le répertoire nouvellement créé. L'exemple suivant copie l'image disque example-disk-1 de la VM dans le répertoire /var/lib/libvirt/shared-images/ de l'hôte example-shared-storage:

    # scp /var/lib/libvirt/images/example-disk-1.qcow2 root@example-shared-storage:/var/lib/libvirt/shared-images/example-disk-1.qcow2
    Copy to Clipboard Toggle word wrap
  4. Sur l'hôte que vous voulez utiliser pour partager le stockage, ajoutez le répertoire de partage au fichier /etc/exports. L'exemple suivant partage le répertoire /var/lib/libvirt/shared-images avec les hôtes example-source-machine et example-destination-machine:

    # /var/lib/libvirt/shared-images example-source-machine(rw,no_root_squash) example-destination-machine(rw,no\_root_squash)
    Copy to Clipboard Toggle word wrap
  5. Sur l'hôte source et l'hôte de destination, montez le répertoire partagé dans le répertoire /var/lib/libvirt/images:

    # mount example-shared-storage:/var/lib/libvirt/shared-images /var/lib/libvirt/images
    Copy to Clipboard Toggle word wrap

Vérification

  • Démarrez la VM sur l'hôte source et observez si elle démarre correctement.

Si l'hôte actuel d'une machine virtuelle (VM) ne convient plus ou ne peut plus être utilisé, ou si vous souhaitez redistribuer la charge de travail d'hébergement, vous pouvez migrer la VM vers un autre hôte KVM. La procédure suivante fournit des instructions et des exemples pour divers scénarios de migration.

Conditions préalables

  • L'hôte source et l'hôte de destination utilisent tous deux l'hyperviseur KVM.
  • L'hôte source et l'hôte de destination sont en mesure de se joindre l'un l'autre sur le réseau. Utilisez l'utilitaire ping pour le vérifier.
  • Assurez-vous que les ports suivants sont ouverts sur l'hôte de destination.

    • Le port 22 est nécessaire pour se connecter à l'hôte de destination en utilisant SSH.
    • Le port 16509 est nécessaire pour se connecter à l'hôte de destination en utilisant TLS.
    • Le port 16514 est nécessaire pour se connecter à l'hôte de destination en utilisant TCP.
    • Les ports 49152-49215 sont nécessaires à QEMU pour transférer les données de migration de la mémoire et du disque.
  • Pour que la migration soit prise en charge par Red Hat, l'hôte source et l'hôte de destination doivent utiliser des systèmes d'exploitation et des types de machines spécifiques. Pour vous assurer que c'est le cas, consultez la section Hôtes pris en charge pour la migration de machines virtuelles.
  • La machine virtuelle doit être compatible avec les caractéristiques du processeur de l'hôte de destination. Pour s'en assurer, voir Vérification de la compatibilité du CPU de l'hôte pour la migration de la machine virtuelle.
  • Les images de disque des machines virtuelles qui seront migrées sont situées sur un emplacement réseau distinct accessible à la fois à l'hôte source et à l'hôte de destination. Cette opération est facultative pour la migration hors ligne, mais obligatoire pour la migration d'une VM en cours d'exécution.

    Pour obtenir des instructions sur la configuration d'un tel stockage partagé de VM, voir Partage d'images de disques de machines virtuelles avec d'autres hôtes.

  • Lors de la migration d'une VM en cours d'exécution, la bande passante de votre réseau doit être supérieure à la vitesse à laquelle la VM génère des pages de mémoire sale.

    Pour obtenir le taux de pages sales de votre VM avant de lancer la migration en direct, procédez comme suit :

    • Surveillez le taux de génération de pages sales de la VM pendant une courte période.

      # virsh domdirtyrate-calc example-VM 30
      Copy to Clipboard Toggle word wrap
    • Une fois le contrôle terminé, obtenez ses résultats :

      # virsh domstats example-VM --dirtyrate
      Domain: 'example-VM'
        dirtyrate.calc_status=2
        dirtyrate.calc_start_time=200942
        dirtyrate.calc_period=30
        dirtyrate.megabytes_per_second=2
      Copy to Clipboard Toggle word wrap

      Dans cet exemple, la VM génère 2 Mo de pages de mémoire sale par seconde. Si vous tentez de migrer en direct une telle VM sur un réseau dont la bande passante est inférieure ou égale à 2 Mo/s, la migration en direct ne progressera pas si vous ne mettez pas la VM en pause ou si vous ne réduisez pas sa charge de travail.

      Pour s'assurer que la migration en direct se termine avec succès, Red Hat recommande que la bande passante de votre réseau soit significativement plus grande que le taux de génération de pages sales de la VM.

  • Lors de la migration d'une VM existante dans un réseau de robinets à pont public, les hôtes source et destination doivent être situés sur le même réseau. Dans le cas contraire, le réseau VM ne fonctionnera pas après la migration.
Note

La valeur de l'option calc_period peut varier en fonction de la charge de travail et du taux de pages sales. Vous pouvez expérimenter plusieurs valeurs de calc_period pour déterminer la période la plus appropriée en fonction du taux de pages sales dans votre environnement.

  • Lors de la migration d'une VM, le client virsh sur l'hôte source peut utiliser l'un des protocoles suivants pour se connecter au démon libvirt sur l'hôte de destination. Les exemples de la procédure suivante utilisent une connexion SSH, mais vous pouvez en choisir une autre.

    • Si vous souhaitez que libvirt utilise une connexion SSH, assurez-vous que le socket virtqemud est activé et fonctionne sur l'hôte de destination.

      # systemctl enable --now virtqemud.socket
      Copy to Clipboard Toggle word wrap
    • Si vous souhaitez que libvirt utilise une connexion TLS, assurez-vous que le socket virtproxyd-tls est activé et fonctionne sur l'hôte de destination.

      # systemctl enable --now virtproxyd-tls.socket
      Copy to Clipboard Toggle word wrap
    • Si vous souhaitez que libvirt utilise une connexion TCP, assurez-vous que le socket virtproxyd-tcp est activé et fonctionne sur l'hôte de destination.

      # systemctl enable --now virtproxyd-tcp.socket
      Copy to Clipboard Toggle word wrap

Procédure

  1. Utilisez la commande virsh migrate avec les options appropriées à vos besoins de migration.

    1. La commande suivante permet de migrer la VM example-VM-1 de votre hôte local vers la connexion système de l'hôte example-destination à l'aide d'un tunnel SSH. La machine virtuelle continue de fonctionner pendant la migration.

      # virsh migrate --persistent --live example-VM-1 qemu ssh://example-destination/system
      Copy to Clipboard Toggle word wrap
    2. Les commandes suivantes vous permettent d'apporter des ajustements manuels à la configuration de la VM example-VM-2 fonctionnant sur votre hôte local, puis de migrer la VM vers l'hôte example-destination. La VM migrée utilisera automatiquement la configuration mise à jour.

      # virsh dumpxml --migratable example-VM-2 > example-VM-2.xml
      # vi example-VM-2.xml
      # virsh migrate --live --persistent --xml example-VM-2.xml example-VM-2 qemu+ssh://example-destination/system
      Copy to Clipboard Toggle word wrap

      Cette procédure peut s'avérer utile, par exemple, lorsque l'hôte de destination doit utiliser un chemin différent pour accéder au stockage partagé de la VM ou lorsqu'il s'agit de configurer une fonction spécifique à l'hôte de destination.

    3. La commande suivante suspend la VM example-VM-3 de l'hôte example-source, la migre vers l'hôte example-destination et lui demande d'utiliser la configuration XML ajustée, fournie par le fichier example-VM-3-alt.xml. Lorsque la migration est terminée, libvirt reprend la VM sur l'hôte de destination.

      # virsh migrate example-VM-3 qemu ssh://example-source/system qemu ssh://example-destination/system --xml example-VM-3-alt.xml
      Copy to Clipboard Toggle word wrap

      Après la migration, la VM est à l'arrêt sur l'hôte source, et la copie migrée est supprimée après son arrêt.

    4. La procédure suivante supprime la VM example-VM-4 arrêtée de l'hôte example-source et déplace sa configuration vers l'hôte example-destination.

      # virsh migrate --offline --persistent --undefinesource example-VM-4 qemu ssh://example-source/system qemu ssh://example-destination/system
      Copy to Clipboard Toggle word wrap

      Notez que ce type de migration ne nécessite pas le déplacement de l'image disque de la VM vers le stockage partagé. Cependant, pour que la VM soit utilisable sur l'hôte de destination, vous devez également migrer l'image disque de la VM. Par exemple :

      # scp root@example-source:/var/lib/libvirt/images/example-VM-4.qcow2 root@example-destination:/var/lib/libvirt/images/example-VM-4.qcow2
      Copy to Clipboard Toggle word wrap
    5. La commande suivante migre la VM example-VM-5 vers l'hôte example-destination et utilise plusieurs connexions parallèles, également connues sous le nom de migration à descripteurs de fichiers multiples (multi-FD). La migration multi-FD permet d'accélérer la migration en utilisant toute la bande passante disponible pour le processus de migration.

      # virsh migrate --parallel --parallel-connections 4 <example-VM-5> qemu ssh://<example-destination>/system
      Copy to Clipboard Toggle word wrap

      Cet exemple utilise 4 canaux multi-FD pour migrer la VM example-VM-5. Il est recommandé d'utiliser un canal pour chaque 10 Gbps de bande passante réseau disponible. La valeur par défaut est de 2 canaux.

  2. Attendez la fin de la migration. Le processus peut prendre un certain temps en fonction de la bande passante du réseau, de la charge du système et de la taille de la VM. Si l'option --verbose n'est pas utilisée pour virsh migrate, la CLI n'affiche aucun indicateur de progression, à l'exception des erreurs.

    Lorsque la migration est en cours, vous pouvez utiliser l'utilitaire virsh domjobinfo pour afficher les statistiques de migration.

Vérification

  • Sur l'hôte de destination, dressez la liste des VM disponibles pour vérifier si la VM a été migrée :

    # virsh list
    Id      Name             State
    ----------------------------------
    10    example-VM-1      running
    Copy to Clipboard Toggle word wrap

    Si la migration est toujours en cours, cette commande indique que l'état de la VM est paused.

Résolution de problèmes

  • Dans certains cas, l'hôte cible ne sera pas compatible avec certaines valeurs de la configuration XML de la VM migrée, telles que le nom du réseau ou le type de CPU. Par conséquent, la VM ne pourra pas démarrer sur l'hôte cible. Pour résoudre ces problèmes, vous pouvez mettre à jour les valeurs problématiques à l'aide de la commande virsh edit. Après avoir mis à jour les valeurs, vous devez redémarrer la VM pour que les modifications soient appliquées.
  • Si une migration en direct prend beaucoup de temps à se terminer, cela peut être dû au fait que la VM est fortement sollicitée et que trop de pages mémoire sont modifiées pour que la migration en direct soit possible. Pour résoudre ce problème, remplacez la migration par une migration non dynamique en suspendant la VM.

    # virsh suspend example-VM-1
    Copy to Clipboard Toggle word wrap

Si vous souhaitez migrer une machine virtuelle (VM) qui exécute des tâches nécessitant un fonctionnement constant, vous pouvez migrer cette VM vers un autre hôte KVM sans l'arrêter. C'est ce que l'on appelle la migration en direct. Les instructions suivantes expliquent comment procéder en utilisant la console web.

Avertissement

Pour les tâches qui modifient les pages de mémoire plus rapidement que KVM ne peut les transférer, telles que les tâches à forte charge d'E/S, il est recommandé de ne pas migrer la VM en direct.

Conditions préalables

  • Le plug-in VM de la console web est installé sur votre système.
  • Les hôtes source et destination fonctionnent.
  • Assurez-vous que les ports suivants sont ouverts sur l'hôte de destination.

    • Le port 22 est nécessaire pour se connecter à l'hôte de destination en utilisant SSH.
    • Le port 16509 est nécessaire pour se connecter à l'hôte de destination en utilisant TLS.
    • Le port 16514 est nécessaire pour se connecter à l'hôte de destination en utilisant TCP.
    • Les ports 49152-49215 sont nécessaires à QEMU pour transférer les données de migration de la mémoire et du disque.
  • La machine virtuelle doit être compatible avec les caractéristiques du processeur de l'hôte de destination. Pour s'en assurer, voir Vérification de la compatibilité du CPU de l'hôte pour la migration de la machine virtuelle.
  • Les images de disque de la VM sont situées sur un stockage partagé accessible à l'hôte source et à l'hôte de destination.
  • Lors de la migration d'une VM en cours d'exécution, la bande passante de votre réseau doit être supérieure à la vitesse à laquelle la VM génère des pages de mémoire sale.

    Pour obtenir le taux de pages sales de votre VM avant de lancer la migration en direct, procédez comme suit dans votre interface de ligne de commande :

    1. Surveillez le taux de génération de pages sales de la VM pendant une courte période.

      # virsh domdirtyrate-calc vm-name 30
      Copy to Clipboard Toggle word wrap
    2. Une fois le contrôle terminé, obtenez ses résultats :

      # virsh domstats vm-name --dirtyrate
      Domain: 'vm-name'
        dirtyrate.calc_status=2
        dirtyrate.calc_start_time=200942
        dirtyrate.calc_period=30
        dirtyrate.megabytes_per_second=2
      Copy to Clipboard Toggle word wrap

      Dans cet exemple, la VM génère 2 Mo de pages de mémoire sale par seconde. Si vous tentez de migrer en direct une telle VM sur un réseau dont la bande passante est inférieure ou égale à 2 Mo/s, la migration en direct ne progressera pas si vous ne mettez pas la VM en pause ou si vous ne réduisez pas sa charge de travail.

      Pour s'assurer que la migration en direct se termine avec succès, Red Hat recommande que la bande passante de votre réseau soit significativement plus grande que le taux de génération de pages sales de la VM.

Note

La valeur de l'option calc_period peut varier en fonction de la charge de travail et du taux de pages sales. Vous pouvez expérimenter plusieurs valeurs de calc_period pour déterminer la période la plus appropriée en fonction du taux de pages sales dans votre environnement.

Procédure

  1. Dans l'interface Machines virtuelles de la console web, cliquez sur le bouton Menu de la VM que vous souhaitez migrer.

    Un menu déroulant apparaît avec des commandes pour diverses opérations VM.

  2. Cliquez sur Migrer

    La boîte de dialogue Migrer la VM vers un autre hôte s'affiche.

  3. Saisissez l'URI de l'hôte de destination.
  4. Configurez la durée de la migration :

    • Permanent - Ne cochez pas la case si vous souhaitez migrer la VM de façon permanente. La migration permanente supprime complètement la configuration de la VM de l'hôte source.
    • Temporary - La migration temporaire migre une copie de la VM vers l'hôte de destination. Cette copie est supprimée de l'hôte de destination lorsque la VM est arrêtée. La VM d'origine reste sur l'hôte source.
  5. Cliquez sur Migrer

    Votre VM est migrée vers l'hôte de destination.

Vérification

Pour vérifier si la VM a été migrée avec succès et si elle fonctionne correctement :

  • Confirmez si la VM apparaît dans la liste des VM disponibles sur l'hôte de destination.
  • Démarrez la VM migrée et observez si elle démarre.

En tant qu'aperçu technologique, vous pouvez migrer en direct une machine virtuelle (VM) avec une fonction virtuelle (VF) attachée à un dispositif de mise en réseau Mellanox. Actuellement, cela n'est possible qu'en utilisant un dispositif de mise en réseau Mellanox CX-7. Le VF sur le périphérique de mise en réseau Mellanox CX-7 utilise un nouveau pilote mlx5_vfio_pci, qui ajoute des fonctionnalités nécessaires à la migration en direct, et libvirt lie automatiquement le nouveau pilote au VF.

Limites

Actuellement, certaines fonctions de virtualisation ne peuvent pas être utilisées lors de la migration en direct d'une VM à laquelle est attachée une fonction virtuelle Mellanox :

  • Calcul du taux de génération de pages de mémoire sale de la VM.
  • Utilisation d'une migration post-copie en direct.
  • Utilisation d'une unité virtuelle de gestion de la mémoire d'E/S (vIOMMU) dans la VM.
Important

Cette fonctionnalité n'est incluse dans RHEL 9 qu'en tant qu'aperçu technologique, ce qui signifie qu'elle n'est pas prise en charge.

Conditions préalables

  • Vous avez un périphérique réseau Mellanox CX-7 dont la version du micrologiciel est égale ou supérieure à 28.36.1010.

    Reportez-vous à la documentation de Mellanox pour plus de détails sur les versions du micrologiciel.

  • Le paquetage mstflint est installé à la fois sur l'hôte source et sur l'hôte de destination :

    # dnf install mstflint
    Copy to Clipboard Toggle word wrap
  • Le périphérique de mise en réseau Mellanox CX-7 a pour adresse VF_MIGRATION_MODE MIGRATION_ENABLED :

    # mstconfig -d <device_pci_address> query | grep -i VF_migration
    
    VF_MIGRATION_MODE                           MIGRATION_ENABLED(2)
    Copy to Clipboard Toggle word wrap
    • Vous pouvez remplacer VF_MIGRATION_MODE par MIGRATION_ENABLED à l'aide de la commande suivante :

      # mstconfig -d <device_pci_address> set VF_MIGRATION_MODE=2
      Copy to Clipboard Toggle word wrap
  • Le paquetage openvswitch est installé à la fois sur l'hôte source et sur l'hôte de destination :

    # dnf install openvswitch
    Copy to Clipboard Toggle word wrap
  • L'unité centrale et le micrologiciel de votre hôte prennent en charge l'unité de gestion de la mémoire d'E/S (IOMMU).

    • Si vous utilisez un processeur Intel, il doit supporter la technologie de virtualisation Intel pour Directed I/O (VT-d).
    • Si vous utilisez un processeur AMD, il doit prendre en charge la fonction AMD-Vi.
  • Le système hôte utilise le service de contrôle d'accès (ACS) pour assurer l'isolation de l'accès direct à la mémoire (DMA) pour la topologie PCIe. Vérifiez ce point auprès du fournisseur du système.

    Pour plus d'informations, voir Considérations matérielles pour l'implémentation du SR-IOV.

  • L'interface réseau hôte que vous souhaitez utiliser pour créer des VF est en cours d'exécution. Par exemple, pour activer l'interface eth1 et vérifier qu'elle fonctionne, utilisez les commandes suivantes :

    # ip link set eth1 up
    # ip link show eth1
    8: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000
       link/ether a0:36:9f:8f:3f:b8 brd ff:ff:ff:ff:ff:ff
       vf 0 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 1 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 2 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 3 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
    Copy to Clipboard Toggle word wrap
  • Pour que l'attribution de périphériques SR-IOV fonctionne, la fonction IOMMU doit être activée dans le BIOS et le noyau de l'hôte. Pour ce faire, il faut

    • Sur un hôte Intel, activez la technologie de virtualisation Intel pour Directed I/O (VT-d) :

      1. Régénérer la configuration GRUB avec les paramètres intel_iommu=on et iommu=pt:

        # grubby --args="intel_iommu=on iommu=pt" --update-kernel=ALL
        Copy to Clipboard Toggle word wrap
      2. Redémarrer l'hôte.
    • Sur un hôte AMD, activez AMD-Vi :

      1. Régénérer la configuration GRUB avec le paramètre iommu=pt:

        # grubby --args="iommu=pt" --update-kernel=ALL
        Copy to Clipboard Toggle word wrap
      2. Redémarrer l'hôte.
  • L'hôte source et l'hôte de destination utilisent tous deux l'hyperviseur KVM.
  • L'hôte source et l'hôte de destination sont en mesure de se joindre l'un l'autre sur le réseau. Utilisez l'utilitaire ping pour le vérifier.
  • Les ports suivants sont ouverts sur l'hôte de destination.

    • Le port 22 est nécessaire pour se connecter à l'hôte de destination en utilisant SSH.
    • Le port 16509 est nécessaire pour se connecter à l'hôte de destination en utilisant TLS.
    • Le port 16514 est nécessaire pour se connecter à l'hôte de destination en utilisant TCP.
    • Les ports 49152-49215 sont nécessaires à QEMU pour transférer les données de migration de la mémoire et du disque.
  • L'hôte source et l'hôte de destination utilisent des systèmes d'exploitation et des types de machines qui autorisent la migration. Pour s'en assurer, voir Hôtes pris en charge pour la migration des machines virtuelles.
  • La machine virtuelle doit être compatible avec les caractéristiques du processeur de l'hôte de destination. Pour s'en assurer, voir Vérification de la compatibilité du CPU de l'hôte pour la migration de la machine virtuelle.
  • Les images de disque des machines virtuelles qui seront migrées sont situées sur un emplacement réseau distinct accessible à la fois à l'hôte source et à l'hôte de destination. Cette opération est facultative pour la migration hors ligne, mais obligatoire pour la migration d'une VM en cours d'exécution.

    Pour obtenir des instructions sur la configuration d'un tel stockage partagé de VM, voir Partage d'images de disques de machines virtuelles avec d'autres hôtes.

  • Lors de la migration d'une VM en cours d'exécution, la bande passante de votre réseau doit être supérieure à la vitesse à laquelle la VM génère des pages de mémoire sale.
  • Une prise réseau virtuelle correspondant au protocole de connexion est activée.

    When performing a VM migration, the virsh client on the source host can use one of several protocols to connect to the libvirt daemon on the destination host. Examples in the following procedure use an SSH connection, but you can choose a different one. ** If you want libvirt to use an SSH connection, ensure that the virtqemud socket is enabled and running on the destination host.

    # systemctl enable --now virtqemud.socket
    Copy to Clipboard Toggle word wrap
    • Si vous souhaitez que libvirt utilise une connexion TLS, assurez-vous que le socket virtproxyd-tls est activé et fonctionne sur l'hôte de destination.

      # systemctl enable --now virtproxyd-tls.socket
      Copy to Clipboard Toggle word wrap
    • Si vous souhaitez que libvirt utilise une connexion TCP, assurez-vous que le socket virtproxyd-tcp est activé et fonctionne sur l'hôte de destination.

      # systemctl enable --now virtproxyd-tcp.socket
      Copy to Clipboard Toggle word wrap

Procédure

  1. Sur l'hôte source, configurez le périphérique réseau Mellanox en mode switchdev.

    # devlink dev eswitch set pci/<device_pci_address> mode switchdev
    Copy to Clipboard Toggle word wrap
  2. Sur l'hôte source, créez une fonction virtuelle sur le dispositif Mellanox.

    # echo 1 > /sys/bus/pci/devices/0000\:e1\:00.0/sriov_numvfs
    Copy to Clipboard Toggle word wrap

    La partie /0000\:e1\:00.0/ du chemin d'accès au fichier est basée sur l'adresse PCI de l'appareil. Dans l'exemple, il s'agit de : 0000:e1:00.0

  3. Sur l'hôte source, détachez le VF de son pilote.

    # virsh nodedev-detach <vf_pci_address> --driver pci-stub
    Copy to Clipboard Toggle word wrap

    Vous pouvez afficher l'adresse PCI du VF à l'aide de la commande suivante :

    # lshw -c network -businfo
    
    Bus info                     Device             Class           Description
    ===========================================================================
    pci@0000:e1:00.0  enp225s0np0    network        MT2910 Family [ConnectX-7]
    pci@0000:e1:00.1  enp225s0v0     network        ConnectX Family mlx5Gen Virtual Function
    Copy to Clipboard Toggle word wrap
  4. Sur l'hôte source, activez la fonction de migration du VF.

    # devlink port function set pci/0000:e1:00.0/1 migratable enable
    Copy to Clipboard Toggle word wrap

    Dans cet exemple, pci/0000:e1:00.0/1 fait référence au premier VF sur le périphérique Mellanox avec l'adresse PCI donnée.

  5. Sur l'hôte source, configurez Open vSwitch (OVS) pour la migration du VF. Si le périphérique Mellanox est en mode switchdev, il ne peut pas transférer de données sur le réseau.

    1. Assurez-vous que le service openvswitch est en cours d'exécution.

      # systemctl start openvswitch
      Copy to Clipboard Toggle word wrap
    2. Activer le délestage matériel pour améliorer les performances du réseau.

      # ovs-vsctl set Open_vSwitch . other_config:hw-offload=true
      Copy to Clipboard Toggle word wrap
    3. Augmentez la durée maximale d'inactivité pour vous assurer que les connexions réseau restent ouvertes pendant la migration.

      # ovs-vsctl set Open_vSwitch . other_config:max-idle=300000
      Copy to Clipboard Toggle word wrap
    4. Créer un nouveau pont dans l'instance OVS.

      # ovs-vsctl add-br <bridge_name>
      Copy to Clipboard Toggle word wrap
    5. Redémarrez le service openvswitch.

      # systemctl restart openvswitch
      Copy to Clipboard Toggle word wrap
    6. Ajoutez l'appareil physique Mellanox au pont OVS.

      # ovs-vsctl add-port <bridge_name> enp225s0np0
      Copy to Clipboard Toggle word wrap

      Dans cet exemple, <bridge_name> est le nom du pont que vous avez créé à l'étape d et enp225s0np0 est le nom de l'interface réseau du périphérique Mellanox.

    7. Ajouter le VF de l'appareil Mellanox au pont OVS.

      # ovs-vsctl add-port <bridge_name> enp225s0npf0vf0
      Copy to Clipboard Toggle word wrap

      Dans cet exemple, <bridge_name> est le nom du pont que vous avez créé à l'étape d et enp225s0npf0vf0 est le nom de l'interface réseau du VF.

  6. Répétez les étapes 1 à 5 sur le site destination host.
  7. Sur l'hôte source, ouvrez un nouveau fichier, tel que mlx_vf.xml, et ajoutez la configuration XML suivante du VF :

     <interface type='hostdev' managed='yes'>
          <mac address='52:54:00:56:8c:f7'/>
          <source>
            <address type='pci' domain='0x0000' bus='0xe1' slot='0x00' function='0x1'/>
          </source>
     </interface>
    Copy to Clipboard Toggle word wrap

    Cet exemple configure un passage du VF en tant qu'interface réseau pour la VM. Assurez-vous que l'adresse MAC est unique et utilisez l'adresse PCI du VF sur l'hôte source.

  8. Sur l'hôte source, attachez le fichier XML VF à la VM.

    # virsh attach-device <vm_name> mlx_vf.xml --live --config
    Copy to Clipboard Toggle word wrap

    Dans cet exemple, mlx_vf.xml est le nom du fichier XML contenant la configuration du VF. Utilisez l'option --live pour attacher le périphérique à une VM en cours d'exécution.

  9. Sur l'hôte source, démarrez la migration en direct de la VM en cours d'exécution avec le VF joint.

    # virsh migrate --live --domain <vm_name> --desturi qemu ssh://<destination_host_ip_address>/system
    Copy to Clipboard Toggle word wrap

Vérification

  1. Dans la VM migrée, affichez le nom de l'interface réseau du VF Mellanox.

    # ifconfig
    
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255
            inet6 fe80::a00:27ff:fe4e:66a1  prefixlen 64  scopeid 0x20<link>
            ether 08:00:27:4e:66:a1  txqueuelen 1000  (Ethernet)
            RX packets 100000  bytes 6543210 (6.5 MB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 100000  bytes 6543210 (6.5 MB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    enp4s0f0v0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.3.10  netmask 255.255.255.0  broadcast 192.168.3.255
            inet6 fe80::a00:27ff:fe4e:66c3  prefixlen 64  scopeid 0x20<link>
            ether 08:00:27:4e:66:c3  txqueuelen 1000  (Ethernet)
            RX packets 200000  bytes 12345678 (12.3 MB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 200000  bytes 12345678 (12.3 MB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    Copy to Clipboard Toggle word wrap
  2. Dans la VM migrée, vérifiez que le VF Mellanox fonctionne, par exemple :

    # ping -I <VF_interface_name> 8.8.8.8
    
    PING 8.8.8.8 (8.8.8.8) from 192.168.3.10 <VF_interface_name>: 56(84) bytes of data.
    64 bytes from 8.8.8.8: icmp_seq=1 ttl=57 time=27.4 ms
    64 bytes from 8.8.8.8: icmp_seq=2 ttl=57 time=26.9 ms
    
    --- 8.8.8.8 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1002ms
    rtt min/avg/max/mdev = 26.944/27.046/27.148/0.102 ms
    Copy to Clipboard Toggle word wrap

12.9. Dépannage des migrations de machines virtuelles

Si vous rencontrez l'un des problèmes suivants lors de la migration de machines virtuelles (VM), consultez les instructions fournies pour résoudre ou éviter le problème.

Cause

Dans certains cas, la migration d'une VM en cours d'exécution peut amener la VM à générer dirty memory pages plus rapidement qu'elle ne peut être migrée. Dans ce cas, la migration ne peut pas s'achever correctement.

Les scénarios suivants sont souvent à l'origine de ce problème :

  • Migration en direct d'une VM sous forte charge
  • Migration en direct d'une VM qui utilise une grande quantité de mémoire, par exemple 1 To ou plus

    Important

    Red Hat a testé avec succès la migration en direct de VMs ayant jusqu'à 6 TB de mémoire. Cependant, pour les scénarios de migration en direct qui impliquent des machines virtuelles avec plus de 1 TB de mémoire, les clients doivent contacter le support technique de Red Hat.

Diagnosis

Si la migration en direct de votre VM prend plus de temps que prévu, utilisez la commande virsh domjobinfo pour obtenir les données de la page mémoire de la VM :

# virsh domjobinfo vm-name

Job type:         Unbounded
Operation:        Outgoing migration
Time elapsed:     168286974    ms
Data processed:   26.106 TiB
Data remaining:   34.383 MiB
Data total:       10.586 TiB
Memory processed: 26.106 TiB
Memory remaining: 34.383 MiB
Memory total:     10.586 TiB
Memory bandwidth: 29.056 MiB/s
Dirty rate: 17225 pages/s
Page size: 4096 bytes
Copy to Clipboard Toggle word wrap

Dans cette sortie, la multiplication de Dirty rate et Page size est supérieure à Memory bandwidth, ce qui signifie que la VM génère des pages de mémoire sales plus rapidement que le réseau ne peut les migrer. Par conséquent, l'état de la VM sur l'hôte de destination ne peut pas converger avec l'état de la VM sur l'hôte source, ce qui empêche la migration de se terminer.

Fix

Pour améliorer les chances qu'une migration en direct bloquée se termine avec succès, vous pouvez prendre l'une des mesures suivantes :

  • Réduire la charge de travail de la VM, en particulier les mises à jour de la mémoire.

    • Pour ce faire, arrêtez ou annulez les processus non essentiels dans le système d'exploitation invité de la machine virtuelle source.
  • Augmenter le temps d'arrêt prévu pour la migration en direct :

    1. Affiche le temps d'arrêt maximum actuel à la fin d'une migration en direct pour la VM en cours de migration :

      # virsh migrate-getmaxdowntime vm-name
      Copy to Clipboard Toggle word wrap
    2. Fixer un temps d'arrêt maximal plus élevé :

      # virsh migrate-setmaxdowntime vm-name downtime-in-miliseconds
      Copy to Clipboard Toggle word wrap

      Plus le temps d'indisponibilité maximal est élevé, plus la migration a de chances de s'achever.

  • Passez la migration en direct en mode post-copy.

    # virsh migrate-start-postcopy vm-name
    Copy to Clipboard Toggle word wrap
    • Cela permet de s'assurer que les pages de mémoire de la VM peuvent converger vers l'hôte de destination et que la migration peut s'achever.

      Cependant, lorsque le mode post-copie est actif, la VM peut ralentir de manière significative, en raison des demandes de pages distantes de l'hôte de destination vers l'hôte source. En outre, si la connexion réseau entre l'hôte source et l'hôte de destination cesse de fonctionner pendant la migration post-copie, certains processus de la VM peuvent s'arrêter en raison de pages de mémoire manquantes.

      Par conséquent, n'utilisez pas la migration post-copie si la disponibilité de la VM est critique ou si le réseau de migration est instable.

  • Si votre charge de travail le permet, suspendez la VM et laissez la migration se terminer comme une migration non-live. Cela augmente le temps d'arrêt de la VM, mais dans la plupart des cas, cela garantit que la migration se termine avec succès.

Prevention

La probabilité de réussir la migration d'une VM dépend des éléments suivants :

  • La charge de travail de la VM pendant la migration

    • Avant de commencer la migration, arrêtez ou annulez les processus non essentiels dans le système d'exploitation invité de la VM.
  • La bande passante du réseau que l'hôte peut utiliser pour la migration

    • Pour obtenir des résultats optimaux lors d'une migration en direct, la bande passante du réseau utilisé pour la migration doit être nettement supérieure au taux de génération de pages sales de la machine virtuelle. Pour savoir comment obtenir le taux de génération de pages sales de la VM, reportez-vous à la section Conditions préalables à la migration d'une machine virtuelle à l'aide de l'interface de ligne de commande.
    • L'hôte source et l'hôte de destination doivent disposer d'un contrôleur d'interface réseau (NIC) dédié à la migration. Pour la migration en direct d'une VM avec plus de 1 To de mémoire, Red Hat recommande une carte d'interface réseau avec une vitesse de 25 Gb/s ou plus.
    • Vous pouvez également spécifier la bande passante réseau affectée à la migration en direct en utilisant l'option --bandwidth lorsque vous lancez la migration. Pour la migration de très grandes machines virtuelles, attribuez autant de bande passante que possible pour votre déploiement.
  • Le mode de migration en direct

    • Le mode de migration par défaut pre-copy copie les pages de mémoire à plusieurs reprises si elles sont sales.
    • Post-copy la migration ne copie les pages de mémoire qu'une seule fois.

      Pour permettre à votre migration en direct de passer en mode post-copie si la migration se bloque, utilisez l'option --postcopy avec virsh migrate lors du démarrage de la migration.

  • Le temps d'arrêt spécifié pour le déploiement

    • Vous pouvez l'ajuster pendant la migration en utilisant virsh migrate-setmaxdowntime comme décrit précédemment.

Pour que la migration de la machine virtuelle (VM) fonctionne correctement et soit prise en charge par Red Hat, les hôtes source et destination doivent être des versions RHEL et des types de machines spécifiques. Le tableau suivant présente les chemins de migration de VM pris en charge.

Expand
Tableau 12.2. Compatibilité avec la migration en direct
Méthode de migrationType d'autorisationExemple de version futureStatut de soutien

En avant

Version mineure

9.0.1 → 9.1

Sur les systèmes RHEL 9 pris en charge : type de machine q35.

Retour en arrière

Version mineure

9.1 → 9.0.1

Sur les systèmes RHEL 9 pris en charge : type de machine q35.

Note

Le niveau de support est différent pour les autres solutions de virtualisation fournies par Red Hat, notamment RHOSP et OpenShift Virtualization.

Pour sauvegarder l'état actuel d'une machine virtuelle (VM), vous pouvez créer un snapshot de la VM. Ensuite, vous pouvez revenir à l'instantané pour ramener la VM à l'état sauvegardé.

Un instantané de VM contient l'image disque de la VM. Si vous créez un instantané à partir d'une VM en cours d'exécution (également appelée live snapshot), l'instantané contient également l'état de la mémoire de la VM, ce qui inclut les processus et les applications en cours d'exécution.

La création d'instantanés peut être utile, par exemple, pour les tâches suivantes :

  • Sauvegarde d'un état propre du système d'exploitation invité
  • S'assurer de disposer d'un point de restauration avant d'effectuer une opération potentiellement destructrice sur la VM

Red Hat prend en charge la fonctionnalité d'instantané pour les machines virtuelles (VM) sur RHEL uniquement lorsque vous utilisez les instantanés external. Actuellement, les instantanés externes sont créés sur RHEL uniquement lorsque toutes les conditions suivantes sont remplies :

  • Votre hôte utilise RHEL 9.4 ou une version ultérieure.
  • La VM utilise un stockage basé sur des fichiers.
  • Vous ne créez l'instantané de la VM que dans l'un des scénarios suivants :

    • La VM est arrêtée.
    • Si la VM est en cours d'exécution, vous utilisez les options --disk-only --quiesce ou --live --memspec.

La plupart des autres configurations créent des instantanés internal, qui sont obsolètes dans RHEL 9. Les instantanés internes peuvent fonctionner pour votre cas d'utilisation, mais Red Hat ne fournit pas de test et de support complets pour eux.

Avertissement

N'utilisez pas d'instantanés internes dans les environnements de production.

Pour vous assurer qu'un instantané est pris en charge, affichez la configuration XML de l'instantané et vérifiez le type d'instantané et le stockage :

# virsh snapshot-dumpxml <vm-name> <snapshot-name>
Copy to Clipboard Toggle word wrap
  • Exemple de sortie d'un instantané pris en charge :

    <domainsnapshot>
      <name>sample-snapshot-name-1<name>
      <state>shutoff</state>
      <creationTime>1706658764</creationTime>
      <memory snapshot='no'/>
      <disks>
        <disk name='vda' snapshot='external' type='file'>
          <driver type='qcow2'/>
          <source file='/var/lib/libvirt/images/vm-name.sample-snapshot-name-1'/>
        </disk>
      </disks>
      <domain type='kvm'>
      [...]
    Copy to Clipboard Toggle word wrap
  • Exemple de sortie d'un instantané non pris en charge :

    <domainsnapshot>
      <name>sample-snapshot-name-2</name>
      <state>running</state>
      <creationTime>1653396424</creationTime>
      <memory snapshot='internal'/>
      <disks>
        <disk name='vda' snapshot='internal'/>
        <disk name='sda' snapshot='no'/>
      </disks>
      <domain type='kvm'>
      [...]
    Copy to Clipboard Toggle word wrap

Pour sauvegarder l'état d'une machine virtuelle (VM) dans un instantané, vous pouvez utiliser la commande virsh snapshot-create-as.

Conditions préalables

  • Votre hôte utilise RHEL 9.4 ou une version ultérieure.
  • La VM utilise un stockage basé sur des fichiers. Pour vérifier si c'est le cas, utilisez la commande suivante et assurez-vous que le périphérique disk affiche disk type comme file:

    # virsh dumpxml <vm-name> | grep "disk type"
        <disk type='file' device='disk'>
        <disk type='file' device='cdrom'>
    Copy to Clipboard Toggle word wrap
  • Si vous souhaitez créer un instantané de VM qui inclut la mémoire d'une VM en cours d'exécution, vous devez disposer de suffisamment d'espace disque pour stocker la mémoire de la VM.

    • L'espace minimum recommandé pour la sauvegarde de la mémoire d'une VM est égal à la RAM attribuée à la VM. Par exemple, la sauvegarde de la mémoire d'une VM avec 32 Go de RAM nécessite jusqu'à 32 Go d'espace disque.
    • Si la VM est soumise à une forte charge d'E/S, un espace disque supplémentaire important peut être nécessaire.
    • Si des périphériques VFIO passthrough ont été attribués à la VM, de l'espace disque supplémentaire peut être nécessaire.
    • Si un instantané est créé sans mettre la VM en pause, de l'espace disque supplémentaire peut être nécessaire.

      Avertissement

      Red Hat recommande de ne pas sauvegarder la mémoire d'une VM en cours d'exécution qui est soumise à une charge de travail très élevée ou qui utilise des périphériques VFIO passthrough. Sauvegarder la mémoire de telles VM pourrait remplir le disque de l'hôte et dégrader le système. Au lieu de cela, envisagez de créer des instantanés sans mémoire pour de telles VM.

      En outre, il convient de noter que tous les périphériques VFIO ne sont pas en mesure de créer des instantanés avec mémoire. Actuellement, la création d'un instantané avec mémoire ne fonctionne correctement que si le périphérique VFIO connecté est un VF Mellanox dont la capacité de migration est activée.

Procédure

  • Pour créer un instantané de VM avec les paramètres requis, utilisez la commande virsh snapshot-create-as.

    # virsh snapshot-create-as <vm-name> <snapshot-name> <optional-description> <additional-parameters>
    Copy to Clipboard Toggle word wrap
    • Pour créer un instantané d'une VM arrêtée, utilisez le paramètre --disk-only. Par exemple, la commande suivante crée Snapshot1 à partir de l'état actuel du disque de la VM arrêtée Testguest1:

      # virsh snapshot-create-as Testguest1 Snapshot1 --disk-only
      Domain snapshot Snapshot1 created.
      Copy to Clipboard Toggle word wrap
    • Pour créer un instantané qui sauvegarde l'état du disque d'une VM en cours d'exécution mais pas sa mémoire, utilisez les paramètres --disk-only --quiesce. Par exemple, la commande suivante crée Snapshot2 à partir de l'état actuel du disque de la VM en cours d'exécution Testguest2, avec la description clean system install:

      # virsh snapshot-create-as Testguest2 Snapshot2 "clean system install" --disk-only --quiesce
      Domain snapshot Snapshot2 created.
      Copy to Clipboard Toggle word wrap
    • Pour créer un instantané qui met en pause une VM en cours d'exécution et sauvegarde son état de disque et de mémoire, utilisez le paramètre --memspec. Par exemple, la commande suivante met en pause la VM Testguest3 et crée Snapshot3 à partir de l'état actuel du disque et de la mémoire de la VM. La mémoire de la VM est enregistrée dans le fichier /var/lib/libvirt/images/saved_memory.img. Lorsque l'instantané est terminé, la VM reprend automatiquement ses activités.

      # virsh snapshot-create-as Testguest3 Snapshot3 --memspec /var/lib/libvirt/images/saved_memory.img
      Domain snapshot Snapshot3 created.
      Copy to Clipboard Toggle word wrap

      La mise en pause de la VM pendant le processus d'instantané crée un temps d'arrêt, mais peut fonctionner de manière plus fiable que la création d'un instantané en direct d'une VM en cours d'exécution (en utilisant l'option --live ), en particulier pour les VM soumises à une charge importante.

    • Pour créer un instantané qui enregistre l'état du disque d'une VM en cours d'exécution ainsi que sa mémoire vive, utilisez les paramètres --live --memspec. Par exemple, la commande suivante crée Snapshot4 à partir de l'état actuel du disque et de la mémoire de la VM en cours d'exécution Testguest4, et enregistre l'état de la mémoire dans le fichier /var/lib/libvirt/images/saved_memory2.img.

      # virsh snapshot-create-as Testguest4 Snapshot4 --live --memspec /var/lib/libvirt/images/saved_memory2.img
      Domain snapshot Snapshot4 created.
      Copy to Clipboard Toggle word wrap
Avertissement

L'enregistrement de la mémoire d'une VM dans un instantané permet de sauvegarder l'état des processus en cours d'exécution dans le système d'exploitation invité de la VM. Toutefois, lorsque vous revenez à un tel instantané, les processus peuvent échouer en raison de divers facteurs, tels que la perte de connectivité réseau ou la désynchronisation de l'heure système.

Vérification

  1. Liste les instantanés associés à la VM spécifiée :

    # virsh snapshot-list <Testguest1>
    
     Name                    Creation Time               State
    --------------------------------------------------------------
    Snapshot1               2024-01-30 18:34:58 +0100   shutoff
    Copy to Clipboard Toggle word wrap
  2. Vérifiez que l'instantané a été créé à l'adresse external:

    # virsh snapshot-dumpxml <Testguest1> <Snapshot1> | grep external
    
      <disk name='vda' snapshot='external' type='file'>
    Copy to Clipboard Toggle word wrap

    Si la sortie de cette commande inclut snapshot='external', l'instantané est externe et donc entièrement pris en charge par Red Hat.

Pour enregistrer l'état d'une machine virtuelle (VM) dans un instantané, vous pouvez utiliser la console web RHEL.

Conditions préalables

  • Votre hôte utilise RHEL 9.4 ou une version ultérieure.
  • Le plug-in VM de la console web est installé sur votre système.
  • La VM utilise un stockage basé sur des fichiers. Pour vous en assurer, procédez comme suit :

    1. Dans l'interface Virtual machines de la console Web, cliquez sur la VM dont vous souhaitez créer un instantané.
    2. Dans le volet Disks de la vue d'ensemble de la gestion, vérifiez la colonne Source des appareils répertoriés. Dans tous les appareils qui listent une source, cette source doit être File.

Procédure

  1. Dans l'interface Virtual machines de la console Web, cliquez sur la VM dont vous souhaitez créer un instantané.

    Une vue d'ensemble de la gestion de la VM s'ouvre.

  2. Dans le volet Snapshots de la vue d'ensemble de la gestion, cliquez sur le bouton Create snapshot.
  3. Saisissez un nom pour l'instantané et, éventuellement, une description.
  4. Cliquez sur Create.

Vérification

  1. Pour vous assurer que la création de l'instantané a réussi, vérifiez que l'instantané est désormais répertorié dans le volet Snapshots de la VM.
  2. Vérifiez que l'instantané a été créé à l'adresse external. Pour ce faire, utilisez la commande suivante dans l'interface de ligne de commande de l'hôte :

    # virsh snapshot-dumpxml <Testguest1> <Snapshot1> | grep external
    
      <disk name='vda' snapshot='external' type='file'>
    Copy to Clipboard Toggle word wrap

    Si la sortie de cette commande inclut snapshot='external', l'instantané est externe et donc pris en charge par Red Hat.

Pour ramener une machine virtuelle (VM) à l'état sauvegardé dans un instantané, vous pouvez utiliser l'interface de ligne de commande (CLI).

Conditions préalables

  • Un instantané de la VM est disponible, que vous avez préalablement créé dans la console web ou en utilisant l'interface de ligne de commande.
  • Optional: Vous avez créé un instantané de l'état actuel de la VM. Si vous revenez à un instantané précédent sans sauvegarder l'état actuel, les modifications effectuées sur la VM depuis le dernier instantané seront perdues.

Procédure

  • Utilisez l'utilitaire virsh snapshot-revert et indiquez le nom de la VM et le nom de l'instantané sur lequel vous souhaitez revenir. Par exemple, le nom de la VM et le nom de l'instantané vers lequel vous souhaitez revenir :

    # virsh snapshot-revert Testguest2 clean-install
    Domain snapshot clean-install reverted
    Copy to Clipboard Toggle word wrap

Vérification

  • Affiche l'instantané actuellement actif pour la VM inversée :

    # virsh snapshot-current Testguest2 --name
    clean-install
    Copy to Clipboard Toggle word wrap

Pour ramener une machine virtuelle (VM) à l'état sauvegardé dans un instantané, vous pouvez utiliser la console web RHEL.

Conditions préalables

Procédure

  1. Dans l'interface Virtual machines de la console Web, cliquez sur la VM dont vous voulez inverser l'état.

    Une vue d'ensemble de la gestion de la VM s'ouvre.

  2. Dans le volet Snapshots de la vue d'ensemble de la gestion, cliquez sur le bouton Revert en regard de l'instantané vers lequel vous souhaitez revenir.
  3. Attendez que l'opération d'inversion se termine. En fonction de la taille de l'instantané et de sa différence avec l'état actuel, cette opération peut prendre plusieurs minutes.

Vérification

  • Dans le volet Snapshots, si un symbole de vérification vert s'affiche à gauche de l'instantané sélectionné, cela signifie que vous avez réussi à revenir à cet instantané.

Lorsqu'un instantané de machine virtuelle (VM) ne vous est plus utile, vous pouvez le supprimer dans l'interface de ligne de commande afin de libérer l'espace disque qu'il utilise.

Conditions préalables

  • Optional: Un cliché enfant existe pour le cliché que vous souhaitez supprimer.

    Un instantané enfant est créé automatiquement lorsque vous avez un instantané actif et que vous créez un nouvel instantané. Si vous supprimez un instantané qui n'a pas d'enfant, vous perdrez toutes les modifications enregistrées dans l'instantané après sa création à partir de l'instantané parent.

    Pour afficher la structure parent-enfant des instantanés dans une VM, utilisez la commande virsh snapshot-list --tree. L'exemple suivant montre que Latest-snapshot est un enfant de Redundant-snapshot.

    # virsh snapshot-list --tree <vm-name>
    
    Clean-install-snapshot
      |
      +- Redundant-snapshot
          |
          +- Latest-snapshot
    Copy to Clipboard Toggle word wrap

Procédure

  • Utilisez la commande virsh snapshot-delete pour supprimer l'instantané. Par exemple, la commande suivante supprime Redundant-snapshot de la VM Testguest1:

    # virsh snapshot-delete Testguest1 Redundant-snapshot
    Domain snapshot Redundant-snapshot deleted
    Copy to Clipboard Toggle word wrap

Vérification

  • Pour vous assurer que l'instantané que vous avez supprimé n'est plus présent, affichez les instantanés existants de la VM concernée et leur structure parent-enfant :

    # virsh snapshot-list --tree <Testguest1>
    
    Clean-install-snapshot
      |
      +- Latest-snapshot
    Copy to Clipboard Toggle word wrap

    Dans cet exemple, Redundant-snapshot a été supprimé et Latest-snapshot est devenu l'enfant de Clean-install-snapshot.

Lorsqu'un instantané de machine virtuelle (VM) ne vous est plus utile, vous pouvez le supprimer dans la console Web afin de libérer l'espace disque qu'il utilise.

Conditions préalables

  • Le plug-in VM de la console web est installé sur votre système.
  • Optional: Un cliché enfant existe pour le cliché que vous souhaitez supprimer.

    Un instantané enfant est créé automatiquement lorsque vous avez un instantané actif et que vous créez un nouvel instantané. Si vous supprimez un instantané qui n'a pas d'enfant, vous perdrez toutes les modifications enregistrées dans l'instantané après sa création à partir de l'instantané parent.

    Pour vérifier que l'instantané a un enfant, confirmez que l'instantané est répertorié dans la colonne Parent snapshot de Snapshots dans la vue d'ensemble de la console Web de la VM.

Procédure

  1. Dans l'interface Virtual machines de la console Web, cliquez sur la VM dont vous souhaitez supprimer l'instantané.

    Une vue d'ensemble de la gestion de la VM s'ouvre.

  2. Dans le volet Snapshots de la vue d'ensemble de la gestion, cliquez sur le bouton Delete en regard de l'instantané que vous souhaitez supprimer.
  3. Attendez la fin de l'opération de suppression. Selon la taille de l'instantané, cette opération peut prendre plusieurs minutes.

Vérification

  • Si l'instantané n'apparaît plus dans le volet Snapshots, c'est qu'il a été supprimé avec succès.

Chapitre 14. Gestion des dispositifs virtuels

L'un des moyens les plus efficaces de gérer les fonctionnalités, les caractéristiques et les performances d'une machine virtuelle (VM) est d'ajuster son site virtual devices.

Les sections suivantes donnent un aperçu général de ce que sont les dispositifs virtuels et des instructions sur la manière de les gérer à l'aide de la CLI ou de la console web.

14.1. Fonctionnement des dispositifs virtuels

Tout comme les machines physiques, les machines virtuelles (VM) nécessitent des dispositifs spécialisés pour fournir des fonctions au système, telles que la puissance de traitement, la mémoire, le stockage, la mise en réseau ou les graphiques. Les systèmes physiques utilisent généralement des dispositifs matériels à ces fins. Cependant, comme les VM fonctionnent comme des implémentations logicielles, elles doivent utiliser des abstractions logicielles de ces dispositifs, appelées virtual devices.

L'essentiel

Les dispositifs virtuels attachés à une VM peuvent être configurés lors de la création de la VM, et peuvent également être gérés sur une VM existante. En général, les périphériques virtuels ne peuvent être attachés ou détachés d'une VM que lorsque celle-ci est éteinte, mais certains peuvent être ajoutés ou supprimés lorsque la VM est en cours d'exécution. Cette fonctionnalité est désignée par les termes "device hot plug " et " hot unplug".

Lors de la création d'une nouvelle VM, libvirt crée et configure automatiquement un ensemble par défaut de périphériques virtuels essentiels, sauf indication contraire de l'utilisateur. Ceux-ci sont basés sur l'architecture du système hôte et le type de machine, et comprennent généralement :

  • l'unité centrale
  • mémoire
  • un clavier
  • un contrôleur d'interface réseau (NIC)
  • divers contrôleurs d'appareils
  • une carte vidéo
  • une carte son

Pour gérer les périphériques virtuels après la création de la VM, utilisez l'interface de ligne de commande (CLI). Toutefois, pour gérer les périphériques de stockage virtuels et les cartes réseau, vous pouvez également utiliser la console Web de RHEL 9.

Performance ou flexibilité

Pour certains types d'appareils, RHEL 9 prend en charge plusieurs implémentations, souvent avec un compromis entre performance et flexibilité.

Par exemple, le stockage physique utilisé pour les disques virtuels peut être représenté par des fichiers de différents formats, tels que qcow2 ou raw, et présenté à la VM à l'aide de divers contrôleurs :

  • un contrôleur émulé
  • virtio-scsi
  • virtio-blk

Un contrôleur émulé est plus lent qu'un contrôleur virtio, car les périphériques virtio sont conçus spécifiquement à des fins de virtualisation. D'un autre côté, les contrôleurs émulés permettent d'exécuter des systèmes d'exploitation qui n'ont pas de pilotes pour les périphériques virtio. De même, virtio-scsi offre un support plus complet pour les commandes SCSI et permet d'attacher un plus grand nombre de disques à la VM. Enfin, virtio-blk offre de meilleures performances que virtio-scsi et les contrôleurs émulés, mais une gamme plus limitée de cas d'utilisation. Par exemple, l'attachement d'un disque physique en tant que périphérique LUN à une VM n'est pas possible lorsque l'on utilise virtio-blk.

Pour plus d'informations sur les types de dispositifs virtuels, voir Types de dispositifs virtuels.

14.2. Types de dispositifs virtuels

La virtualisation dans RHEL 9 peut présenter plusieurs types distincts de périphériques virtuels que vous pouvez attacher à des machines virtuelles (VM) :

Dispositifs émulés

Les dispositifs émulés sont des implémentations logicielles de dispositifs physiques largement utilisés. Les pilotes conçus pour les dispositifs physiques sont également compatibles avec les dispositifs émulés. Par conséquent, les dispositifs émulés peuvent être utilisés de manière très flexible.

Toutefois, comme ils doivent émuler fidèlement un type particulier de matériel, les dispositifs émulés peuvent subir une perte de performance significative par rapport aux dispositifs physiques correspondants ou à des dispositifs virtuels plus optimisés.

Les types de dispositifs émulés suivants sont pris en charge :

  • Les unités centrales virtuelles (vCPU), avec un large choix de modèles d'unités centrales disponibles. L'impact de l'émulation sur les performances dépend fortement des différences entre le CPU hôte et le vCPU émulé.
  • Composants de systèmes émulés, tels que les contrôleurs de bus PCI.
  • Contrôleurs de stockage émulés, tels que SATA, SCSI ou même IDE.
  • Dispositifs sonores émulés, tels que ICH9, ICH6 ou AC97.
  • Cartes graphiques émulées, telles que les cartes VGA.
  • Périphériques réseau émulés, tels que rtl8139.
Dispositifs paravirtualisés

La paravirtualisation fournit une méthode rapide et efficace pour exposer les appareils virtuels aux machines virtuelles. Les périphériques paravirtualisés exposent des interfaces conçues spécifiquement pour être utilisées dans les machines virtuelles, ce qui augmente considérablement les performances des périphériques. RHEL 9 fournit des périphériques paravirtualisés aux machines virtuelles en utilisant l'API virtio comme couche entre l'hyperviseur et la machine virtuelle. L'inconvénient de cette approche est qu'elle nécessite un pilote de périphérique spécifique dans le système d'exploitation invité.

Il est recommandé d'utiliser des périphériques paravirtualisés plutôt que des périphériques émulés pour les machines virtuelles chaque fois que cela est possible, notamment si elles exécutent des applications à forte intensité d'entrées/sorties. Les périphériques paravirtualisés réduisent la latence des E/S et augmentent le débit des E/S, ce qui les rapproche dans certains cas des performances d'une machine nue. D'autres dispositifs paravirtualisés ajoutent également des fonctionnalités aux machines virtuelles qui ne sont pas disponibles autrement.

Les types de dispositifs paravirtualisés suivants sont pris en charge :

  • Le dispositif de réseau paravirtualisé (virtio-net).
  • Contrôleurs de stockage paravirtualisés :

    • virtio-blk - fournit une émulation de périphérique de bloc.
    • virtio-scsi - fournit une émulation SCSI plus complète.
  • L'horloge paravirtualisée.
  • Le dispositif sériel paravirtualisé (virtio-serial).
  • Le dispositif de ballon (virtio-balloon), utilisé pour distribuer dynamiquement la mémoire entre une VM et son hôte.
  • Le générateur de nombres aléatoires paravirtualisé (virtio-rng).
Dispositifs physiquement partagés

Certaines plates-formes matérielles permettent aux machines virtuelles d'accéder directement à divers dispositifs et composants matériels. Ce processus est connu sous le nom de device assignment ou passthrough.

Lorsqu'ils sont attachés de cette manière, certains aspects de l'appareil physique sont directement accessibles à la VM comme ils le seraient à une machine physique. Cela permet d'obtenir des performances supérieures pour l'appareil lorsqu'il est utilisé dans la VM. Cependant, les périphériques physiquement attachés à une VM deviennent indisponibles pour l'hôte et ne peuvent pas non plus être migrés.

Néanmoins, certains dispositifs peuvent être shared sur plusieurs machines virtuelles. Par exemple, un seul appareil physique peut, dans certains cas, fournir plusieurs mediated devices, qui peuvent ensuite être affectés à des machines virtuelles distinctes.

Les types suivants de dispositifs de passage sont pris en charge :

  • USB, PCI et SCSI passthrough - exposent les bus standard de l'industrie directement aux machines virtuelles afin de mettre leurs fonctions spécifiques à la disposition du logiciel invité.
  • Virtualisation des E/S à racine unique (SR-IOV) - une spécification qui permet une isolation matérielle des ressources PCI Express. Cela permet de partitionner de manière sûre et efficace une ressource PCI physique unique en fonctions PCI virtuelles. Elle est couramment utilisée pour les cartes d'interface réseau (NIC).
  • N_Port ID virtualization (NPIV) - technologie Fibre Channel permettant de partager un seul adaptateur de bus hôte physique (HBA) avec plusieurs ports virtuels.
  • GPU et vGPU - accélérateurs pour des types spécifiques de charges de travail graphiques ou informatiques. Certains GPU peuvent être attachés directement à une VM, tandis que d'autres offrent la possibilité de créer des GPU virtuels (vGPU) qui partagent le matériel physique sous-jacent.
Note

Certains périphériques de ces types peuvent ne pas être pris en charge ou ne pas être compatibles avec RHEL. Si vous avez besoin d'aide pour configurer des périphériques virtuels, consultez l'assistance Red Hat.

Pour modifier les fonctionnalités de votre machine virtuelle (VM), vous pouvez gérer les périphériques connectés à votre VM à l'aide de l'interface de ligne de commande (CLI).

Vous pouvez utiliser le CLI pour

14.3.1. Attacher des périphériques aux machines virtuelles

Vous pouvez ajouter une fonctionnalité spécifique à vos machines virtuelles (VM) en attachant un nouveau dispositif virtuel.

La procédure suivante permet de créer et d'attacher des dispositifs virtuels à vos machines virtuelles (VM) à l'aide de l'interface de ligne de commande (CLI). Certains dispositifs peuvent également être attachés aux machines virtuelles à l'aide de la console Web RHEL.

Par exemple, vous pouvez augmenter la capacité de stockage d'une VM en lui attachant un nouveau disque virtuel. Cette opération est également appelée memory hot plug.

Avertissement

La suppression d'un périphérique de mémoire d'une VM, également connue sous le nom de memory hot unplug, n'est pas prise en charge dans RHEL 9, et Red Hat en déconseille fortement l'utilisation.

Conditions préalables

  • Obtenez les options requises pour le périphérique que vous avez l'intention d'attacher à une VM. Pour connaître les options disponibles pour un périphérique spécifique, utilisez la commande virt-xml --device=? pour afficher les options disponibles pour un périphérique spécifique. Par exemple :

    # virt-xml --network=?
    --network options:
    [...]
    address.unit
    boot_order
    clearxml
    driver_name
    [...]
    Copy to Clipboard Toggle word wrap

Procédure

  1. Pour attacher un périphérique à une VM, utilisez la commande virt-xml --add-device, y compris la définition du périphérique et les options requises :

    • Par exemple, la commande suivante crée une image disque newdisk qcow2 de 20 Go dans le répertoire /var/lib/libvirt/images/ et l'attache en tant que disque virtuel à la VM testguest en cours d'exécution lors du prochain démarrage de la VM :

      # virt-xml testguest --add-device --disk /var/lib/libvirt/images/newdisk.qcow2,format=qcow2,size=20
      Domain 'testguest' defined successfully.
      Changes will take effect after the domain is fully powered off.
      Copy to Clipboard Toggle word wrap
    • La procédure suivante permet d'attacher une clé USB, attachée en tant que périphérique 004 sur le bus 002 de l'hôte, à la VM testguest2 pendant qu'elle est en cours d'exécution :

      # virt-xml testguest2 --add-device --update --hostdev 002.004
      Device hotplug successful.
      Domain 'testguest2' defined successfully.
      Copy to Clipboard Toggle word wrap

      La combinaison bus-dispositif pour définir l'USB peut être obtenue en utilisant la commande lsusb.

Vérification

Pour vérifier que l'appareil a été ajouté, effectuez l'une des opérations suivantes :

  • Utilisez la commande virsh dumpxml et vérifiez si la définition XML de l'appareil a été ajoutée à la section <devices> de la configuration XML de la VM.

    Par exemple, la sortie suivante montre la configuration de la VM testguest et confirme que le périphérique de disque flash USB 002.004 a été ajouté.

    # virsh dumpxml testguest
    [...]
    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x4146'/>
        <product id='0x902e'/>
        <address bus='2' device='4'/>
      </source>
      <alias name='hostdev0'/>
      <address type='usb' bus='0' port='3'/>
    </hostdev>
    [...]
    Copy to Clipboard Toggle word wrap
  • Exécutez la VM et vérifiez que l'appareil est présent et fonctionne correctement.

Vous pouvez modifier les fonctionnalités de vos machines virtuelles (VM) en modifiant la configuration des périphériques virtuels connectés. Par exemple, si vous souhaitez optimiser les performances de vos machines virtuelles, vous pouvez modifier leurs modèles de CPU virtuels afin qu'ils correspondent mieux aux CPU des hôtes.

La procédure suivante fournit des instructions générales pour la modification des périphériques virtuels à l'aide de l'interface de ligne de commande (CLI). Certains périphériques attachés à votre VM, tels que les disques et les cartes réseau, peuvent également être modifiés à l'aide de la console Web RHEL 9.

Conditions préalables

  • Obtenez les options requises pour le périphérique que vous avez l'intention d'attacher à une VM. Pour connaître les options disponibles pour un périphérique spécifique, utilisez la commande virt-xml --device=? pour afficher les options disponibles pour un périphérique spécifique. Par exemple :
# virt-xml --network=?
--network options:
[...]
address.unit
boot_order
clearxml
driver_name
[...]
Copy to Clipboard Toggle word wrap
  • Optional: Sauvegardez la configuration XML de votre VM en utilisant virsh dumpxml vm-name et en envoyant le résultat dans un fichier. Par exemple, la procédure suivante permet de sauvegarder la configuration de votre VM testguest1 dans le fichier testguest1.xml:
# virsh dumpxml testguest1 > testguest1.xml
# cat testguest1.xml
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>testguest1</name>
  <uuid>ede29304-fe0c-4ca4-abcd-d246481acd18</uuid>
  [...]
</domain>
Copy to Clipboard Toggle word wrap

Procédure

  1. Utilisez la commande virt-xml --edit, y compris la définition de l'appareil et les options requises :

    Par exemple, ce qui suit efface la configuration <cpu> de l'arrêt testguest VM et la met à host-model:

    # virt-xml testguest --edit --cpu host-model,clearxml=yes
    Domain 'testguest' defined successfully.
    Copy to Clipboard Toggle word wrap

Vérification

Pour vérifier que l'appareil a été modifié, effectuez l'une des opérations suivantes :

  • Exécutez la VM et vérifiez si le dispositif est présent et reflète les modifications.
  • Utilisez la commande virsh dumpxml et vérifiez si la définition XML de l'appareil a été modifiée dans la configuration XML de la VM.

    Par exemple, la sortie suivante montre la configuration de la VM testguest et confirme que le mode CPU a été configuré comme host-model.

    # virsh dumpxml testguest
    [...]
    <cpu mode='host-model' check='partial'>
      <model fallback='allow'/>
    </cpu>
    [...]
    Copy to Clipboard Toggle word wrap

Résolution de problèmes

  • Si la modification d'un périphérique rend votre VM non amorçable, utilisez l'utilitaire virsh define pour restaurer la configuration XML en rechargeant le fichier de configuration XML que vous avez sauvegardé précédemment.

    # virsh define testguest.xml
    Copy to Clipboard Toggle word wrap
Note

Pour apporter de petites modifications à la configuration XML de votre VM, vous pouvez utiliser la commande virsh edit - par exemple virsh edit testguest. Cependant, n'utilisez pas cette méthode pour des modifications plus importantes, car elle est plus susceptible de casser la configuration d'une manière qui pourrait empêcher le démarrage de la VM.

Vous pouvez modifier la fonctionnalité de vos machines virtuelles (VM) en supprimant un périphérique virtuel. Par exemple, vous pouvez supprimer un disque virtuel de l'une de vos machines virtuelles s'il n'est plus nécessaire.

La procédure suivante explique comment supprimer des périphériques virtuels de vos machines virtuelles (VM) à l'aide de l'interface de ligne de commande (CLI). Certains périphériques, tels que les disques ou les cartes d'interface réseau, peuvent également être supprimés des machines virtuelles à l'aide de la console Web RHEL 9.

Conditions préalables

  • Optional: Sauvegardez la configuration XML de votre VM en utilisant virsh dumpxml vm-name et en envoyant le résultat dans un fichier. Par exemple, la procédure suivante permet de sauvegarder la configuration de votre VM testguest1 dans le fichier testguest1.xml:
# virsh dumpxml testguest1 > testguest1.xml
# cat testguest1.xml
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>testguest1</name>
  <uuid>ede29304-fe0c-4ca4-abcd-d246481acd18</uuid>
  [...]
</domain>
Copy to Clipboard Toggle word wrap

Procédure

  1. Utilisez la commande virt-xml --remove-device, en incluant une définition de l'appareil. Par exemple :

    • La procédure suivante supprime le périphérique de stockage marqué comme vdb de la VM testguest en cours d'exécution après son arrêt :

      # virt-xml testguest --remove-device --disk target=vdb
      Domain 'testguest' defined successfully.
      Changes will take effect after the domain is fully powered off.
      Copy to Clipboard Toggle word wrap
    • La procédure suivante supprime immédiatement un lecteur flash USB de la VM testguest2 en cours d'exécution :

      # virt-xml testguest2 --remove-device --update --hostdev type=usb
      Device hotunplug successful.
      Domain 'testguest2' defined successfully.
      Copy to Clipboard Toggle word wrap

Résolution de problèmes

  • Si la suppression d'un périphérique rend votre VM non amorçable, utilisez l'utilitaire virsh define pour restaurer la configuration XML en rechargeant le fichier de configuration XML que vous avez sauvegardé précédemment.

    # virsh define testguest.xml
    Copy to Clipboard Toggle word wrap

Pour modifier la fonctionnalité de votre machine virtuelle (VM), vous pouvez gérer les périphériques hôtes attachés à votre VM en utilisant la console web de Red Hat Enterprise Linux 9.

Les périphériques hôtes sont des périphériques physiques attachés au système hôte. En fonction de vos besoins, vous pouvez permettre à vos machines virtuelles d'accéder directement à ces périphériques et composants matériels.

Vous pouvez utiliser la console web pour :

Avant d'ajouter ou de modifier les périphériques attachés à votre machine virtuelle (VM), vous pouvez afficher les périphériques déjà attachés à votre VM. La procédure suivante fournit des instructions pour visualiser ces périphériques à l'aide de la console Web.

Conditions préalables

Procédure

  1. Dans l'interface Machines virtuelles, cliquez sur la VM dont vous voulez voir les informations.

    Une nouvelle page s'ouvre avec des informations détaillées sur la VM.

  2. Faites défiler jusqu'à la section Host devices.

Pour ajouter des fonctionnalités spécifiques à votre machine virtuelle (VM), vous pouvez utiliser la console web pour attacher des périphériques hôtes à la VM.

Note

La connexion de plusieurs périphériques hôtes en même temps ne fonctionne pas. Vous ne pouvez attacher qu'un seul périphérique à la fois.

Pour plus d'informations, voir les problèmes connus de RHEL 9.

Conditions préalables

  • Si vous attachez des périphériques PCI, assurez-vous que l'état de l'attribut managed de l'élément hostdev est réglé sur yes.

    Note

    Lorsque vous attachez des périphériques PCI à votre VM, n'omettez pas l'attribut managed de l'élément hostdev ou donnez-lui la valeur no. Si vous le faites, les périphériques PCI ne peuvent pas se détacher automatiquement de l'hôte lorsque vous les passez à la VM. Ils ne peuvent pas non plus se rattacher automatiquement à l'hôte lorsque vous éteignez la VM.

    En conséquence, l'hôte peut ne plus répondre ou s'arrêter de manière inattendue.

    Vous pouvez trouver le statut de l'attribut managed dans la configuration XML de votre VM. L'exemple suivant ouvre la configuration XML de la VM example-VM-1.

    # virsh edit example-VM-1
    Copy to Clipboard Toggle word wrap
  • Sauvegarder les données importantes de la VM.
  • Optional: Sauvegardez la configuration XML de votre VM. Par exemple, pour sauvegarder la VM example-VM-1:

    # virsh dumpxml example-VM-1 > example-VM-1.xml
    Copy to Clipboard Toggle word wrap
  • Le plug-in VM de la console web est installé sur votre système.

Procédure

  1. Dans l'interface Machines virtuelles, cliquez sur la VM à laquelle vous souhaitez attacher un périphérique hôte.

    Une nouvelle page s'ouvre avec une section Overview contenant des informations de base sur la VM sélectionnée et une section Console permettant d'accéder à l'interface graphique de la VM.

  2. Faites défiler jusqu'à Host devices.

    La section Host devices affiche des informations sur les périphériques attachés à la VM ainsi que des options pour Add ou Remove périphériques.

  3. Cliquez sur Ajouter un périphérique hôte.

    La boîte de dialogue Add host device apparaît.

  4. Sélectionnez le périphérique que vous souhaitez attacher à la VM.
  5. Cliquez sur Ajouter

    Le périphérique sélectionné est attaché à la VM.

Vérification

  • Exécutez la VM et vérifiez si l'appareil apparaît dans la section Host devices.

Pour libérer des ressources, modifier les fonctionnalités de votre VM, ou les deux, vous pouvez utiliser la console web pour modifier la VM et supprimer les périphériques hôtes qui ne sont plus nécessaires.

Avertissement

La suppression des périphériques hôtes USB connectés à l'aide de la console web peut échouer en raison d'une corrélation incorrecte entre les numéros de périphérique et de bus du périphérique USB.

Pour plus d'informations, voir les problèmes connus de RHEL 9.

Pour contourner le problème, supprimez la partie <hostdev> du périphérique USB de la configuration XML de la VM à l'aide de l'utilitaire virsh. L'exemple suivant ouvre la configuration XML de la VM example-VM-1:

# virsh edit <example-VM-1>
Copy to Clipboard Toggle word wrap

Conditions préalables

  • Le plug-in VM de la console web est installé sur votre système.
  • Optional: Sauvegardez la configuration XML de votre VM en utilisant virsh dumpxml example-VM-1 et en envoyant le résultat dans un fichier. Par exemple, la procédure suivante permet de sauvegarder la configuration de votre VM testguest1 dans le fichier testguest1.xml:

    # virsh dumpxml testguest1 > testguest1.xml
    # cat testguest1.xml
    <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
      <name>testguest1</name>
      <uuid>ede29304-fe0c-4ca4-abcd-d246481acd18</uuid>
      [...]
    </domain>
    Copy to Clipboard Toggle word wrap

Procédure

  1. Dans l'interface Machines virtuelles, cliquez sur la VM dont vous souhaitez supprimer un périphérique hôte.

    Une nouvelle page s'ouvre avec une section Overview contenant des informations de base sur la VM sélectionnée et une section Console permettant d'accéder à l'interface graphique de la VM.

  2. Faites défiler jusqu'à Host devices.

    La section Host devices affiche des informations sur les périphériques attachés à la VM ainsi que des options pour Add ou Remove périphériques.

  3. Cliquez sur le bouton Supprimer en regard du périphérique que vous souhaitez supprimer de la VM.

    Une boîte de dialogue de confirmation de la suppression du périphérique s'affiche.

  4. Cliquez sur Supprimer.

    L'appareil est retiré de la VM.

Résolution de problèmes

  • Si la suppression d'un périphérique hôte rend votre VM non amorçable, utilisez l'utilitaire virsh define pour restaurer la configuration XML en rechargeant le fichier de configuration XML que vous avez sauvegardé précédemment.

    # virsh define testguest1.xml
    Copy to Clipboard Toggle word wrap

14.5. Gestion des périphériques USB virtuels

Lorsque vous utilisez une machine virtuelle (VM), vous pouvez accéder à un périphérique USB, tel qu'une clé USB ou une caméra Web, qui est connecté au système hôte, et le contrôler. Dans ce scénario, le système hôte transmet le contrôle du périphérique à la machine virtuelle. C'est ce que l'on appelle un USB-passthrough.

Les sections suivantes fournissent des informations sur l'utilisation de la ligne de commande pour :

Pour attacher un périphérique USB à une machine virtuelle (VM), vous pouvez inclure les informations relatives au périphérique USB dans le fichier de configuration XML de la VM.

Conditions préalables

  • Assurez-vous que le périphérique que vous souhaitez transférer à la VM est connecté à l'hôte.

Procédure

  1. Localisez les valeurs de bus et de périphérique de l'USB que vous souhaitez connecter à la VM.

    Par exemple, la commande suivante affiche la liste des périphériques USB connectés à l'hôte. Le périphérique que nous utiliserons dans cet exemple est connecté au bus 001 en tant que périphérique 005.

    # lsusb
    [...]
    Bus 001 Device 003: ID 2567:0a2b Intel Corp.
    Bus 001 Device 005: ID 0407:6252 Kingston River 2.0
    [...]
    Copy to Clipboard Toggle word wrap
  2. Utilisez l'utilitaire virt-xml avec l'argument --add-device.

    Par exemple, la commande suivante permet d'attacher une clé USB à la VM example-VM-1.

    # virt-xml example-VM-1 --add-device --hostdev 001.005
    Domain 'example-VM-1' defined successfully.
    Copy to Clipboard Toggle word wrap
Note

Pour attacher un périphérique USB à une VM en cours d'exécution, ajoutez l'argument --update à la commande précédente.

Vérification

  • Exécutez la VM et vérifiez si l'appareil est présent et s'il fonctionne comme prévu.
  • Utilisez la commande virsh dumpxml pour vérifier si la définition XML du dispositif a été ajoutée à la section <devices> du fichier de configuration XML de la VM.

    # virsh dumpxml example-VM-1
    [...]
    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x0407'/>
        <product id='0x6252'/>
        <address bus='1' device='5'/>
      </source>
      <alias name='hostdev0'/>
      <address type='usb' bus='0' port='3'/>
    </hostdev>
    [...]
    Copy to Clipboard Toggle word wrap

Pour supprimer un périphérique USB d'une machine virtuelle (VM), vous pouvez supprimer les informations relatives au périphérique USB de la configuration XML de la VM.

Procédure

  1. Localisez les valeurs de bus et de périphérique de l'USB que vous souhaitez supprimer de la VM.

    Par exemple, la commande suivante affiche la liste des périphériques USB connectés à l'hôte. Le périphérique que nous utiliserons dans cet exemple est connecté au bus 001 en tant que périphérique 005.

    # lsusb
    [...]
    Bus 001 Device 003: ID 2567:0a2b Intel Corp.
    Bus 001 Device 005: ID 0407:6252 Kingston River 2.0
    [...]
    Copy to Clipboard Toggle word wrap
  2. Utilisez l'utilitaire virt-xml avec l'argument --remove-device.

    Par exemple, la commande suivante supprime une clé USB, attachée à l'hôte en tant que périphérique 005 sur le bus 001, de la VM example-VM-1.

    # virt-xml example-VM-1 --remove-device --hostdev 001.005
    Domain 'example-VM-1' defined successfully.
    Copy to Clipboard Toggle word wrap
Note

Pour supprimer un périphérique USB d'une VM en cours d'exécution, ajoutez l'argument --update à la commande précédente.

Vérification

  • Exécutez la VM et vérifiez si l'appareil a été supprimé de la liste des appareils.

14.6. Gestion des lecteurs optiques virtuels

Lorsque vous utilisez une machine virtuelle (VM), vous pouvez accéder aux informations stockées dans une image ISO sur l'hôte. Pour ce faire, attachez l'image ISO à la VM en tant que lecteur optique virtuel, tel qu'un lecteur de CD ou de DVD.

Les sections suivantes fournissent des informations sur l'utilisation de la ligne de commande pour :

14.6.1. Attacher des lecteurs optiques aux machines virtuelles

Pour attacher une image ISO en tant que lecteur optique virtuel, modifiez le fichier de configuration XML de la machine virtuelle (VM) et ajoutez le nouveau lecteur.

Conditions préalables

  • Vous devez stocker et copier le chemin d'accès de l'image ISO sur la machine hôte.

Procédure

  • Utilisez l'utilitaire virt-xml avec l'argument --add-device:

    Par exemple, la commande suivante attache l'image ISO example-ISO-name, stockée dans le répertoire /home/username/Downloads, à la VM example-VM-name.

    # virt-xml example-VM-name --add-device --disk /home/username/Downloads/example-ISO-name.iso,device=cdrom
    Domain 'example-VM-name' defined successfully.
    Copy to Clipboard Toggle word wrap

Vérification

  • Exécutez la VM et vérifiez si l'appareil est présent et s'il fonctionne comme prévu.

Vous pouvez utiliser la console web pour insérer un CD-ROM dans une machine virtuelle (VM) en cours d'exécution sans spécifier le support.

Procédure

  1. Arrêtez la VM.
  2. Attacher un périphérique CD-ROM virtuel sans spécifier d'image source.

    # virt-xml vmname --add-device --disk target.dev=sda,device=cdrom
    Copy to Clipboard Toggle word wrap
  3. Exécutez la VM.
  4. Ouvrez la console web et dans l'interface Machines virtuelles, cliquez sur la VM à laquelle vous voulez attacher un CD-ROM.
  5. Faites défiler jusqu'à Disques.

    La section Disques affiche des informations sur les disques affectés à la VM, ainsi que des options permettant d'accéder à Add ou Edit.

  6. Cliquez sur l'option Insérer pour le périphérique cdrom.

  7. Choisissez une adresse Source pour le fichier que vous souhaitez joindre :

    • Custom Path: Le fichier se trouve dans un répertoire personnalisé sur la machine hôte.
    • Use existing: Le fichier se trouve dans les pools de stockage que vous avez créés.
  8. Cliquez sur Insérer.

Vérification

  • Dans l'interface des machines virtuelles, le fichier apparaîtra dans la section Disks.

Pour remplacer une image ISO attachée en tant que lecteur optique virtuel à une machine virtuelle (VM), modifiez le fichier de configuration XML de la VM et spécifiez le remplacement.

Conditions préalables

  • Vous devez stocker l'image ISO sur la machine hôte.
  • Vous devez connaître le chemin d'accès à l'image ISO.

Procédure

  1. Localisez le périphérique cible sur lequel le CD-ROM est attaché à la VM. Vous trouverez cette information dans le fichier de configuration XML de la VM.

    Par exemple, la commande suivante affiche le fichier de configuration XML de la VM example-VM-name Où le périphérique cible pour le CD-ROM est sda.

    # virsh dumpxml example-VM-name
    ...
    <disk>
      ...
      <source file='$(/home/username/Downloads/example-ISO-name.iso)'/>
      <target dev='sda' bus='sata'/>
      ...
    </disk>
    ...
    Copy to Clipboard Toggle word wrap
  2. Utilisez l'utilitaire virt-xml avec l'argument --edit.

    Par exemple, la commande suivante remplace l'image ISO example-ISO-name, attachée à la VM example-VM-name à la cible sda, par l'image ISO example-ISO-name-2 stockée dans le répertoire /dev/cdrom.

    # virt-xml example-VM-name --edit target=sda --disk /dev/cdrom/example-ISO-name-2.iso
    Domain 'example-VM-name' defined successfully.
    Copy to Clipboard Toggle word wrap

Vérification

  • Exécutez la VM et vérifiez si l'appareil est remplacé et fonctionne comme prévu.

Pour supprimer une image ISO d'un lecteur optique virtuel attaché à une machine virtuelle (VM), modifiez le fichier de configuration XML de la VM.

Procédure

  1. Localisez le périphérique cible sur lequel le CD-ROM est attaché à la VM. Vous trouverez cette information dans le fichier de configuration XML de la VM.

    Par exemple, la commande suivante affiche le fichier de configuration XML de la VM example-VM-name, où le périphérique cible pour le CD-ROM est sda.

    # virsh dumpxml example-VM-name
    ...
    <disk>
      ...
      <source file='$(/home/username/Downloads/example-ISO-name.iso)'/>
      <target dev='sda' bus='sata'/>
      ...
    </disk>
    ...
    Copy to Clipboard Toggle word wrap
  2. Utilisez l'utilitaire virt-xml avec l'argument --edit.

    Par exemple, la commande suivante supprime l'image ISO example-ISO-name du lecteur de CD connecté à la VM example-VM-name.

    # virt-xml example-VM-name --edit target=sda --disk path=
    Domain 'example-VM-name' defined successfully.
    Copy to Clipboard Toggle word wrap

Vérification

  • Exécutez la VM et vérifiez que l'image n'est plus disponible.

Pour supprimer un lecteur optique attaché à une machine virtuelle (VM), modifiez le fichier de configuration XML de la VM.

Procédure

  1. Localisez le périphérique cible sur lequel le CD-ROM est attaché à la VM. Vous trouverez cette information dans le fichier de configuration XML de la VM.

    Par exemple, la commande suivante affiche le fichier de configuration XML de la VM example-VM-name, où le périphérique cible pour le CD-ROM est sda.

    # virsh dumpxml example-VM-name
    ...
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='sda' bus='sata'/>
      ...
    </disk>
    ...
    Copy to Clipboard Toggle word wrap
  2. Utilisez l'utilitaire virt-xml avec l'argument --remove-device.

    Par exemple, la commande suivante supprime le lecteur optique attaché en tant que cible sda de la VM example-VM-name.

    # virt-xml example-VM-name --remove-device --disk target=sda
    Domain 'example-VM-name' defined successfully.
    Copy to Clipboard Toggle word wrap

Vérification

  • Confirmez que le dispositif n'est plus répertorié dans le fichier de configuration XML de la VM.

Vous pouvez utiliser la console web pour éjecter un périphérique CD-ROM d'une machine virtuelle (VM) en cours d'exécution.

Procédure

  1. Dans l'interface Machines virtuelles, cliquez sur la VM dont vous souhaitez supprimer le CD-ROM.
  2. Faites défiler jusqu'à Disques.

    La section Disques affiche des informations sur les disques affectés à la VM, ainsi que des options permettant d'accéder à Add ou Edit.

  3. Cliquez sur l'option Ejecter pour le périphérique cdrom.

    La boîte de dialogue Eject media from VM? s'ouvre.

  4. Cliquez sur Ejecter.

Vérification

  • Dans l'interface des machines virtuelles, le fichier joint n'est plus affiché dans la section Disks.

14.7. Gestion des dispositifs SR-IOV

Un périphérique virtuel émulé utilise souvent plus de CPU et de mémoire qu'un périphérique réseau matériel. Cela peut limiter les performances d'une machine virtuelle (VM). Toutefois, si l'un des périphériques de votre hôte de virtualisation prend en charge la virtualisation d'E/S à racine unique (SR-IOV), vous pouvez utiliser cette fonctionnalité pour améliorer les performances du périphérique et, éventuellement, les performances globales de vos machines virtuelles.

14.7.1. Qu'est-ce que le SR-IOV ?

La virtualisation des E/S à racine unique (SR-IOV) est une spécification qui permet à un seul périphérique PCI Express (PCIe) de présenter au système hôte plusieurs périphériques PCI distincts, appelés virtual functions (VF). Chacun de ces périphériques :

  • Est capable de fournir un service identique ou similaire à celui de l'appareil PCIe d'origine.
  • Apparaît à une adresse différente sur le bus PCI de l'hôte.
  • Peut être affecté à une VM différente en utilisant l'affectation VFIO.

Par exemple, un seul périphérique réseau compatible SR-IOV peut présenter des VF à plusieurs VM. Bien que tous les VF utilisent la même carte physique, la même connexion réseau et le même câble réseau, chaque VM contrôle directement son propre périphérique réseau matériel et n'utilise aucune ressource supplémentaire de l'hôte.

Comment fonctionne le SR-IOV

La fonctionnalité SR-IOV est possible grâce à l'introduction des fonctions PCIe suivantes :

  • Physical functions (PFs) - Une fonction PCIe qui fournit la fonctionnalité de son dispositif (par exemple la mise en réseau) à l'hôte, mais qui peut également créer et gérer un ensemble de VF. Chaque périphérique compatible SR-IOV possède un ou plusieurs PF.
  • Virtual functions (VFs) - Fonctions PCIe légères qui se comportent comme des dispositifs indépendants. Chaque VF est dérivé d'un PF. Le nombre maximum de VF qu'un périphérique peut avoir dépend du matériel du périphérique. Chaque VF ne peut être attribué qu'à une seule VM à la fois, mais plusieurs VF peuvent être attribués à une VM.

Les VM reconnaissent les VF comme des périphériques virtuels. Par exemple, un VF créé par un périphérique réseau SR-IOV apparaît comme une carte réseau pour une VM à laquelle il est assigné, de la même manière qu'une carte réseau physique apparaît au système hôte.

Figure 14.1. Architecture SR-IOV

Avantages

Les principaux avantages de l'utilisation de VF SR-IOV plutôt que de dispositifs émulés sont les suivants :

  • Amélioration des performances
  • Réduction de l'utilisation des ressources de l'unité centrale et de la mémoire de l'hôte

Par exemple, un VF attaché à une VM en tant que vNIC a des performances presque identiques à celles d'un NIC physique, et bien meilleures que celles des NIC paravirtualisés ou émulés. En particulier, lorsque plusieurs VF sont utilisés simultanément sur un même hôte, les avantages en termes de performances peuvent être significatifs.

Inconvénients

  • Pour modifier la configuration d'un PF, vous devez d'abord changer le nombre de VFs exposés par le PF à zéro. Par conséquent, vous devez également supprimer les périphériques fournis par ces VFs de la VM à laquelle ils sont assignés.
  • Une VM à laquelle sont attachés des périphériques assignés par VFIO, y compris des VF SR-IOV, ne peut pas être migrée vers un autre hôte. Dans certains cas, vous pouvez contourner cette limitation en associant le périphérique attribué à un périphérique émulé. Par exemple, vous pouvez lier un VF de réseau attribué à un vNIC émulé, et retirer le VF avant la migration.
  • En outre, les périphériques attribués par VFIO nécessitent l'épinglage de la mémoire de la VM, ce qui augmente la consommation de mémoire de la VM et empêche l'utilisation du ballooning de la mémoire sur la VM.

Pour attacher un périphérique réseau SR-IOV à une machine virtuelle (VM) sur un hôte Intel ou AMD, vous devez créer une fonction virtuelle (VF) à partir d'une interface réseau compatible SR-IOV sur l'hôte et affecter la VF en tant que périphérique à une VM spécifiée. Pour plus de détails, voir les instructions suivantes.

Conditions préalables

  • L'unité centrale et le micrologiciel de votre hôte prennent en charge l'unité de gestion de la mémoire d'E/S (IOMMU).

    • Si vous utilisez un processeur Intel, il doit supporter la technologie de virtualisation Intel pour Directed I/O (VT-d).
    • Si vous utilisez un processeur AMD, il doit prendre en charge la fonction AMD-Vi.
  • Le système hôte utilise le service de contrôle d'accès (ACS) pour assurer l'isolation de l'accès direct à la mémoire (DMA) pour la topologie PCIe. Vérifiez ce point auprès du fournisseur du système.

    Pour plus d'informations, voir Considérations matérielles pour l'implémentation du SR-IOV.

  • Le périphérique réseau physique prend en charge SR-IOV. Pour vérifier si des périphériques réseau de votre système prennent en charge SR-IOV, utilisez la commande lspci -v et recherchez Single Root I/O Virtualization (SR-IOV) dans le résultat.

    # lspci -v
    [...]
    02:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
    	Subsystem: Intel Corporation Gigabit ET Dual Port Server Adapter
    	Flags: bus master, fast devsel, latency 0, IRQ 16, NUMA node 0
    	Memory at fcba0000 (32-bit, non-prefetchable) [size=128K]
    [...]
    	Capabilities: [150] Alternative Routing-ID Interpretation (ARI)
    	Capabilities: [160] Single Root I/O Virtualization (SR-IOV)
    	Kernel driver in use: igb
    	Kernel modules: igb
    [...]
    Copy to Clipboard Toggle word wrap
  • L'interface réseau de l'hôte que vous voulez utiliser pour créer des VF est en cours d'exécution. Par exemple, pour activer l'interface eth1 et vérifier qu'elle fonctionne :

    # ip link set eth1 up
    # ip link show eth1
    8: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000
       link/ether a0:36:9f:8f:3f:b8 brd ff:ff:ff:ff:ff:ff
       vf 0 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 1 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 2 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 3 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
    Copy to Clipboard Toggle word wrap
  • Pour que l'attribution de périphériques SR-IOV fonctionne, la fonction IOMMU doit être activée dans le BIOS et le noyau de l'hôte. Pour ce faire, il faut

    • Sur un hôte Intel, activez VT-d :

      1. Régénérer la configuration GRUB avec les paramètres intel_iommu=on et iommu=pt:

        # grubby --args="intel_iommu=on iommu=pt" --update-kernel=ALL
        Copy to Clipboard Toggle word wrap
      2. Redémarrer l'hôte.
    • Sur un hôte AMD, activez AMD-Vi :

      1. Régénérer la configuration GRUB avec le paramètre iommu=pt:

        # grubby --args="iommu=pt" --update-kernel=ALL
        Copy to Clipboard Toggle word wrap
      2. Redémarrer l'hôte.

Procédure

  1. Optional: Confirmez le nombre maximum de VF que votre périphérique de réseau peut utiliser. Pour ce faire, utilisez la commande suivante et remplacez eth1 par votre périphérique réseau compatible SR-IOV.

    # cat /sys/class/net/eth1/device/sriov_totalvfs
    7
    Copy to Clipboard Toggle word wrap
  2. La commande suivante permet de créer une fonction virtuelle (VF) :

    # echo VF-number > /sys/class/net/network-interface/device/sriov_numvfs
    Copy to Clipboard Toggle word wrap

    Dans la commande, remplacez :

    • VF-number avec le nombre de FV que vous souhaitez créer sur la CP.
    • network-interface avec le nom de l'interface réseau pour laquelle les VF seront créés.

    L'exemple suivant crée 2 VF à partir de l'interface réseau eth1 :

    # echo 2 > /sys/class/net/eth1/device/sriov_numvfs
    Copy to Clipboard Toggle word wrap
  3. Vérifier que les VF ont été ajoutés :

    # lspci | grep Ethernet
    82:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
    82:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
    82:10.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
    82:10.2 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
    Copy to Clipboard Toggle word wrap
  4. Rendez les VF créés persistants en créant une règle udev pour l'interface réseau que vous avez utilisée pour créer les VF. Par exemple, pour l'interface eth1, créez le fichier /etc/udev/rules.d/eth1.rules et ajoutez la ligne suivante :

    ACTION=="add", SUBSYSTEM=="net", ENV{ID_NET_DRIVER}=="ixgbe", ATTR{device/sriov_numvfs}="2"
    Copy to Clipboard Toggle word wrap

    Cela garantit que les deux VF qui utilisent le pilote ixgbe seront automatiquement disponibles pour l'interface eth1 au démarrage de l'hôte. Si vous n'avez pas besoin de périphériques SR-IOV persistants, ignorez cette étape.

    Avertissement

    Actuellement, le paramètre décrit ci-dessus ne fonctionne pas correctement lorsque l'on tente de rendre les VF persistants sur les adaptateurs Broadcom NetXtreme II BCM57810. En outre, l'attachement de VF basés sur ces adaptateurs à des machines virtuelles Windows n'est actuellement pas fiable.

  5. Branchez à chaud l'un des périphériques d'interface VF nouvellement ajoutés à une VM en cours d'exécution.

    # virsh attach-interface testguest1 hostdev 0000:82:10.0 --managed --live --config
    Copy to Clipboard Toggle word wrap

Vérification

  • Si la procédure réussit, le système d'exploitation invité détecte une nouvelle carte d'interface réseau.

14.7.3. Dispositifs pris en charge pour l'affectation SR-IOV

Tous les périphériques ne peuvent pas être utilisés pour le SR-IOV. Les périphériques suivants ont été testés et vérifiés comme étant compatibles avec SR-IOV dans RHEL 9.

Dispositifs de mise en réseau

  • Intel 82599ES 10 Gigabit Ethernet Controller - utilise le pilote ixgbe
  • Intel Ethernet Controller XL710 Series - utilise le pilote i40e
  • Intel Ethernet Network Adapter XXV710 - utilise le pilote i40e
  • Intel 82576 Gigabit Ethernet Controller - utilise le pilote igb
  • Broadcom NetXtreme II BCM57810 - utilise le pilote bnx2x
  • Contrôleur Ethernet E810-C pour QSFP - utilise le pilote ice
  • SFC9220 10/40G Ethernet Controller - utilise le pilote sfc
  • Contrôleur FastLinQ QL41000 Series 10/25/40/50GbE - utilise le pilote qede
  • Cartes d'adaptateur Ethernet Mellanox ConnectX-5
  • Famille Mellanox MT2892 [ConnectX-6 Dx]

En utilisant la fonction vfio-ccw, vous pouvez attribuer des périphériques de stockage à accès direct (DASD) en tant que périphériques médiatisés à vos machines virtuelles (VM) sur des hôtes IBM Z. Cela permet par exemple à la VM d'accéder à un ensemble de données z/OS ou de fournir des DASD assignés à une machine z/OS. Cela permet par exemple à la VM d'accéder à un ensemble de données z/OS ou de fournir les DASD attribués à une machine z/OS.

Conditions préalables

  • Vous disposez d'un système doté d'une architecture matérielle IBM Z compatible avec le protocole FICON.
  • Vous disposez d'une VM cible d'un système d'exploitation Linux.
  • Le paquetage driverctl est installé.

    # dnf install driverctl
    Copy to Clipboard Toggle word wrap
  • Les modules nécessaires du noyau vfio ont été chargés sur l'hôte.

    # lsmod | grep vfio
    Copy to Clipboard Toggle word wrap

    La sortie de cette commande doit contenir les modules suivants :

    • vfio_ccw
    • vfio_mdev
    • vfio_iommu_type1
  • Vous disposez d'un périphérique DASD de rechange destiné à l'usage exclusif de la VM et vous connaissez l'identifiant de ce périphérique.

    La procédure suivante utilise 0.0.002c comme exemple. Lors de l'exécution des commandes, remplacez 0.0.002c par l'identifiant de votre périphérique DASD.

Procédure

  1. Obtenir l'identifiant du sous-canal du dispositif DASD.

    # lscss -d 0.0.002c
    Device   Subchan.  DevType CU Type Use  PIM PAM POM  CHPIDs
    ----------------------------------------------------------------------
    0.0.002c 0.0.29a8  3390/0c 3990/e9 yes  f0  f0  ff   02111221 00000000
    Copy to Clipboard Toggle word wrap

    Dans cet exemple, l'identifiant du sous-canal est détecté comme étant 0.0.29a8. Dans les commandes suivantes de cette procédure, remplacez 0.0.29a8 par l'identifiant de sous-canal détecté pour votre appareil.

  2. Si la commande lscss de l'étape précédente n'a affiché que l'en-tête et aucune information sur le périphérique, procédez comme suit :

    1. Retirer l'appareil de la liste cio_ignore.

      # cio_ignore -r 0.0.002c
      Copy to Clipboard Toggle word wrap
    2. Dans le système d'exploitation invité, modifiez la ligne de commande du noyau de la VM et ajoutez l'identifiant du périphérique avec une marque ! à la ligne qui commence par cio_ignore=, s'il n'est pas déjà présent.

      cio_ignore=all,!condev,!0.0.002c
      Copy to Clipboard Toggle word wrap
    3. Répétez l'étape 1 sur l'hôte pour obtenir l'identifiant du sous-canal.
  3. Lier le sous-canal au pilote vfio_ccw passthrough.

    # driverctl -b css set-override 0.0.29a8 vfio_ccw
    Copy to Clipboard Toggle word wrap
    Note

    Cela lie le sous-canal 0.0.29a8 à vfio_ccw de manière persistante, ce qui signifie que le DASD ne sera pas utilisable sur l'hôte. Si vous devez utiliser le périphérique sur l'hôte, vous devez d'abord supprimer la liaison automatique à 'vfio_ccw' et lier à nouveau le sous-canal au pilote par défaut :

    # driverctl -b css unset-override 0.0.29a8

  4. Définir et démarrer le dispositif à médiation DASD.

    # cat nodedev.xml
    <device>
        <parent>css_0_0_29a8</parent>
        <capability type="mdev">
            <type id="vfio_ccw-io"/>
        </capability>
    </device>
    
    # virsh nodedev-define nodedev.xml
    Node device 'mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8' defined from 'nodedev.xml'
    
    # virsh nodedev-start mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8
    Device mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8 started
    Copy to Clipboard Toggle word wrap
  5. Arrêter la VM, si elle est en cours d'exécution.
  6. Affichez l'UUID de l'appareil précédemment défini et enregistrez-le pour l'étape suivante.

    # virsh nodedev-dumpxml mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8
    
    <device>
      <name>mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8</name>
      <parent>css_0_0_29a8</parent>
      <capability type='mdev'>
        <type id='vfio_ccw-io'/>
        <uuid>30820a6f-b1a5-4503-91ca-0c10ba12345a</uuid>
        <iommuGroup number='0'/>
        <attr name='assign_adapter' value='0x02'/>
        <attr name='assign_domain' value='0x002b'/>
      </capability>
    </device>
    Copy to Clipboard Toggle word wrap
  7. Attachez le dispositif médiatisé à la VM. Pour ce faire, utilisez l'utilitaire virsh edit pour modifier la configuration XML de la VM, ajoutez la section suivante au XML et remplacez la valeur uuid par l'UUID que vous avez obtenu à l'étape précédente.

    <hostdev mode='subsystem' type='mdev' model='vfio-ccw'>
      <source>
        <address uuid="30820a6f-b1a5-4503-91ca-0c10ba12345a"/>
      </source>
    </hostdev>
    Copy to Clipboard Toggle word wrap
  8. Optional: Configurer le périphérique médiatisé pour qu'il démarre automatiquement au démarrage de l'hôte.

    # virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8
    Copy to Clipboard Toggle word wrap

Vérification

  1. Assurez-vous que le dispositif médiatisé est correctement configuré.

    # virsh nodedev-info mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8
    Name:           mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8
    Parent:         css_0_0_0121
    Active:         yes
    Persistent:     yes
    Autostart:      yes
    Copy to Clipboard Toggle word wrap
  2. Obtenez l'identifiant que libvirt a attribué au périphérique DASD médiatisé. Pour ce faire, affichez la configuration XML de la VM et recherchez un périphérique vfio-ccw.

    # virsh dumpxml vm-name
    
    <domain>
    [...]
        <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-ccw'>
          <source>
            <address uuid='10620d2f-ed4d-437b-8aff-beda461541f9'/>
          </source>
          <alias name='hostdev0'/>
          <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0009'/>
        </hostdev>
    [...]
    </domain>
    Copy to Clipboard Toggle word wrap

    Dans cet exemple, l'identifiant attribué à l'appareil est 0.0.0009.

  3. Démarrez la VM et connectez-vous à son système d'exploitation invité.
  4. Dans le système d'exploitation invité, vérifiez que le périphérique DASD est répertorié. Par exemple, dans le système d'exploitation invité, confirmez que le périphérique DASD est répertorié :

    # lscss | grep 0.0.0009
    0.0.0009 0.0.0007  3390/0c 3990/e9      f0  f0  ff   12212231 00000000
    Copy to Clipboard Toggle word wrap
  5. Dans le système d'exploitation invité, mettez le périphérique en ligne. Par exemple :

    # chccwdev -e 0.0009
    Setting device 0.0.0009 online
    Done
    Copy to Clipboard Toggle word wrap

Pour forcer la machine virtuelle (VM) à effectuer une action spécifique lorsqu'elle ne répond plus, vous pouvez attacher des périphériques de surveillance virtuels à une VM.

Conditions préalables

Procédure

  1. Dans l'interface de ligne de commande, installez le service watchdog.

    # dnf install watchdog

  2. Arrêtez la VM.
  3. Ajoutez le service watchdog à la VM.

    # virt-xml vmname --add-device --watchdog action=reset --update

  4. Exécutez la VM.
  5. Ouvrez la console web et dans l'interface Machines virtuelles de la console web, cliquez sur la VM à laquelle vous voulez ajouter le dispositif de surveillance.
  6. Cliquez sur ajouter à côté du champ Watchdog dans le volet Vue d'ensemble.

    La boîte de dialogue Add watchdog device type apparaît.

  7. Sélectionnez l'action que vous souhaitez que le dispositif de surveillance effectue si la VM cesse de répondre.

  8. Cliquez sur Ajouter.

Vérification

  • L'action que vous avez sélectionnée est visible à côté du champ Watchdog dans le volet Vue d'ensemble.

En utilisant le pilote de périphérique vfio-pci, vous pouvez affecter des périphériques PCI en mode pass-through à vos machines virtuelles (VM) sur les hôtes IBM Z. Cela permet par exemple à la VM d'utiliser des disques flash NVMe pour gérer les bases de données.

Conditions préalables

  • Vous disposez d'un système hôte doté de l'architecture matérielle IBM Z.
  • Vous disposez d'une VM cible du système d'exploitation Linux.
  • Les modules nécessaires du noyau vfio ont été chargés sur l'hôte.

    # lsmod | grep vfio
    Copy to Clipboard Toggle word wrap

    La sortie de cette commande doit contenir les modules suivants :

    • vfio_pci
    • vfio_pci_core
    • vfio_iommu_type1

Procédure

  1. Obtenez l'identifiant de l'adresse PCI de l'appareil que vous souhaitez utiliser.

    # lspci -nkD
    
    0000:00:00.0 0000: 1014:04ed
    	Kernel driver in use: ism
    	Kernel modules: ism
    0001:00:00.0 0000: 1014:04ed
    	Kernel driver in use: ism
    	Kernel modules: ism
    0002:00:00.0 0200: 15b3:1016
    	Subsystem: 15b3:0062
    	Kernel driver in use: mlx5_core
    	Kernel modules: mlx5_core
    0003:00:00.0 0200: 15b3:1016
    	Subsystem: 15b3:0062
    	Kernel driver in use: mlx5_core
    	Kernel modules: mlx5_core
    Copy to Clipboard Toggle word wrap
  2. Ouvrez la configuration XML de la VM à laquelle vous souhaitez attacher le périphérique PCI.

    # virsh edit vm-name
    Copy to Clipboard Toggle word wrap
  3. Ajoutez la configuration suivante <hostdev> à la section <devices> du fichier XML.

    Remplacez les valeurs de la ligne address par l'adresse PCI de votre appareil. Par exemple, si l'adresse de l'appareil est 0003:00:00.0, utilisez la configuration suivante :

    <hostdev mode="subsystem" type="pci" managed="yes">
      <driver name="vfio"/>
       <source>
        <address domain="0x0003" bus="0x00" slot="0x00" function="0x0"/>
       </source>
       <address type="pci"/>
    </hostdev>
    Copy to Clipboard Toggle word wrap
  4. Optional: Pour modifier la façon dont le système d'exploitation invité détectera le périphérique PCI, vous pouvez également ajouter un sous-élément <zpci> à l'élément <address>. Dans la ligne <zpci>, vous pouvez ajuster les valeurs uid et fid, ce qui modifie l'adresse PCI et l'ID de fonction du périphérique dans le système d'exploitation invité.

    <hostdev mode="subsystem" type="pci" managed="yes">
      <driver name="vfio"/>
       <source>
        <address domain="0x0003" bus="0x00" slot="0x00" function="0x0"/>
       </source>
       <address type="pci">
         <zpci uid="0x0008" fid="0x001807"/>
       </address>
    </hostdev>
    Copy to Clipboard Toggle word wrap

    Dans cet exemple :

    • uid="0x0008" définit l'adresse PCI de domaine du périphérique dans la VM à 0008:00:00.0.
    • fid="0x001807" définit la valeur de l'emplacement de l'appareil à 0x001807. Par conséquent, la configuration du périphérique dans le système de fichiers de la VM est enregistrée à l'adresse /sys/bus/pci/slots/00001087/address.

      Si ces valeurs ne sont pas spécifiées, libvirt les configure automatiquement.

  5. Sauvegarder la configuration XML.
  6. Si la VM est en cours d'exécution, arrêtez-la.

    # virsh shutdown vm-name
    Copy to Clipboard Toggle word wrap

Vérification

  1. Démarrez la VM et connectez-vous à son système d'exploitation invité.
  2. Dans le système d'exploitation invité, vérifiez que le périphérique PCI est répertorié.

    Par exemple, si l'adresse de l'appareil est 0003:00:00.0, utilisez la commande suivante :

    # lspci -nkD | grep 0003:00:00.0
    
    0003:00:00.0 8086:9a09 (rev 01)
    Copy to Clipboard Toggle word wrap

Chapitre 15. Gestion du stockage pour les machines virtuelles

Une machine virtuelle (VM), tout comme une machine physique, nécessite un espace de stockage pour les données, les programmes et les fichiers système. En tant qu'administrateur de machines virtuelles, vous pouvez attribuer à vos machines virtuelles un espace de stockage physique ou en réseau en tant qu'espace de stockage virtuel. Vous pouvez également modifier la façon dont le stockage est présenté à une VM, quel que soit le matériel sous-jacent.

Les sections suivantes fournissent des informations sur les différents types de stockage de VM, leur fonctionnement et la manière dont vous pouvez les gérer à l'aide de l'interface CLI ou de la console Web.

15.1. Comprendre le stockage des machines virtuelles

Si vous êtes novice en matière de stockage de machines virtuelles (VM) ou si vous n'êtes pas sûr de son fonctionnement, les sections suivantes fournissent une vue d'ensemble des différents composants du stockage de VM, de son fonctionnement, des bases de la gestion et des solutions prises en charge fournies par Red Hat.

Vous pouvez trouver des informations sur :

15.1.1. Introduction aux pools de stockage

Un pool de stockage est un fichier, un répertoire ou un périphérique de stockage, géré par libvirt pour fournir un stockage aux machines virtuelles (VM). Vous pouvez diviser les pools de stockage en volumes de stockage, qui stockent les images des machines virtuelles ou sont attachés aux machines virtuelles en tant que stockage supplémentaire.

En outre, plusieurs machines virtuelles peuvent partager le même pool de stockage, ce qui permet une meilleure allocation des ressources de stockage.

  • Les pools de stockage peuvent être persistants ou transitoires :

    • Un pool de stockage persistant survit à un redémarrage du système de la machine hôte. Vous pouvez utiliser le site virsh pool-define pour créer un pool de stockage persistant.
    • Un pool de stockage transitoire n'existe que jusqu'au redémarrage de l'hôte. Vous pouvez utiliser la commande virsh pool-create pour créer un pool de stockage transitoire.

Types de stockage du pool de stockage

Les pools de stockage peuvent être locaux ou en réseau (partagés) :

  • Local storage pools

    Les pools de stockage locaux sont attachés directement au serveur hôte. Ils comprennent les répertoires locaux, les disques directement attachés, les partitions physiques et les groupes de volumes LVM (Logical Volume Management) sur les périphériques locaux.

    Les pools de stockage locaux sont utiles pour le développement, les tests et les petits déploiements qui ne nécessitent pas de migration ou qui comportent un grand nombre de machines virtuelles.

  • Networked (shared) storage pools

    Les pools de stockage en réseau comprennent des périphériques de stockage partagés sur un réseau à l'aide de protocoles standard.

15.1.2. Introduction aux volumes de stockage

Les pools de stockage sont divisés en storage volumes. Les volumes de stockage sont des abstractions de partitions physiques, de volumes logiques LVM, d'images de disque basées sur des fichiers et d'autres types de stockage gérés par libvirt. Les volumes de stockage sont présentés aux machines virtuelles comme des périphériques de stockage locaux, tels que des disques, quel que soit le matériel sous-jacent.

Sur la machine hôte, un volume de stockage est désigné par son nom et par l'identifiant du pool de stockage dont il provient. Sur la ligne de commande virsh, cela prend la forme suivante --pool storage_pool volume_name.

Par exemple, pour afficher des informations sur un volume nommé firstimage dans le pool guest_images.

# virsh vol-info --pool guest_images firstimage
  Name:             firstimage
  Type:             block
  Capacity:         20.00 GB
  Allocation:       20.00 GB
Copy to Clipboard Toggle word wrap

15.1.3. Gestion du stockage à l'aide de libvirt

En utilisant le protocole à distance libvirt, vous pouvez gérer tous les aspects du stockage des VM. Ces opérations peuvent également être effectuées sur un hôte distant. Par conséquent, une application de gestion qui utilise libvirt, telle que la console web RHEL, peut être utilisée pour effectuer toutes les tâches nécessaires à la configuration du stockage d'une VM.

Vous pouvez utiliser l'API libvirt pour demander la liste des volumes d'un pool de stockage ou pour obtenir des informations sur la capacité, l'allocation et le stockage disponible dans ce pool de stockage. Pour les pools de stockage qui le prennent en charge, vous pouvez également utiliser l'API libvirt pour créer, cloner, redimensionner et supprimer des volumes de stockage. En outre, vous pouvez utiliser l'API libvirt pour télécharger des données vers des volumes de stockage, télécharger des données à partir de volumes de stockage ou effacer des données à partir de volumes de stockage.

15.1.4. Vue d'ensemble de la gestion du stockage

Pour illustrer les options disponibles pour la gestion du stockage, l'exemple suivant présente un exemple de serveur NFS qui utilise mount -t nfs nfs.example.com:/path/to/share /path/to/data.

En tant qu'administrateur de stockage :

  • Vous pouvez définir un pool de stockage NFS sur l'hôte de virtualisation pour décrire le chemin du serveur exporté et le chemin cible du client. Par conséquent, libvirt peut monter le stockage soit automatiquement lorsque libvirt est démarré, soit au besoin lorsque libvirt est en cours d'exécution.
  • Vous pouvez simplement ajouter le pool de stockage et le volume de stockage à une VM par son nom. Il n'est pas nécessaire d'ajouter le chemin cible au volume. Par conséquent, même si le chemin d'accès du client cible change, cela n'affecte pas la VM.
  • Vous pouvez configurer les pools de stockage pour qu'ils démarrent automatiquement. Dans ce cas, libvirt monte automatiquement le disque partagé NFS dans le répertoire spécifié lors du démarrage de libvirt. libvirt monte le partage dans le répertoire spécifié, de la même manière que la commande mount nfs.example.com:/path/to/share /vmdata.
  • Vous pouvez interroger les chemins d'accès aux volumes de stockage à l'aide de l'API libvirt. Ces volumes de stockage sont essentiellement les fichiers présents sur le disque partagé NFS. Vous pouvez ensuite copier ces chemins dans la section de la définition XML d'une VM qui décrit le stockage source pour les périphériques de bloc de la VM.
  • Dans le cas de NFS, vous pouvez utiliser une application qui utilise l'API libvirt pour créer et supprimer des volumes de stockage dans le pool de stockage (fichiers dans le partage NFS) jusqu'à la limite de la taille du pool (capacité de stockage du partage).

    Notez que tous les types de pools de stockage ne prennent pas en charge la création et la suppression de volumes.

  • Vous pouvez arrêter un pool de stockage lorsqu'il n'est plus nécessaire. L'arrêt d'un pool de stockage (pool-destroy) annule l'opération de démarrage, dans ce cas, le démontage du partage NFS. Les données du partage ne sont pas modifiées par l'opération de destruction, malgré ce que le nom de la commande suggère. Pour plus d'informations, voir man virsh.

Supported storage pool types

Voici une liste des types de pools de stockage pris en charge par RHEL :

  • Pools de stockage basés sur un répertoire
  • Pools de stockage sur disque
  • Pools de stockage basés sur des partitions
  • pools de stockage basés sur iSCSI
  • Pools de stockage basés sur LVM
  • Pools de stockage basés sur NFS
  • Pools de stockage basés sur SCSI avec périphériques vHBA
  • Pools de stockage basés sur des chemins multiples
  • Pools de stockage basés sur les BDR

Unsupported storage pool types

Voici une liste des types de pools de stockage libvirt non pris en charge par RHEL :

  • Pools de stockage basés sur des chiens de berger
  • Pools de stockage basés sur Vstorage
  • Pools de stockage basés sur ZFS
  • pools de stockage iSCSI-direct
  • Pools de stockage GlusterFS

Vous pouvez utiliser le CLI pour gérer les aspects suivants de vos pools de stockage afin d'affecter du stockage à vos machines virtuelles (VM) :

En utilisant l'interface de commande, vous pouvez afficher une liste de tous les pools de stockage avec des détails limités ou complets sur les pools de stockage. Vous pouvez également filtrer les pools de stockage répertoriés.

Procédure

  • Utilisez la commande virsh pool-list pour afficher les informations relatives au pool de stockage.

    # virsh pool-list --all --details
     Name                State    Autostart  Persistent    Capacity  Allocation   Available
     default             running  yes        yes          48.97 GiB   23.93 GiB   25.03 GiB
     Downloads           running  yes        yes         175.62 GiB   62.02 GiB  113.60 GiB
     RHEL-Storage-Pool   running  yes        yes         214.62 GiB   93.02 GiB  168.60 GiB
    Copy to Clipboard Toggle word wrap

Un pool de stockage basé sur un répertoire est basé sur un répertoire dans un système de fichiers monté existant. Ceci est utile, par exemple, lorsque vous souhaitez utiliser l'espace restant sur le système de fichiers à d'autres fins. Vous pouvez utiliser l'utilitaire virsh pour créer des pools de stockage basés sur des répertoires.

Conditions préalables

  • Assurez-vous que votre hyperviseur prend en charge les pools de stockage de répertoires :

    # virsh pool-capabilities | grep "'dir' supported='yes'"
    Copy to Clipboard Toggle word wrap

    Si la commande affiche une sortie, les pools de répertoires sont pris en charge.

Procédure

  1. Create a storage pool

    Utilisez la commande virsh pool-define-as pour définir et créer un pool de stockage de type répertoire. Par exemple, pour créer un pool de stockage nommé guest_images_dir qui utilise le répertoire /guest_images:

    # virsh pool-define-as guest_images_dir dir --target "/guest_images"
    Pool guest_images_dir defined
    Copy to Clipboard Toggle word wrap

    Si vous disposez déjà d'une configuration XML du pool de stockage que vous souhaitez créer, vous pouvez également définir le pool sur la base du XML. Pour plus d'informations, voir Paramètres des pools de stockage basés sur le répertoire.

  2. Create the storage pool target path

    La commande virsh pool-build permet de créer un chemin cible de pool de stockage pour un pool de stockage de système de fichiers préformaté, d'initialiser le périphérique source de stockage et de définir le format des données.

    # virsh pool-build guest_images_dir
      Pool guest_images_dir built
    
    # ls -la /guest_images
      total 8
      drwx------.  2 root root 4096 May 31 19:38 .
      dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..
    Copy to Clipboard Toggle word wrap
  3. Verify that the pool was created

    Utilisez la commande virsh pool-list pour vérifier que le pool a été créé.

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_dir     inactive   no
    Copy to Clipboard Toggle word wrap
  4. Start the storage pool

    Utilisez la commande virsh pool-start pour monter le pool de stockage.

    # virsh pool-start guest_images_dir
      Pool guest_images_dir started
    Copy to Clipboard Toggle word wrap
    Note

    La commande virsh pool-start n'est nécessaire que pour les pools de stockage permanents. Les pools de stockage transitoires sont automatiquement démarrés lors de leur création.

  5. [Optional] Turn on autostart

    Par défaut, un pool de stockage défini avec la commande virsh n'est pas configuré pour démarrer automatiquement chaque fois que les services de virtualisation démarrent. Utilisez la commande virsh pool-autostart pour configurer le pool de stockage afin qu'il démarre automatiquement.

    # virsh pool-autostart guest_images_dir
      Pool guest_images_dir marked as autostarted
    Copy to Clipboard Toggle word wrap

Vérification

  • Utilisez la commande virsh pool-info pour vérifier que le pool de stockage est dans l'état running état. Vérifiez que les tailles signalées sont conformes aux attentes et que le démarrage automatique est configuré correctement.

    # virsh pool-info guest_images_dir
      Name:           guest_images_dir
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    Copy to Clipboard Toggle word wrap

Dans un pool de stockage sur disque, le pool est basé sur une partition de disque. Cela est utile, par exemple, lorsque vous souhaitez qu'une partition entière du disque soit dédiée au stockage de la machine virtuelle (VM). Vous pouvez utiliser l'utilitaire virsh pour créer des pools de stockage sur disque.

Conditions préalables

  • Assurez-vous que votre hyperviseur prend en charge les pools de stockage sur disque :

    # virsh pool-capabilities | grep "'disk' supported='yes'"
    Copy to Clipboard Toggle word wrap

    Si la commande affiche une sortie, les pools sur disque sont pris en charge.

  • Préparez un périphérique sur lequel vous baserez le pool de stockage. Pour ce faire, préférez les partitions (par exemple, /dev/sdb1) ou les volumes LVM. Si vous donnez à une VM un accès en écriture à un disque entier ou à un périphérique bloc (par exemple, /dev/sdb), la VM le partitionnera probablement ou y créera ses propres groupes LVM. Cela peut entraîner des erreurs système sur l'hôte.

    Cependant, si vous avez besoin d'utiliser un périphérique bloc entier pour le pool de stockage, Red Hat recommande de protéger toutes les partitions importantes sur le périphérique de la fonction os-prober de GRUB. Pour ce faire, éditez le fichier /etc/default/grub et appliquez l'une des configurations suivantes :

    • Désactiver os-prober.

      GRUB_DISABLE_OS_PROBER=true
      Copy to Clipboard Toggle word wrap
    • Empêcher os-prober de découvrir une partition spécifique. Par exemple :

      GRUB_OS_PROBER_SKIP_LIST="5ef6313a-257c-4d43@/dev/sdb1"
      Copy to Clipboard Toggle word wrap
  • Sauvegardez toutes les données sur l'unité de stockage sélectionnée avant de créer un pool de stockage. Selon la version de libvirt utilisée, le fait de dédier un disque à un pool de stockage peut entraîner le reformatage et l'effacement de toutes les données actuellement stockées sur l'unité de disque.

Procédure

  1. Create a storage pool

    Utilisez la commande virsh pool-define-as pour définir et créer un pool de stockage de type disque. L'exemple suivant crée un pool de stockage nommé guest_images_disk qui utilise le périphérique /dev/sdb et est monté sur le répertoire /dev.

    # virsh pool-define-as guest_images_disk disk --source-format=gpt --source-dev=/dev/sdb --target /dev
    Pool guest_images_disk defined
    Copy to Clipboard Toggle word wrap

    Si vous disposez déjà d'une configuration XML du pool de stockage que vous souhaitez créer, vous pouvez également définir le pool sur la base du XML. Pour plus d'informations, voir Paramètres des pools de stockage sur disque.

  2. Create the storage pool target path

    La commande virsh pool-build permet de créer un chemin cible de pool de stockage pour un pool de stockage de système de fichiers préformaté, d'initialiser le périphérique source de stockage et de définir le format des données.

    # virsh pool-build guest_images_disk
      Pool guest_images_disk built
    Copy to Clipboard Toggle word wrap
    Note

    La construction du chemin d'accès à la cible n'est nécessaire que pour les pools de stockage sur disque, sur système de fichiers et logiques. Si libvirt détecte que le format de données de l'unité de stockage source diffère du type de pool de stockage sélectionné, la construction échoue, sauf si l'option overwrite soit spécifiée.

  3. Verify that the pool was created

    Utilisez la commande virsh pool-list pour vérifier que le pool a été créé.

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_disk    inactive   no
    Copy to Clipboard Toggle word wrap
  4. Start the storage pool

    Utilisez la commande virsh pool-start pour monter le pool de stockage.

    # virsh pool-start guest_images_disk
      Pool guest_images_disk started
    Copy to Clipboard Toggle word wrap
    Note

    La commande virsh pool-start n'est nécessaire que pour les pools de stockage permanents. Les pools de stockage transitoires sont automatiquement démarrés lors de leur création.

  5. [Optional] Turn on autostart

    Par défaut, un pool de stockage défini avec la commande virsh n'est pas configuré pour démarrer automatiquement chaque fois que les services de virtualisation démarrent. Utilisez la commande virsh pool-autostart pour configurer le pool de stockage afin qu'il démarre automatiquement.

    # virsh pool-autostart guest_images_disk
      Pool guest_images_disk marked as autostarted
    Copy to Clipboard Toggle word wrap

Vérification

  • Utilisez la commande virsh pool-info pour vérifier que le pool de stockage est dans l'état running état. Vérifiez que les tailles signalées sont conformes aux attentes et que le démarrage automatique est configuré correctement.

    # virsh pool-info guest_images_disk
      Name:           guest_images_disk
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    Copy to Clipboard Toggle word wrap

Lorsque vous souhaitez créer un pool de stockage sur un système de fichiers qui n'est pas monté, utilisez le pool de stockage basé sur le système de fichiers. Ce pool de stockage est basé sur un point de montage de système de fichiers donné. Vous pouvez utiliser l'utilitaire virsh pour créer des pools de stockage basés sur le système de fichiers.

Conditions préalables

  • Assurez-vous que votre hyperviseur prend en charge les pools de stockage basés sur des systèmes de fichiers :

    # virsh pool-capabilities | grep "'fs' supported='yes'"
    Copy to Clipboard Toggle word wrap

    Si la commande affiche un résultat, les pools basés sur des fichiers sont pris en charge.

  • Préparez un périphérique sur lequel vous baserez le pool de stockage. Pour ce faire, préférez les partitions (par exemple, /dev/sdb1) ou les volumes LVM. Si vous donnez à une VM un accès en écriture à un disque entier ou à un périphérique bloc (par exemple, /dev/sdb), la VM le partitionnera probablement ou y créera ses propres groupes LVM. Cela peut entraîner des erreurs système sur l'hôte.

    Cependant, si vous avez besoin d'utiliser un périphérique bloc entier pour le pool de stockage, Red Hat recommande de protéger toutes les partitions importantes sur le périphérique de la fonction os-prober de GRUB. Pour ce faire, éditez le fichier /etc/default/grub et appliquez l'une des configurations suivantes :

    • Désactiver os-prober.

      GRUB_DISABLE_OS_PROBER=true
      Copy to Clipboard Toggle word wrap
    • Empêcher os-prober de découvrir une partition spécifique. Par exemple :

      GRUB_OS_PROBER_SKIP_LIST="5ef6313a-257c-4d43@/dev/sdb1"
      Copy to Clipboard Toggle word wrap

Procédure

  1. Create a storage pool

    Utilisez la commande virsh pool-define-as pour définir et créer un pool de stockage de type système de fichiers. Par exemple, pour créer un pool de stockage nommé guest_images_fs qui utilise la partition /dev/sdc1 et qui est monté sur le répertoire /guest_images :

    # virsh pool-define-as guest_images_fs fs --source-dev /dev/sdc1 --target /guest_images
    Pool guest_images_fs defined
    Copy to Clipboard Toggle word wrap

    Si vous disposez déjà d'une configuration XML du pool de stockage que vous souhaitez créer, vous pouvez également définir le pool sur la base du XML. Pour plus d'informations, voir Paramètres des pools de stockage basés sur le système de fichiers.

  2. Define the storage pool target path

    La commande virsh pool-build permet de créer un chemin cible de pool de stockage pour un pool de stockage de système de fichiers préformaté, d'initialiser le périphérique source de stockage et de définir le format des données.

    # virsh pool-build guest_images_fs
      Pool guest_images_fs built
    
    # ls -la /guest_images
      total 8
      drwx------.  2 root root 4096 May 31 19:38 .
      dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..
    Copy to Clipboard Toggle word wrap
  3. Verify that the pool was created

    Utilisez la commande virsh pool-list pour vérifier que le pool a été créé.

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   no
    Copy to Clipboard Toggle word wrap
  4. Start the storage pool

    Utilisez la commande virsh pool-start pour monter le pool de stockage.

    # virsh pool-start guest_images_fs
      Pool guest_images_fs started
    Copy to Clipboard Toggle word wrap
    Note

    La commande virsh pool-start n'est nécessaire que pour les pools de stockage permanents. Les pools de stockage transitoires sont automatiquement démarrés lors de leur création.

  5. Optional: Activer le démarrage automatique

    Par défaut, un pool de stockage défini avec la commande virsh n'est pas configuré pour démarrer automatiquement chaque fois que les services de virtualisation démarrent. Utilisez la commande virsh pool-autostart pour configurer le pool de stockage afin qu'il démarre automatiquement.

    # virsh pool-autostart guest_images_fs
      Pool guest_images_fs marked as autostarted
    Copy to Clipboard Toggle word wrap

Vérification

  1. Utilisez la commande virsh pool-info pour vérifier que le pool de stockage est dans l'état running état. Vérifiez que les tailles signalées sont conformes aux attentes et que le démarrage automatique est configuré correctement.

    # virsh pool-info guest_images_fs
      Name:           guest_images_fs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    Copy to Clipboard Toggle word wrap
  2. Vérifiez qu'il existe un répertoire lost found dans le chemin cible sur le système de fichiers, ce qui indique que le périphérique est monté.

    # mount | grep /guest_images
      /dev/sdc1 on /guest_images type ext4 (rw)
    
    # ls -la /guest_images
      total 24
      drwxr-xr-x.  3 root root  4096 May 31 19:47 .
      dr-xr-xr-x. 25 root root  4096 May 31 19:38 ..
      drwx------.  2 root root 16384 May 31 14:18 lost+found
    Copy to Clipboard Toggle word wrap

Internet Small Computer Systems Interface (iSCSI) est une norme de réseau de stockage basée sur IP permettant de relier des installations de stockage de données. Si vous souhaitez disposer d'un pool de stockage sur un serveur iSCSI, vous pouvez utiliser l'utilitaire virsh pour créer des pools de stockage basés sur iSCSI.

Conditions préalables

  • Assurez-vous que votre hyperviseur prend en charge les pools de stockage basés sur iSCSI :

    # virsh pool-capabilities | grep "'iscsi' supported='yes'"
    Copy to Clipboard Toggle word wrap

    Si la commande affiche une sortie, les pools basés sur iSCSI sont pris en charge.

Procédure

  1. Create a storage pool

    Utilisez la commande virsh pool-define-as pour définir et créer un pool de stockage de type iSCSI. Par exemple, pour créer un pool de stockage nommé guest_images_iscsi qui utilise l'IQN iqn.2010-05.com.example.server1:iscsirhel7guest sur server1.example.com, et qui est monté sur le chemin /dev/disk/by-path:

    # virsh pool-define-as --name guest_images_iscsi --type iscsi --source-host server1.example.com --source-dev iqn.2010-05.com.example.server1:iscsirhel7guest --target /dev/disk/by-path
    Pool guest_images_iscsi defined
    Copy to Clipboard Toggle word wrap

    Si vous disposez déjà d'une configuration XML du pool de stockage que vous souhaitez créer, vous pouvez également définir le pool sur la base du XML. Pour plus de détails, voir Paramètres des pools de stockage basés sur iSCSI.

  2. Verify that the pool was created

    Utilisez la commande virsh pool-list pour vérifier que le pool a été créé.

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_iscsi   inactive   no
    Copy to Clipboard Toggle word wrap
  3. Start the storage pool

    Utilisez la commande virsh pool-start pour monter le pool de stockage.

    # virsh pool-start guest_images_iscsi
      Pool guest_images_iscsi started
    Copy to Clipboard Toggle word wrap
    Note

    La commande virsh pool-start n'est nécessaire que pour les pools de stockage permanents. Les pools de stockage transitoires sont automatiquement démarrés lors de leur création.

  4. [Optional] Turn on autostart

    Par défaut, un pool de stockage défini avec la commande virsh n'est pas configuré pour démarrer automatiquement chaque fois que les services de virtualisation démarrent. Utilisez la commande virsh pool-autostart pour configurer le pool de stockage afin qu'il démarre automatiquement.

    # virsh pool-autostart guest_images_iscsi
      Pool guest_images_iscsi marked as autostarted
    Copy to Clipboard Toggle word wrap

Vérification

  • Utilisez la commande virsh pool-info pour vérifier que le pool de stockage est dans l'état running état. Vérifiez que les tailles signalées sont conformes aux attentes et que le démarrage automatique est configuré correctement.

    # virsh pool-info guest_images_iscsi
      Name:           guest_images_iscsi
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    Copy to Clipboard Toggle word wrap

Si vous souhaitez disposer d'un pool de stockage faisant partie d'un groupe de volumes LVM, vous pouvez utiliser l'utilitaire virsh pour créer des pools de stockage basés sur LVM.

Recommandations

Avant de créer un pool de stockage basé sur LVM, il convient de tenir compte des points suivants :

  • Les pools de stockage basés sur LVM n'offrent pas toute la souplesse de LVM.
  • libvirt prend en charge les volumes logiques légers, mais n'offre pas les fonctionnalités des pools de stockage légers.
  • Les pools de stockage basés sur LVM sont des groupes de volumes. Vous pouvez créer des groupes de volumes à l'aide de l'utilitaire virsh, mais de cette façon vous ne pouvez avoir qu'un seul périphérique dans le groupe de volumes créé. Pour créer un groupe de volumes avec plusieurs périphériques, utilisez plutôt l'utilitaire LVM, voir Comment créer un groupe de volumes sous Linux avec LVM.

    Pour plus d'informations sur les groupes de volumes, consultez le site Red Hat Enterprise Linux Logical Volume Manager Administration Guide.

  • Les pools de stockage basés sur LVM nécessitent une partition complète du disque. Si vous activez une nouvelle partition ou un nouveau périphérique à l'aide des commandes virsh, la partition sera formatée et toutes les données seront effacées. Si vous utilisez le groupe de volumes existant d'un hôte, comme dans ces procédures, rien ne sera effacé.

Conditions préalables

  • Assurez-vous que votre hyperviseur prend en charge les pools de stockage basés sur LVM :

    # virsh pool-capabilities | grep "'logical' supported='yes'"
    Copy to Clipboard Toggle word wrap

    Si la commande affiche une sortie, les pools basés sur LVM sont pris en charge.

Procédure

  1. Create a storage pool

    Utilisez la commande virsh pool-define-as pour définir et créer un pool de stockage de type LVM. Par exemple, la commande suivante crée un pool de stockage nommé guest_images_lvm qui utilise le groupe de volumes lvm_vg et est monté sur le répertoire /dev/lvm_vg:

    # virsh pool-define-as guest_images_lvm logical --source-name lvm_vg --target /dev/lvm_vg
    Pool guest_images_lvm defined
    Copy to Clipboard Toggle word wrap

    Si vous disposez déjà d'une configuration XML du pool de stockage que vous souhaitez créer, vous pouvez également définir le pool sur la base du XML. Pour plus d'informations, voir Paramètres des pools de stockage basés sur LVM.

  2. Verify that the pool was created

    Utilisez la commande virsh pool-list pour vérifier que le pool a été créé.

    # virsh pool-list --all
    
      Name                   State      Autostart
      -------------------------------------------
      default                active     yes
      guest_images_lvm       inactive   no
    Copy to Clipboard Toggle word wrap
  3. Start the storage pool

    Utilisez la commande virsh pool-start pour monter le pool de stockage.

    # virsh pool-start guest_images_lvm
      Pool guest_images_lvm started
    Copy to Clipboard Toggle word wrap
    Note

    La commande virsh pool-start n'est nécessaire que pour les pools de stockage permanents. Les pools de stockage transitoires sont automatiquement démarrés lors de leur création.

  4. [Optional] Turn on autostart

    Par défaut, un pool de stockage défini avec la commande virsh n'est pas configuré pour démarrer automatiquement chaque fois que les services de virtualisation démarrent. Utilisez la commande virsh pool-autostart pour configurer le pool de stockage afin qu'il démarre automatiquement.

    # virsh pool-autostart guest_images_lvm
      Pool guest_images_lvm marked as autostarted
    Copy to Clipboard Toggle word wrap

Vérification

  • Utilisez la commande virsh pool-info pour vérifier que le pool de stockage est dans l'état running état. Vérifiez que les tailles signalées sont conformes aux attentes et que le démarrage automatique est configuré correctement.

    # virsh pool-info guest_images_lvm
      Name:           guest_images_lvm
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    Copy to Clipboard Toggle word wrap

Si vous souhaitez disposer d'un pool de stockage sur un serveur NFS (Network File System), vous pouvez utiliser l'utilitaire virsh pour créer des pools de stockage basés sur NFS.

Conditions préalables

  • Assurez-vous que votre hyperviseur prend en charge les pools de stockage basés sur NFS :

    # virsh pool-capabilities | grep "<value>nfs</value>"
    Copy to Clipboard Toggle word wrap

    Si la commande affiche une sortie, les pools basés sur NFS sont pris en charge.

Procédure

  1. Create a storage pool

    Utilisez la commande virsh pool-define-as pour définir et créer un pool de stockage de type NFS. Par exemple, pour créer un pool de stockage nommé guest_images_netfs qui utilise un serveur NFS avec l'IP 111.222.111.222 monté sur le répertoire serveur /home/net_mount en utilisant le répertoire cible /var/lib/libvirt/images/nfspool:

    # virsh pool-define-as --name guest_images_netfs --type netfs --source-host='111.222.111.222' --source-path='/home/net_mount' --source-format='nfs' --target='/var/lib/libvirt/images/nfspool'
    Copy to Clipboard Toggle word wrap

    Si vous disposez déjà d'une configuration XML du pool de stockage que vous souhaitez créer, vous pouvez également définir le pool sur la base du XML. Pour plus d'informations, voir Paramètres des pools de stockage basés sur NFS.

  2. Verify that the pool was created

    Utilisez la commande virsh pool-list pour vérifier que le pool a été créé.

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_netfs   inactive   no
    Copy to Clipboard Toggle word wrap
  3. Start the storage pool

    Utilisez la commande virsh pool-start pour monter le pool de stockage.

    # virsh pool-start guest_images_netfs
      Pool guest_images_netfs started
    Copy to Clipboard Toggle word wrap
    Note

    La commande virsh pool-start n'est nécessaire que pour les pools de stockage permanents. Les pools de stockage transitoires sont automatiquement démarrés lors de leur création.

  4. [Optional] Turn on autostart

    Par défaut, un pool de stockage défini avec la commande virsh n'est pas configuré pour démarrer automatiquement chaque fois que les services de virtualisation démarrent. Utilisez la commande virsh pool-autostart pour configurer le pool de stockage afin qu'il démarre automatiquement.

    # virsh pool-autostart guest_images_netfs
      Pool guest_images_netfs marked as autostarted
    Copy to Clipboard Toggle word wrap

Vérification

  • Utilisez la commande virsh pool-info pour vérifier que le pool de stockage est dans l'état running état. Vérifiez que les tailles signalées sont conformes aux attentes et que le démarrage automatique est configuré correctement.

    # virsh pool-info guest_images_netfs
      Name:           guest_images_netfs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    Copy to Clipboard Toggle word wrap

Si vous souhaitez disposer d'un pool de stockage sur un périphérique SCSI (Small Computer System Interface), votre hôte doit pouvoir se connecter au périphérique SCSI à l'aide d'un adaptateur de bus hôte virtuel (vHBA). Vous pouvez ensuite utiliser l'utilitaire virsh pour créer des pools de stockage basés sur SCSI.

Conditions préalables

  • Assurez-vous que votre hyperviseur prend en charge les pools de stockage basés sur SCSI :

    # virsh pool-capabilities | grep "'scsi' supported='yes'"
    Copy to Clipboard Toggle word wrap

    Si la commande affiche une sortie, les pools basés sur SCSI sont pris en charge.

  • Avant de créer un pool de stockage basé sur SCSI avec des périphériques vHBA, créez un vHBA. Pour plus d'informations, voir Création de vHBA.

Procédure

  1. Create a storage pool

    Utilisez la commande virsh pool-define-as pour définir et créer un pool de stockage SCSI en utilisant un vHBA. Par exemple, la commande suivante crée un pool de stockage nommé guest_images_vhba qui utilise un vHBA identifié par l'adaptateur parent scsi_host3, le numéro de port mondial 5001a4ace3ee047d et le numéro de nœud mondial 5001a4a93526d0a1. Le pool de stockage est monté sur le répertoire /dev/disk/:

    # virsh pool-define-as guest_images_vhba scsi --adapter-parent scsi_host3 --adapter-wwnn 5001a4a93526d0a1 --adapter-wwpn 5001a4ace3ee047d --target /dev/disk/
    Pool guest_images_vhba defined
    Copy to Clipboard Toggle word wrap

    Si vous disposez déjà d'une configuration XML du pool de stockage que vous souhaitez créer, vous pouvez également définir le pool sur la base du XML. Pour plus de détails, voir Paramètres pour les pools de stockage basés sur SCSI avec des périphériques vHBA.

  2. Verify that the pool was created

    Utilisez la commande virsh pool-list pour vérifier que le pool a été créé.

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_vhba    inactive   no
    Copy to Clipboard Toggle word wrap
  3. Start the storage pool

    Utilisez la commande virsh pool-start pour monter le pool de stockage.

    # virsh pool-start guest_images_vhba
      Pool guest_images_vhba started
    Copy to Clipboard Toggle word wrap
    Note

    La commande virsh pool-start n'est nécessaire que pour les pools de stockage permanents. Les pools de stockage transitoires sont automatiquement démarrés lors de leur création.

  4. [Optional] Turn on autostart

    Par défaut, un pool de stockage défini avec la commande virsh n'est pas configuré pour démarrer automatiquement chaque fois que les services de virtualisation démarrent. Utilisez la commande virsh pool-autostart pour configurer le pool de stockage afin qu'il démarre automatiquement.

    # virsh pool-autostart guest_images_vhba
      Pool guest_images_vhba marked as autostarted
    Copy to Clipboard Toggle word wrap

Vérification

  • Utilisez la commande virsh pool-info pour vérifier que le pool de stockage est dans l'état running état. Vérifiez que les tailles signalées sont conformes aux attentes et que le démarrage automatique est configuré correctement.

    # virsh pool-info guest_images_vhba
      Name:           guest_images_vhba
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    Copy to Clipboard Toggle word wrap

15.2.9. Suppression de pools de stockage à l'aide de la CLI

Pour supprimer un pool de stockage de votre système hôte, vous devez arrêter le pool et supprimer sa définition XML.

Procédure

  1. Dressez la liste des pools de stockage définis à l'aide de la commande virsh pool-list.

    # virsh pool-list --all
    Name                 State      Autostart
    -------------------------------------------
    default              active     yes
    Downloads            active     yes
    RHEL-Storage-Pool   active     yes
    Copy to Clipboard Toggle word wrap
  2. Arrêtez le pool de stockage que vous souhaitez supprimer à l'aide de la commande virsh pool-destroy.

    # virsh pool-destroy Downloads
    Pool Downloads destroyed
    Copy to Clipboard Toggle word wrap
  3. Optional: Pour certains types de pools de stockage, vous pouvez supprimer le répertoire où réside le pool de stockage à l'aide de la commande virsh pool-delete. Pour ce faire, le répertoire doit être vide.

    # virsh pool-delete Downloads
    Pool Downloads deleted
    Copy to Clipboard Toggle word wrap
  4. Supprimez la définition du pool de stockage à l'aide de la commande virsh pool-undefine.

    # virsh pool-undefine Downloads
    Pool Downloads has been undefined
    Copy to Clipboard Toggle word wrap

Vérification

  • Confirmez que le pool de stockage a été supprimé.

    # virsh pool-list --all
    Name                 State      Autostart
    -------------------------------------------
    default              active     yes
    rhel-Storage-Pool   active     yes
    Copy to Clipboard Toggle word wrap

En utilisant la console web RHEL, vous pouvez gérer les pools de stockage afin d'affecter du stockage à vos machines virtuelles (VM).

Vous pouvez utiliser la console web pour :

En utilisant la console web, vous pouvez afficher des informations détaillées sur les pools de stockage disponibles sur votre système. Les pools de stockage peuvent être utilisés pour créer des images de disque pour vos machines virtuelles.

Conditions préalables

Procédure

  1. Cliquez sur Pools de stockage en haut de l'interface Machines virtuelles.

    La fenêtre Storage pools s'affiche et présente une liste des pools de stockage configurés.

    Les informations comprennent les éléments suivants :

    • Name - Le nom du pool de stockage.
    • Size - L'allocation actuelle et la capacité totale du pool de stockage.
    • Connection - La connexion utilisée pour accéder au pool de stockage.
    • State - L'état du pool de stockage.
  2. Cliquez sur la flèche située à côté du pool de stockage dont vous souhaitez consulter les informations.

    La ligne se développe pour faire apparaître le volet Vue d'ensemble contenant des informations détaillées sur le pool de stockage sélectionné.

    Les informations comprennent

    • Target path - Emplacement du pool de stockage.
    • Persistent - Indique si le pool de stockage a une configuration persistante ou non.
    • Autostart - Indique si le pool de stockage démarre automatiquement au démarrage du système.
    • Type - Le type de pool de stockage.
  3. Pour afficher la liste des volumes de stockage associés au pool de stockage, cliquez sur Volumes de stockage.

    Le volet Volumes de stockage s'affiche et présente une liste des volumes de stockage configurés.

    Les informations comprennent

    • Name - Le nom du volume de stockage.
    • Used by - La VM qui utilise actuellement le volume de stockage.
    • Size - La taille du volume.

Un pool de stockage basé sur un répertoire est basé sur un répertoire dans un système de fichiers monté existant. Ceci est utile, par exemple, lorsque vous souhaitez utiliser l'espace restant sur le système de fichiers à d'autres fins.

Conditions préalables

Procédure

  1. Dans la console Web RHEL, cliquez sur Storage pools dans l'onglet Virtual Machines.

    La fenêtre Storage pools s'affiche et présente la liste des pools de stockage configurés, le cas échéant.

  2. Cliquez sur Créer un pool de stockage.

    La boîte de dialogue Create storage pool apparaît.

  3. Entrez un nom pour le pool de stockage.
  4. Dans le menu déroulant Type, sélectionnez Filesystem directory.

    Note

    Si l'option Filesystem directory n'apparaît pas dans le menu déroulant, c'est que votre hyperviseur ne prend pas en charge les pools de stockage basés sur des répertoires.

  5. Saisissez les informations suivantes :

    • Target path - Emplacement du pool de stockage.
    • Startup - Démarrage ou non du pool de stockage au démarrage de l'hôte.
  6. Cliquez sur Créer.

    Le pool de stockage est créé, la boîte de dialogue Create Storage Pool se ferme et le nouveau pool de stockage apparaît dans la liste des pools de stockage.

Un pool de stockage basé sur NFS repose sur un système de fichiers hébergé sur un serveur.

Conditions préalables

Procédure

  1. Dans la console Web RHEL, cliquez sur Storage pools dans l'onglet Virtual Machines.

    La fenêtre Storage pools s'affiche et présente la liste des pools de stockage configurés, le cas échéant.

  2. Cliquez sur Créer un pool de stockage.

    La boîte de dialogue Create storage pool apparaît.

  3. Entrez un nom pour le pool de stockage.
  4. Dans le menu déroulant Type, sélectionnez Network file system.

    Note

    Si vous ne voyez pas l'option Network file system dans le menu déroulant, c'est que votre hyperviseur ne prend pas en charge les pools de stockage basés sur nfs.

  5. Saisissez le reste des informations :

    • Target path - Le chemin spécifiant la cible. Il s'agit du chemin utilisé pour le pool de stockage.
    • Host - Le nom d'hôte du serveur réseau où se trouve le point de montage. Il peut s'agir d'un nom d'hôte ou d'une adresse IP.
    • Source path - Le répertoire utilisé sur le serveur du réseau.
    • Startup - Démarrage ou non du pool de stockage au démarrage de l'hôte.
  6. Cliquez sur Créer.

    Le pool de stockage est créé. La boîte de dialogue Create storage pool se ferme et le nouveau pool de stockage apparaît dans la liste des pools de stockage.

Un pool de stockage iSCSI est basé sur l'Internet Small Computer Systems Interface (iSCSI), une norme de réseau de stockage IP permettant de relier des installations de stockage de données.

Conditions préalables

Procédure

  1. Dans la console Web RHEL, cliquez sur Storage pools dans l'onglet Virtual Machines.

    La fenêtre Storage pools s'affiche et présente la liste des pools de stockage configurés, le cas échéant.

  2. Cliquez sur Créer un pool de stockage.

    La boîte de dialogue Create storage pool apparaît.

  3. Entrez un nom pour le pool de stockage.
  4. Dans le menu déroulant Type, sélectionnez iSCSI target.

  5. Saisissez le reste des informations :

    • Target Path - Le chemin spécifiant la cible. Il s'agit du chemin utilisé pour le pool de stockage.
    • Host - Le nom d'hôte ou l'adresse IP du serveur ISCSI.
    • Source path - Le nom unique iSCSI Qualified Name (IQN) de la cible iSCSI.
    • Startup - Démarrage ou non du pool de stockage au démarrage de l'hôte.
  6. Cliquez sur Créer.

    Le pool de stockage est créé. La boîte de dialogue Create storage pool se ferme et le nouveau pool de stockage apparaît dans la liste des pools de stockage.

Un pool de stockage sur disque utilise des partitions entières de disque.

Avertissement
  • Selon la version de libvirt utilisée, dédier un disque à un pool de stockage peut reformater et effacer toutes les données actuellement stockées sur le périphérique de disque. Il est fortement recommandé de sauvegarder les données sur le périphérique de stockage avant de créer un pool de stockage.
  • Lorsque des disques entiers ou des périphériques en mode bloc sont transmis à la machine virtuelle, celle-ci les partitionne ou crée ses propres groupes LVM. La machine hôte peut alors détecter ces partitions ou groupes LVM et provoquer des erreurs.

    Ces erreurs peuvent également se produire lorsque vous créez manuellement des partitions ou des groupes LVM et que vous les transmettez à la machine virtuelle.

    Pour éviter ces erreurs, utilisez plutôt des pools de stockage basés sur des fichiers.

Conditions préalables

Procédure

  1. Dans la console Web RHEL, cliquez sur Storage pools dans l'onglet Virtual Machines.

    La fenêtre Storage pools s'affiche et présente la liste des pools de stockage configurés, le cas échéant.

  2. Cliquez sur Créer un pool de stockage.

    La boîte de dialogue Create storage pool apparaît.

  3. Entrez un nom pour le pool de stockage.
  4. Dans le menu déroulant Type, sélectionnez Physical disk device.

    Note

    Si l'option Physical disk device n'apparaît pas dans le menu déroulant, c'est que votre hyperviseur ne prend pas en charge les pools de stockage sur disque.

  5. Saisissez le reste des informations :

    • Target Path - Chemin d'accès spécifiant le périphérique cible. Il s'agit du chemin utilisé pour le pool de stockage.
    • Source path - Le chemin d'accès spécifiant l'unité de stockage. Par exemple, /dev/sdb.
    • Format - Le type de table de partition.
    • Startup - Démarrage ou non du pool de stockage au démarrage de l'hôte.
  6. Cliquez sur Créer.

    Le pool de stockage est créé. La boîte de dialogue Create storage pool se ferme et le nouveau pool de stockage apparaît dans la liste des pools de stockage.

Un pool de stockage basé sur LVM est basé sur des groupes de volumes, que vous pouvez gérer à l'aide du Logical Volume Manager (LVM). Un groupe de volumes est une combinaison de plusieurs volumes physiques qui crée une structure de stockage unique.

Note
  • Les pools de stockage basés sur LVM n'offrent pas toute la souplesse de LVM.
  • libvirt prend en charge les volumes logiques légers, mais n'offre pas les fonctionnalités des pools de stockage légers.
  • Les pools de stockage basés sur LVM nécessitent une partition complète du disque. Si vous activez une nouvelle partition ou un nouveau périphérique à l'aide des commandes virsh, la partition sera formatée et toutes les données seront effacées. Si vous utilisez le groupe de volumes existant d'un hôte, comme dans ces procédures, rien ne sera effacé.
  • Pour créer un groupe de volumes avec plusieurs périphériques, utilisez plutôt l'utilitaire LVM, voir Comment créer un groupe de volumes sous Linux avec LVM.

    Pour plus d'informations sur les groupes de volumes, consultez le site Red Hat Enterprise Linux Logical Volume Manager Administration Guide.

Conditions préalables

Procédure

  1. Dans la console Web RHEL, cliquez sur Storage pools dans l'onglet Virtual Machines.

    La fenêtre Storage pools s'affiche et présente la liste des pools de stockage configurés, le cas échéant.

  2. Cliquez sur Créer un pool de stockage.

    La boîte de dialogue Create storage pool apparaît.

  3. Entrez un nom pour le pool de stockage.
  4. Dans le menu déroulant Type, sélectionnez LVM volume group.

    Note

    Si l'option LVM volume group n'apparaît pas dans le menu déroulant, c'est que votre hyperviseur ne prend pas en charge les pools de stockage basés sur LVM.

  5. Saisissez le reste des informations :

    • Source volume group - Le nom du groupe de volumes LVM que vous souhaitez utiliser.
    • Startup - Démarrage ou non du pool de stockage au démarrage de l'hôte.
  6. Cliquez sur Créer.

    Le pool de stockage est créé. La boîte de dialogue Create storage pool se ferme et le nouveau pool de stockage apparaît dans la liste des pools de stockage.

Vous pouvez supprimer des pools de stockage pour libérer des ressources sur l'hôte ou sur le réseau afin d'améliorer les performances du système. La suppression des pools de stockage libère également des ressources qui peuvent alors être utilisées par d'autres machines virtuelles (VM).

Important

Sauf indication contraire, la suppression d'un pool de stockage n'entraîne pas la suppression simultanée des volumes de stockage qu'il contient.

Pour désactiver temporairement un pool de stockage au lieu de le supprimer, voir Désactiver des pools de stockage à l'aide de la console web

Conditions préalables

Procédure

  1. Cliquez sur Storage Pools dans l'onglet Virtual Machines.

    La fenêtre Storage Pools s'affiche et présente une liste des pools de stockage configurés.

  2. Cliquez sur le bouton de menu du pool de stockage que vous souhaitez supprimer et cliquez sur Supprimer.

    Une boîte de dialogue de confirmation apparaît.

  3. Optional: Pour supprimer les volumes de stockage à l'intérieur du pool, cochez les cases correspondantes dans la boîte de dialogue.
  4. Cliquez sur Supprimer.

    Le pool de stockage est supprimé. Si vous avez coché la case à l'étape précédente, les volumes de stockage associés sont également supprimés.

Si vous ne souhaitez pas supprimer définitivement un pool de stockage, vous pouvez le désactiver temporairement.

Lorsque vous désactivez un pool de stockage, aucun nouveau volume ne peut être créé dans ce pool. Cependant, les machines virtuelles (VM) qui ont des volumes dans ce pool continueront à fonctionner. Ceci est utile pour un certain nombre de raisons, par exemple, vous pouvez limiter le nombre de volumes qui peuvent être créés dans un pool afin d'augmenter les performances du système.

Pour désactiver un pool de stockage à l'aide de la console web RHEL, suivez la procédure suivante.

Conditions préalables

Procédure

  1. Cliquez sur Pools de stockage en haut de l'onglet Machines virtuelles. La fenêtre Pools de stockage apparaît, affichant une liste des pools de stockage configurés.

  2. Cliquez sur Désactiver sur la ligne du pool de stockage.

    Le pool de stockage est désactivé.

15.4. Paramètres de création des pools de stockage

En fonction du type de pool de stockage dont vous avez besoin, vous pouvez modifier son fichier de configuration XML et définir un type spécifique de pool de stockage. Cette section fournit des informations sur les paramètres XML nécessaires à la création de différents types de pools de stockage, ainsi que des exemples.

Lorsque vous souhaitez créer ou modifier un pool de stockage basé sur un répertoire à l'aide d'un fichier de configuration XML, vous devez inclure certains paramètres requis. Voir le tableau suivant pour plus d'informations sur ces paramètres.

Vous pouvez utiliser la commande virsh pool-define pour créer un pool de stockage basé sur la configuration XML d'un fichier spécifié. Par exemple :

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_dir
Copy to Clipboard Toggle word wrap

Parameters

Le tableau suivant fournit une liste des paramètres requis pour le fichier XML d'un pool de stockage basé sur un répertoire.

Expand
Tableau 15.1. Paramètres du pool de stockage basé sur un répertoire
DescriptionXML

Le type de pool de stockage

<pool type='dir'>

Le nom du pool de stockage

<name>name</name>

Le chemin spécifiant la cible. Il s'agit du chemin utilisé pour le pool de stockage.

<target>
<path>target_path</path>
</target>

Exemple :

Voici un exemple de fichier XML pour un pool de stockage basé sur le répertoire /guest_images:

<pool type='dir'>
  <name>dirpool</name>
  <target>
    <path>/guest_images</path>
  </target>
</pool>
Copy to Clipboard Toggle word wrap

15.4.2. Paramètres du pool de stockage sur disque

Lorsque vous souhaitez créer ou modifier un pool de stockage sur disque à l'aide d'un fichier de configuration XML, vous devez inclure certains paramètres requis. Voir le tableau suivant pour plus d'informations sur ces paramètres.

Vous pouvez utiliser la commande virsh pool-define pour créer un pool de stockage basé sur la configuration XML d'un fichier spécifié. Par exemple :

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_disk
Copy to Clipboard Toggle word wrap

Parameters

Le tableau suivant fournit une liste des paramètres requis pour le fichier XML d'un pool de stockage sur disque.

Expand
Tableau 15.2. Paramètres du pool de stockage sur disque
DescriptionXML

Le type de pool de stockage

<pool type='disk'>

Le nom du pool de stockage

<name>name</name>

Le chemin d'accès spécifiant l'unité de stockage. Par exemple, /dev/sdb.

<source>
<path>source_path</path>
</source>

Le chemin d'accès spécifiant le périphérique cible. Il s'agit du chemin utilisé pour le pool de stockage.

<target>
<path>target_path</path>
</target>

Exemple :

Voici un exemple de fichier XML pour un pool de stockage sur disque :

<pool type='disk'>
  <name>phy_disk</name>
  <source>
    <device path='/dev/sdb'/>
    <format type='gpt'/>
  </source>
  <target>
    <path>/dev</path>
  </target>
</pool>
Copy to Clipboard Toggle word wrap

Lorsque vous souhaitez créer ou modifier un pool de stockage basé sur un système de fichiers à l'aide d'un fichier de configuration XML, vous devez inclure certains paramètres requis. Voir le tableau suivant pour plus d'informations sur ces paramètres.

Vous pouvez utiliser la commande virsh pool-define pour créer un pool de stockage basé sur la configuration XML d'un fichier spécifié. Par exemple :

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_fs
Copy to Clipboard Toggle word wrap

Parameters

Le tableau suivant fournit une liste des paramètres requis pour le fichier XML d'un pool de stockage basé sur un système de fichiers.

Expand
Tableau 15.3. Paramètres du pool de stockage basé sur un système de fichiers
DescriptionXML

Le type de pool de stockage

<pool type='fs'>

Le nom du pool de stockage

<name>name</name>

Le chemin d'accès spécifiant la partition. Par exemple, /dev/sdc1

<source>
<device path=device_path />

Le type de système de fichiers, par exemple ext4.

<format type=fs_type />
</source>

Le chemin spécifiant la cible. Il s'agit du chemin utilisé pour le pool de stockage.

<target>
<path>path-to-pool</path>
</target>

Exemple :

Voici un exemple de fichier XML pour un pool de stockage basé sur la partition /dev/sdc1:

<pool type='fs'>
  <name>guest_images_fs</name>
  <source>
    <device path='/dev/sdc1'/>
    <format type='auto'/>
  </source>
  <target>
    <path>/guest_images</path>
  </target>
</pool>
Copy to Clipboard Toggle word wrap

15.4.4. paramètres du pool de stockage basé sur iSCSI

Lorsque vous souhaitez créer ou modifier un pool de stockage basé sur iSCSI à l'aide d'un fichier de configuration XML, vous devez inclure certains paramètres requis. Voir le tableau suivant pour plus d'informations sur ces paramètres.

Vous pouvez utiliser la commande virsh pool-define pour créer un pool de stockage basé sur la configuration XML d'un fichier spécifié. Par exemple :

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_iscsi
Copy to Clipboard Toggle word wrap

Parameters

Le tableau suivant fournit une liste des paramètres requis pour le fichier XML d'un pool de stockage basé sur iSCSI.

Expand
Tableau 15.4. paramètres du pool de stockage basé sur iSCSI
DescriptionXML

Le type de pool de stockage

<pool type='iscsi'>

Le nom du pool de stockage

<name>name</name>

Le nom de l'hôte

<source>
<host name=hostname />

L'IQN iSCSI

<device path= iSCSI_IQN />
</source>

Le chemin spécifiant la cible. Il s'agit du chemin utilisé pour le pool de stockage.

<target>
<path>/dev/disk/by-path</path>
</target>

[Facultatif] IQN de l'initiateur iSCSI. Ceci n'est nécessaire que lorsque l'ACL restreint le LUN à un initiateur particulier.

<initiator>
<iqn name='initiator0' />
</initiator>

Note

L'IQN de l'initiateur iSCSI peut être déterminé à l'aide de la commande virsh find-storage-pool-sources-as iscsi.

Exemple :

Voici un exemple de fichier XML pour un pool de stockage basé sur le périphérique iSCSI spécifié :

<pool type='iscsi'>
  <name>iSCSI_pool</name>
  <source>
    <host name='server1.example.com'/>
    <device path='iqn.2010-05.com.example.server1:iscsirhel7guest'/>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
  </target>
</pool>
Copy to Clipboard Toggle word wrap

15.4.5. Paramètres du pool de stockage basé sur LVM

Lorsque vous souhaitez créer ou modifier un pool de stockage basé sur LVM à l'aide d'un fichier de configuration XML, vous devez inclure certains paramètres requis. Voir le tableau suivant pour plus d'informations sur ces paramètres.

Vous pouvez utiliser la commande virsh pool-define pour créer un pool de stockage basé sur la configuration XML d'un fichier spécifié. Par exemple :

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_logical
Copy to Clipboard Toggle word wrap

Parameters

Le tableau suivant fournit une liste des paramètres requis pour le fichier XML d'un pool de stockage basé sur LVM.

Expand
Tableau 15.5. Paramètres du pool de stockage basé sur LVM
DescriptionXML

Le type de pool de stockage

<pool type='logical'>

Le nom du pool de stockage

<name>name</name>

Chemin d'accès au périphérique du pool de stockage

<source>
<device path='device_path' />`

Le nom du groupe de volumes

<name>VG-name</name>

Le format du groupe virtuel

<format type='lvm2' />
</source>

Le chemin cible

<target>
<path=target_path />
</target>

Note

Si le groupe de volumes logiques est composé de plusieurs partitions de disque, il peut y avoir plusieurs périphériques sources répertoriés. Par exemple :

<source>
  <device path='/dev/sda1'/>
  <device path='/dev/sdb3'/>
  <device path='/dev/sdc2'/>
  ...
</source>
Copy to Clipboard Toggle word wrap

Exemple :

Voici un exemple de fichier XML pour un pool de stockage basé sur le LVM spécifié :

<pool type='logical'>
  <name>guest_images_lvm</name>
  <source>
    <device path='/dev/sdc'/>
    <name>libvirt_lvm</name>
    <format type='lvm2'/>
  </source>
  <target>
    <path>/dev/libvirt_lvm</path>
  </target>
</pool>
Copy to Clipboard Toggle word wrap

15.4.6. Paramètres du pool de stockage basé sur NFS

Lorsque vous souhaitez créer ou modifier un pool de stockage basé sur NFS à l'aide d'un fichier de configuration XML, vous devez inclure certains paramètres requis. Voir le tableau suivant pour plus d'informations sur ces paramètres.

Vous pouvez utiliser la commande virsh pool-define pour créer un pool de stockage basé sur la configuration XML d'un fichier spécifié. Par exemple :

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_netfs
Copy to Clipboard Toggle word wrap

Parameters

Le tableau suivant fournit une liste des paramètres requis pour le fichier XML d'un pool de stockage basé sur NFS.

Expand
Tableau 15.6. Paramètres du pool de stockage basé sur NFS
DescriptionXML

Le type de pool de stockage

<pool type='netfs'>

Le nom du pool de stockage

<name>name</name>

Le nom d'hôte du serveur réseau où se trouve le point de montage. Il peut s'agir d'un nom d'hôte ou d'une adresse IP.

<source>
<host name=hostname
/>

Le format du pool de stockage

L'un des éléments suivants :

<format type='nfs' />

<format type='cifs' />

Le répertoire utilisé sur le serveur du réseau

<dir path=source_path />
</source>

Le chemin spécifiant la cible. Il s'agit du chemin utilisé pour le pool de stockage.

<target>
<path>target_path</path>
</target>

Exemple :

Voici un exemple de fichier XML pour un pool de stockage basé sur le répertoire /home/net_mount du serveur NFS file_server:

<pool type='netfs'>
  <name>nfspool</name>
  <source>
    <host name='file_server'/>
    <format type='nfs'/>
    <dir path='/home/net_mount'/>
  </source>
  <target>
    <path>/var/lib/libvirt/images/nfspool</path>
  </target>
</pool>
Copy to Clipboard Toggle word wrap

Pour créer ou modifier un fichier de configuration XML pour un pool de stockage basé sur SCSi qui utilise un périphérique vHBA (virtual host adapter bus), vous devez inclure certains paramètres requis dans le fichier de configuration XML. Voir le tableau suivant pour plus d'informations sur les paramètres requis.

Vous pouvez utiliser la commande virsh pool-define pour créer un pool de stockage basé sur la configuration XML d'un fichier spécifié. Par exemple :

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_vhba
Copy to Clipboard Toggle word wrap

Parameters

Le tableau suivant fournit une liste des paramètres requis pour le fichier XML d'un pool de stockage basé sur SCSI avec vHBA.

Expand
Tableau 15.7. Paramètres pour les pools de stockage basés sur SCSI avec des périphériques vHBA
DescriptionXML

Le type de pool de stockage

<pool type='scsi'>

Le nom du pool de stockage

<name>name</name>

L'identifiant du vHBA. L'attribut parent est facultatif.

<source>
<adapter type='fc_host'
[parent=parent_scsi_device]
wwnn='WWNN'
wwpn='WWPN' />
</source>

Le chemin d'accès à la cible. Il s'agit du chemin utilisé pour le pool de stockage.

<target>
<path=target_path />
</target>

Important

Lorsque le champ <path> est égal à /dev/libvirt génère un chemin d'accès court et unique pour le chemin d'accès du volume. Par exemple, /dev/sdc. Sinon, le chemin d'accès de l'hôte physique est utilisé. Par exemple, , /dev/disk/by-path/pci-0000:10:00.0-fc-0x5006016044602198-lun-0. Le chemin d'accès court unique permet au même volume d'être répertorié dans plusieurs machines virtuelles (VM) par plusieurs pools de stockage. Si le chemin d'accès de l'hôte physique est utilisé par plusieurs machines virtuelles, des avertissements de duplication de type de périphérique peuvent survenir.

Note

L'attribut parent peut être utilisé dans le champ <adapter> pour identifier le parent HBA physique à partir duquel les LUN NPIV par différents chemins peuvent être utilisés. Ce champ, scsi_hostN, est combiné avec les attributs vports et max_vports pour compléter l'identification du parent. Les attributs parent, parent_wwnn, parent_wwpn ou parent_fabric_wwn garantissent à des degrés divers qu'après le redémarrage de l'hôte, le même HBA est utilisé.

  • Si aucun parent n'est spécifié, libvirt utilise le premier adaptateur scsi_hostN qui prend en charge NPIV.
  • Si seul le site parent est spécifié, des problèmes peuvent survenir si des adaptateurs hôtes SCSI supplémentaires sont ajoutés à la configuration.
  • Si parent_wwnn ou parent_wwpn est spécifié, le même HBA est utilisé après le redémarrage de l'hôte.
  • Si parent_fabric_wwn est utilisé, après le redémarrage de l'hôte, un HBA sur le même tissu est sélectionné, quel que soit le scsi_hostN utilisé.

Examples

Voici des exemples de fichiers XML pour les pools de stockage basés sur SCSI avec vHBA.

  • Un pool de stockage qui est le seul pool de stockage sur le HBA :

    <pool type='scsi'>
      <name>vhbapool_host3</name>
      <source>
        <adapter type='fc_host' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee047d'/>
      </source>
      <target>
        <path>/dev/disk/by-path</path>
      </target>
    </pool>
    Copy to Clipboard Toggle word wrap
  • Un pool de stockage qui fait partie de plusieurs pools de stockage utilisant un seul vHBA et qui utilise l'attribut parent pour identifier le périphérique hôte SCSI :

    <pool type='scsi'>
      <name>vhbapool_host3</name>
      <source>
        <adapter type='fc_host' parent='scsi_host3' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee047d'/>
      </source>
      <target>
        <path>/dev/disk/by-path</path>
      </target>
    </pool>
    Copy to Clipboard Toggle word wrap

Vous pouvez utiliser la CLI pour gérer les aspects suivants de vos volumes de stockage afin d'affecter du stockage à vos machines virtuelles (VM) :

En utilisant la ligne de commande, vous pouvez afficher une liste de tous les pools de stockage disponibles sur votre hôte, ainsi que des détails sur un pool de stockage spécifique

Procédure

  1. La commande virsh vol-list permet de répertorier les volumes de stockage d'un pool de stockage donné.

    # virsh vol-list --pool RHEL-Storage-Pool --details
     Name                Path                                               Type   Capacity  Allocation
    ---------------------------------------------------------------------------------------------
     .bash_history       /home/VirtualMachines/.bash_history       file  18.70 KiB   20.00 KiB
     .bash_logout        /home/VirtualMachines/.bash_logout        file    18.00 B    4.00 KiB
     .bash_profile       /home/VirtualMachines/.bash_profile       file   193.00 B    4.00 KiB
     .bashrc             /home/VirtualMachines/.bashrc             file   1.29 KiB    4.00 KiB
     .git-prompt.sh      /home/VirtualMachines/.git-prompt.sh      file  15.84 KiB   16.00 KiB
     .gitconfig          /home/VirtualMachines/.gitconfig          file   167.00 B    4.00 KiB
     RHEL_Volume.qcow2   /home/VirtualMachines/RHEL8_Volume.qcow2  file  60.00 GiB   13.93 GiB
    Copy to Clipboard Toggle word wrap
  2. La commande virsh vol-info permet de répertorier les volumes de stockage d'un pool de stockage donné.

    # virsh vol-info --pool RHEL-Storage-Pool --vol RHEL_Volume.qcow2
    Name:           RHEL_Volume.qcow2
    Type:           file
    Capacity:       60.00 GiB
    Allocation:     13.93 GiB
    Copy to Clipboard Toggle word wrap

Pour obtenir une image de disque et l'attacher à une machine virtuelle (VM) en tant que disque virtuel, créez un volume de stockage et attribuez sa configuration XML à la VM.

Conditions préalables

  • Un pool de stockage avec de l'espace non alloué est présent sur l'hôte.

    • Pour vérifier, dressez la liste des pools de stockage sur l'hôte :

      # virsh pool-list --details
      
      Name               State     Autostart   Persistent   Capacity     Allocation   Available
      --------------------------------------------------------------------------------------------
      default            running   yes         yes          48.97 GiB    36.34 GiB    12.63 GiB
      Downloads          running   yes         yes          175.92 GiB   121.20 GiB   54.72 GiB
      VM-disks           running   yes         yes          175.92 GiB   121.20 GiB   54.72 GiB
      Copy to Clipboard Toggle word wrap
    • Si vous n'avez pas de pool de stockage existant, créez-en un. Pour plus d'informations, voir Gestion du stockage pour les machines virtuelles.

Procédure

  1. Créez un volume de stockage à l'aide de la commande virsh vol-create-as. Par exemple, pour créer un volume qcow2 de 20 Go basé sur le pool de stockage guest-images-fs:

    # virsh vol-create-as --pool guest-images-fs --name vm-disk1 --capacity 20 --format qcow2
    Copy to Clipboard Toggle word wrap

    Important: Certains types de pools de stockage ne prennent pas en charge la commande virsh vol-create-as et nécessitent des processus spécifiques pour créer des volumes de stockage :

    • iSCSI-based - Préparez les LUN iSCSI à l'avance sur le serveur iSCSI.
    • Multipath-based - Utilisez la commande multipathd pour préparer ou gérer le chemin multiple.
    • vHBA-based - Préparez la carte fibre channel à l'avance.
  2. Créez un fichier XML et ajoutez-y les lignes suivantes. Ce fichier sera utilisé pour ajouter le volume de stockage en tant que disque à une VM.

    <disk type='volume' device='disk'>
        <driver name='qemu' type='qcow2'/>
        <source pool='guest-images-fs' volume='vm-disk1'/>
        <target dev='hdk' bus='ide'/>
    </disk>
    Copy to Clipboard Toggle word wrap

    Cet exemple spécifie un disque virtuel qui utilise le volume vm-disk1, créé à l'étape précédente, et configure le volume en tant que disque hdk sur un bus ide. Modifiez les paramètres respectifs en fonction de votre environnement.

    Important: Avec certains types de pools de stockage, vous devez utiliser différents formats XML pour décrire un disque de volume de stockage.

    • Pour les piscines multipath-based:

      <disk type='block' device='disk'>
      <driver name='qemu' type='raw'/>
      <source dev='/dev/mapper/mpatha' />
      <target dev='sda' bus='scsi'/>
      </disk>
      Copy to Clipboard Toggle word wrap
    • Pour les piscines RBD-based storage:

        <disk type='network' device='disk'>
          <driver name='qemu' type='raw'/>
          <source protocol='rbd' name='pool/image'>
            <host name='mon1.example.org' port='6321'/>
          </source>
          <target dev='vdc' bus='virtio'/>
        </disk>
      Copy to Clipboard Toggle word wrap
  3. Utilisez le fichier XML pour affecter le volume de stockage en tant que disque à une VM. Par exemple, pour affecter un disque défini dans ~/vm-disk1.xml à la VM testguest1, utilisez la commande suivante :

    # virsh attach-device --config testguest1 ~/vm-disk1.xml
    Copy to Clipboard Toggle word wrap

Vérification

  • Dans le système d'exploitation invité de la VM, confirmez que l'image disque est devenue disponible en tant que disque non formaté et non alloué.

Pour supprimer un volume de stockage de votre système hôte, vous devez arrêter le pool et supprimer sa définition XML.

Conditions préalables

  • Toute machine virtuelle utilisant le volume de stockage à supprimer est arrêtée.

Procédure

  1. La commande virsh vol-list permet de répertorier les volumes de stockage d'un pool de stockage donné.

    # virsh vol-list --pool RHEL-SP
     Name                 Path
    ---------------------------------------------------------------
     .bash_history        /home/VirtualMachines/.bash_history
     .bash_logout         /home/VirtualMachines/.bash_logout
     .bash_profile        /home/VirtualMachines/.bash_profile
     .bashrc              /home/VirtualMachines/.bashrc
     .git-prompt.sh       /home/VirtualMachines/.git-prompt.sh
     .gitconfig           /home/VirtualMachines/.gitconfig
     vm-disk1             /home/VirtualMachines/vm-disk1
    Copy to Clipboard Toggle word wrap
  2. Optional: Utilisez la commande virsh vol-wipe pour effacer un volume de stockage. Par exemple, pour effacer un volume de stockage nommé vm-disk1 associé au pool de stockage RHEL-SP:

    # virsh vol-wipe --pool RHEL-SP vm-disk1
    Vol vm-disk1 wiped
    Copy to Clipboard Toggle word wrap
  3. Utilisez la commande virsh vol-delete pour supprimer un volume de stockage. Par exemple, pour supprimer un volume de stockage nommé vm-disk1 associé au pool de stockage RHEL-SP:

    # virsh vol-delete --pool RHEL-SP vm-disk1
    Vol vm-disk1 deleted
    Copy to Clipboard Toggle word wrap

Vérification

  • Utilisez à nouveau la commande virsh vol-list pour vérifier que le volume de stockage a été supprimé.

    # virsh vol-list --pool RHEL-SP
     Name                 Path
    ---------------------------------------------------------------
     .bash_history        /home/VirtualMachines/.bash_history
     .bash_logout         /home/VirtualMachines/.bash_logout
     .bash_profile        /home/VirtualMachines/.bash_profile
     .bashrc              /home/VirtualMachines/.bashrc
     .git-prompt.sh       /home/VirtualMachines/.git-prompt.sh
     .gitconfig           /home/VirtualMachines/.gitconfig
    Copy to Clipboard Toggle word wrap

Les images de disques virtuels sont un type de volumes de stockage virtuels et fournissent un espace de stockage aux machines virtuelles (VM) de la même manière que les disques durs fournissent un espace de stockage aux machines physiques.

Lors de la création d'une nouvelle VM, libvirt crée automatiquement une nouvelle image disque, sauf indication contraire de votre part. Toutefois, en fonction de votre cas d'utilisation, vous pouvez souhaiter créer et gérer une image de disque séparément de la VM.

Si vous avez besoin de créer une nouvelle image de disque virtuel séparément d'une nouvelle machine virtuelle (VM) et que la création d'un volume de stockage n'est pas viable pour vous, vous pouvez utiliser l'utilitaire de ligne de commande qemu-img.

Procédure

  • Créez une image de disque virtuel à l'aide de l'utilitaire qemu-img:

    # qemu-img create -f <format> <image-name> <size>
    Copy to Clipboard Toggle word wrap

    Par exemple, la commande suivante crée une image disque qcow2 nommée test-image d'une taille de 30 gigaoctets.

    # qemu-img create -f qcow2 test-image 30G
    
    Formatting 'test-img', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=32212254720 lazy_refcounts=off refcount_bits=16
    Copy to Clipboard Toggle word wrap

Vérification

  • Affichez les informations relatives à l'image que vous avez créée et vérifiez qu'elle a la taille requise et qu'elle n'est pas corrompue :

    # qemu-img info <test-img>
    image: test-img
    file format: qcow2
    virtual size: 30 GiB (32212254720 bytes)
    disk size: 196 KiB
    cluster_size: 65536
    Format specific information:
        compat: 1.1
        compression type: zlib
        lazy refcounts: false
        refcount bits: 16
        corrupt: false
        extended l2: false
    Copy to Clipboard Toggle word wrap

Avant d'attacher une image de disque à une machine virtuelle (VM), assurez-vous que l'image de disque ne présente pas de problèmes, tels qu'une corruption ou une fragmentation importante. Pour ce faire, vous pouvez utiliser la commande qemu-img check.

Si nécessaire, vous pouvez également utiliser cette commande pour tenter de réparer l'image disque.

Conditions préalables

  • Toutes les machines virtuelles (VM) qui utilisent l'image disque doivent être arrêtées.

Procédure

  1. Utilisez la commande qemu-img check sur l'image que vous souhaitez tester. Par exemple :

    # qemu-img check <test-name.qcow2>
    
    No errors were found on the image.
    327434/327680 = 99.92% allocated, 0.00% fragmented, 0.00% compressed clusters
    Image end offset: 21478375424
    Copy to Clipboard Toggle word wrap

    Si la vérification trouve des problèmes sur l'image de disque, la sortie de la commande ressemble à ce qui suit :

    167 errors were found on the image.
    Data may be corrupted, or further writes to the image may corrupt it.
    
    453368 leaked clusters were found on the image.
    This means waste of disk space, but no harm to data.
    
    259 internal errors have occurred during the check.
    Image end offset: 21478375424
    Copy to Clipboard Toggle word wrap
  2. Réparez-les en utilisant la commande qemu-img check avec l'option -r all. Notez cependant que cela peut ne résoudre qu'une partie des problèmes.

    Avertissement

    La réparation de l'image disque peut entraîner une corruption des données ou d'autres problèmes. Sauvegardez l'image disque avant de procéder à la réparation.

    # qemu-img check -r all <test-name.qcow2>
    
    [...]
    122 errors were found on the image.
    Data may be corrupted, or further writes to the image may corrupt it.
    
    250 internal errors have occurred during the check.
    Image end offset: 27071414272
    Copy to Clipboard Toggle word wrap

    Cette sortie indique le nombre de problèmes trouvés sur l'image disque après la réparation.

  3. Si d'autres réparations d'images de disque sont nécessaires, vous pouvez utiliser divers outils libguestfs dans le shellguestfish .

15.6.3. Redimensionnement d'une image de disque virtuel

Si une image de disque existante nécessite de l'espace supplémentaire, vous pouvez utiliser l'utilitaire qemu-img resize pour modifier la taille de l'image afin de l'adapter à votre cas d'utilisation.

Conditions préalables

  • Vous avez créé une copie de sauvegarde de l'image disque.
  • Toutes les machines virtuelles (VM) qui utilisent l'image disque doivent être arrêtées.

    Avertissement

    Le redimensionnement de l'image disque d'une VM en cours d'exécution peut entraîner une corruption des données ou d'autres problèmes.

  • Le disque dur de l'hôte dispose de suffisamment d'espace libre pour la taille prévue de l'image disque.
  • Facultatif : vous vous êtes assuré que l'image de disque ne présente pas de corruption de données ou de problèmes similaires. Pour plus d'informations, voir Vérification de la cohérence d'une image de disque virtuel.

Procédure

  1. Déterminez l'emplacement du fichier d'image disque de la VM que vous souhaitez redimensionner. Par exemple :

    # virsh domblklist <vm-name>
    
     Target   Source
    ----------------------------------------------------------
     vda      /home/username/disk-images/example-image.qcow2
    Copy to Clipboard Toggle word wrap
  2. Facultatif : Sauvegarder l'image disque actuelle.

    # cp <example-image.qcow2> <example-image-backup.qcow2>
    Copy to Clipboard Toggle word wrap
  3. Utilisez l'utilitaire qemu-img resize pour redimensionner l'image.

    Par exemple, pour augmenter la taille de <example-image.qcow2> de 10 gigaoctets :

    # qemu-img resize <example-image.qcow2> 10G
    Copy to Clipboard Toggle word wrap
  4. Redimensionnez le système de fichiers, les partitions ou les volumes physiques à l'intérieur de l'image disque pour utiliser l'espace supplémentaire. Pour ce faire, dans un système d'exploitation invité RHEL, suivez les instructions des sections Gestion des périphériques de stockage et Gestion des systèmes de fichiers.

Vérification

  1. Affiche des informations sur l'image redimensionnée et vérifie si elle a la taille prévue :

    # qemu-img info <converted-image.qcow2>
    
    image: converted-image.qcow2
    file format: qcow2
    virtual size: 30 GiB (32212254720 bytes)
    disk size: 196 KiB
    cluster_size: 65536
    Format specific information:
        compat: 1.1
        compression type: zlib
        lazy refcounts: false
        refcount bits: 16
        corrupt: false
        extended l2: false
    Copy to Clipboard Toggle word wrap
  2. Vérifiez que l'image de disque redimensionnée ne contient pas d'erreurs potentielles. Pour plus d'informations, voir Vérification de la cohérence d'une image de disque virtuel.

15.6.4. Conversion entre formats d'images de disques virtuels

Vous pouvez convertir l'image du disque virtuel dans un format différent à l'aide de la commande qemu-img convert. Par exemple, la conversion d'un format d'image de disque virtuel à un autre peut s'avérer nécessaire si vous souhaitez attacher l'image de disque à une machine virtuelle (VM) fonctionnant sur un hyperviseur différent.

Conditions préalables

  • Toutes les machines virtuelles (VM) qui utilisent l'image disque doivent être arrêtées.

Procédure

  • Utilisez la commande qemu-im convert pour convertir une image de disque virtuel existante dans un format différent. Par exemple, pour convertir une image de disque raw en une image de disque QCOW2:

    # qemu-img convert -f raw <original-image.img> -O qcow2 <converted-image.qcow2>
    Copy to Clipboard Toggle word wrap

Vérification

  1. Affiche des informations sur l'image convertie et vérifie si elle a le format et la taille prévus.

    # qemu-img info <converted-image.qcow2>
    
    image: converted-image.qcow2
    file format: qcow2
    virtual size: 30 GiB (32212254720 bytes)
    disk size: 196 KiB
    cluster_size: 65536
    Format specific information:
        compat: 1.1
        compression type: zlib
        lazy refcounts: false
        refcount bits: 16
        corrupt: false
        extended l2: false
    Copy to Clipboard Toggle word wrap
  2. Vérifiez que l'image du disque ne contient pas d'erreurs potentielles. pour plus d'informations, voir Vérifier la cohérence d'une image de disque virtuel.

En utilisant RHEL, vous pouvez gérer les volumes de stockage utilisés pour allouer de l'espace à vos machines virtuelles (VM).

Vous pouvez utiliser la console web RHEL pour :

Pour créer une machine virtuelle (VM) opérationnelle, vous avez besoin d'un périphérique de stockage local affecté à la VM et capable de stocker l'image de la VM et les données liées à la VM. Vous pouvez créer un volume de stockage dans un pool de stockage et l'affecter à une VM en tant que disque de stockage.

Pour créer des volumes de stockage à l'aide de la console web, voir la procédure suivante.

Conditions préalables

Procédure

  1. Cliquez sur Pools de stockage en haut de l'onglet Machines virtuelles. La fenêtre Pools de stockage apparaît, affichant une liste des pools de stockage configurés.

  2. Dans la fenêtre Pools de stockage, cliquez sur le pool de stockage à partir duquel vous souhaitez créer un volume de stockage.

    La ligne se développe pour faire apparaître le volet Aperçu qui contient des informations de base sur le pool de stockage sélectionné.

  3. Cliquez sur Volumes de stockage en regard de l'onglet Vue d'ensemble dans la ligne développée.

    L'onglet Volume de stockage s'affiche avec des informations de base sur les volumes de stockage existants, le cas échéant.

  4. Cliquez sur Créer un volume.

    La boîte de dialogue Create storage volume apparaît.

  5. Entrez les informations suivantes dans la boîte de dialogue Créer un volume de stockage :

    • Name - Le nom du volume de stockage.
    • Size - Taille du volume de stockage en MiB ou GiB.
    • Format - Le format du volume de stockage. Les types pris en charge sont qcow2 et raw.
  6. Cliquez sur Créer.

    Le volume de stockage est créé, la boîte de dialogue Créer un volume de stockage se ferme et le nouveau volume de stockage apparaît dans la liste des volumes de stockage.

Vous pouvez supprimer des volumes de stockage pour libérer de l'espace dans le pool de stockage ou pour supprimer des éléments de stockage associés à des machines virtuelles (VM) hors service.

Pour supprimer des volumes de stockage à l'aide de la console web RHEL, voir la procédure suivante.

Conditions préalables

Procédure

  1. Cliquez sur Pools de stockage en haut de l'onglet Machines virtuelles. La fenêtre Pools de stockage apparaît, affichant une liste des pools de stockage configurés.

  2. Dans la fenêtre Pools de stockage, cliquez sur le pool de stockage à partir duquel vous souhaitez supprimer un volume de stockage.

    La ligne se développe pour faire apparaître le volet Aperçu qui contient des informations de base sur le pool de stockage sélectionné.

  3. Cliquez sur Volumes de stockage en regard de l'onglet Vue d'ensemble dans la ligne développée.

    L'onglet Volume de stockage s'affiche avec des informations de base sur les volumes de stockage existants, le cas échéant.

  4. Sélectionnez le volume de stockage que vous souhaitez supprimer.

  5. Cliquez sur Supprimer 1 volume

En utilisant RHEL, vous pouvez gérer les disques de stockage qui sont attachés à vos machines virtuelles (VM).

Vous pouvez utiliser la console web RHEL pour :

En utilisant la console web, vous pouvez afficher des informations détaillées sur les disques affectés à une machine virtuelle (VM) sélectionnée.

Conditions préalables

Procédure

  1. Cliquez sur la VM dont vous souhaitez consulter les informations.

    Une nouvelle page s'ouvre avec une section Vue d'ensemble contenant des informations de base sur la VM sélectionnée et une section Console permettant d'accéder à l'interface graphique de la VM.

  2. Faites défiler jusqu'à Disques.

    La section Disques affiche des informations sur les disques affectés à la VM, ainsi que des options permettant d'accéder à Add ou Edit.

Les informations comprennent les éléments suivants :

  • Device - Le type de périphérique du disque.
  • Used - Quantité de disque actuellement allouée.
  • Capacity - Taille maximale du volume de stockage.
  • Bus - Le type de disque émulé.
  • Access - Si le disque est Writeable ou Read-only. Pour les disques raw, vous pouvez également définir l'accès à Writeable and shared.
  • Source - L'unité de disque ou le fichier.

Vous pouvez ajouter de nouveaux disques aux machines virtuelles (VM) en créant un nouveau volume de stockage et en l'attachant à une VM à l'aide de la console web RHEL 9.

Conditions préalables

Procédure

  1. Dans l'interface Machines virtuelles, cliquez sur la VM pour laquelle vous souhaitez créer et attacher un nouveau disque.

    Une nouvelle page s'ouvre avec une section Vue d'ensemble contenant des informations de base sur la VM sélectionnée et une section Console permettant d'accéder à l'interface graphique de la VM.

  2. Faites défiler jusqu'à Disques.

    La section Disques affiche des informations sur les disques affectés à la VM, ainsi que des options permettant d'accéder à Add ou Edit.

  3. Cliquez sur Ajouter un disque.

    La boîte de dialogue Add Disk apparaît.

    Image affichant la boîte de dialogue Ajouter un disque.

  4. Sélectionnez l'option Create New.
  5. Configurez le nouveau disque.

    • Pool - Sélectionnez le pool de stockage à partir duquel le disque virtuel sera créé.
    • Name - Entrez un nom pour le disque virtuel qui sera créé.
    • Size - Entrez la taille et sélectionnez l'unité (MiB ou GiB) du disque virtuel qui sera créé.
    • Format - Sélectionnez le format du disque virtuel qui sera créé. Les types pris en charge sont qcow2 et raw.
    • Persistence - Si cette case est cochée, le disque virtuel est persistant. Si la case n'est pas cochée, le disque virtuel est transitoire.

      Note

      Les disques transitoires ne peuvent être ajoutés qu'à des machines virtuelles en cours d'exécution.

    • Additional Options - Définir des configurations supplémentaires pour le disque virtuel.

      • Cache - Sélectionnez le mécanisme de cache.
      • Bus - Sélectionnez le type de disque à émuler.
      • Disk Identifier - Définissez un identifiant pour le disque connecté que vous pouvez utiliser pour les configurations de stockage à chemins multiples. L'identifiant est également utile lors de l'utilisation de logiciels propriétaires dont la licence est liée à des numéros de série de disque spécifiques.
  6. Cliquez sur Ajouter.

    Le disque virtuel est créé et connecté à la VM.

En utilisant la console web, vous pouvez attacher des volumes de stockage existants en tant que disques à une machine virtuelle (VM).

Conditions préalables

Procédure

  1. Dans l'interface Machines virtuelles, cliquez sur la VM pour laquelle vous souhaitez créer et attacher un nouveau disque.

    Une nouvelle page s'ouvre avec une section Vue d'ensemble contenant des informations de base sur la VM sélectionnée et une section Console permettant d'accéder à l'interface graphique de la VM.

  2. Faites défiler jusqu'à Disques.

    La section Disques affiche des informations sur les disques affectés à la VM, ainsi que des options permettant d'accéder à Add ou Edit.

  3. Cliquez sur Ajouter un disque.

    La boîte de dialogue Add Disk apparaît.

  4. Cliquez sur le bouton radio Use Existing.

    Les champs de configuration appropriés apparaissent dans la boîte de dialogue Ajouter un disque.

  5. Configurer le disque pour la VM.

    • Pool - Sélectionnez le pool de stockage à partir duquel le disque virtuel sera attaché.
    • Volume - Sélectionnez le volume de stockage qui sera attaché.
    • Persistence - Disponible lorsque la VM est en cours d'exécution. Cochez la case Always attach pour rendre le disque virtuel persistant. Décochez la case pour rendre le disque virtuel transitoire.
    • Additional Options - Définir des configurations supplémentaires pour le disque virtuel.

      • Cache - Sélectionnez le mécanisme de cache.
      • Bus - Sélectionnez le type de disque à émuler.
      • Disk Identifier - Définissez un identifiant pour le disque connecté que vous pouvez utiliser pour les configurations de stockage à chemins multiples. L'identifiant est également utile lors de l'utilisation de logiciels propriétaires dont la licence est liée à des numéros de série de disque spécifiques.
  6. Cliquez sur Ajouter

    Le disque virtuel sélectionné est attaché à la VM.

En utilisant la console web, vous pouvez détacher les disques des machines virtuelles (VM).

Conditions préalables

Procédure

  1. Dans l'interface Machines virtuelles, cliquez sur la VM dont vous souhaitez détacher un disque.

    Une nouvelle page s'ouvre avec une section Vue d'ensemble contenant des informations de base sur la VM sélectionnée et une section Console permettant d'accéder à l'interface graphique de la VM.

  2. Faites défiler jusqu'à Disques.

    La section Disques affiche des informations sur les disques affectés à la VM, ainsi que des options permettant d'accéder à Add ou Edit.

  3. Dans la partie droite de la ligne correspondant au disque que vous souhaitez détacher, cliquez sur le bouton Menu .
  4. Dans le menu déroulant qui apparaît, cliquez sur le bouton Supprimer.

    Une boîte de dialogue de confirmation Remove disk from VM? apparaît.

  5. Dans la boîte de dialogue de confirmation, cliquez sur Supprimer. Si vous souhaitez également supprimer l'image disque, cliquez sur Supprimer et supprimer le fichier.

    Le disque virtuel est détaché de la VM.

Les paramètres de nom d'utilisateur et de mot de passe peuvent être configurés à l'adresse virsh pour sécuriser un pool de stockage iSCSI. Vous pouvez configurer cela avant ou après avoir défini le pool, mais le pool doit être démarré pour que les paramètres d'authentification soient pris en compte.

Les instructions suivantes permettent de sécuriser les pools de stockage basés sur iSCSI à l'aide des secrets libvirt.

Note

Cette procédure est requise si un user_ID et password ont été définis lors de la création de la cible iSCSI.

Conditions préalables

Procédure

  1. Créez un fichier secret libvirt avec un nom d'utilisateur CHAP (challenge-handshake authentication protocol). Par exemple, vous pouvez créer un fichier secret libvirt avec un nom d'utilisateur CHAP :

    <secret ephemeral='no' private='yes'>
        <description>Passphrase for the iSCSI example.com server</description>
        <usage type='iscsi'>
            <target>iscsirhel7secret</target>
        </usage>
    </secret>
    Copy to Clipboard Toggle word wrap
  2. Définissez le secret libvirt avec la commande virsh secret-define:

    # virsh secret-define secret.xml
    Copy to Clipboard Toggle word wrap
  3. Vérifiez l'UUID à l'aide de la commande virsh secret-list:

    # virsh secret-list
    UUID                                       Usage
    --------------------------------------------------------------
    2d7891af-20be-4e5e-af83-190e8a922360      iscsi iscsirhel7secret
    Copy to Clipboard Toggle word wrap
  4. Attribuez un secret à l'UUID dans la sortie de l'étape précédente à l'aide de la commande virsh secret-set-value. Cela garantit que le nom d'utilisateur et le mot de passe CHAP figurent dans une liste de secrets contrôlée par libvirt. Par exemple :

    # virsh secret-set-value --interactive 2d7891af-20be-4e5e-af83-190e8a922360
    Enter new value for secret:
    Secret value set
    Copy to Clipboard Toggle word wrap
  5. Ajoutez une entrée d'authentification dans le fichier XML du pool de stockage à l'aide de la commande virsh edit et ajoutez un élément <auth>, en spécifiant authentication type, username et secret usage. Par exemple :

    <pool type='iscsi'>
      <name>iscsirhel7pool</name>
        <source>
           <host name='192.0.2.1'/>
           <device path='iqn.2010-05.com.example.server1:iscsirhel7guest'/>
           <auth type='chap' username='_example-user_'>
              <secret usage='iscsirhel7secret'/>
           </auth>
        </source>
      <target>
        <path>/dev/disk/by-path</path>
      </target>
    </pool>
    Copy to Clipboard Toggle word wrap
    Note

    Le sous-élément <auth> le sous-élément existe à différents endroits dans les fichiers de la machine virtuelle <pool> et <disk> XML de la machine virtuelle. Pour un élément <pool>, <auth> est spécifié dans l'élément <source> car il décrit où trouver les sources de pool, l'authentification étant une propriété de certaines sources de pool (iSCSI et RBD). Pour un <disk>qui est un sous-élément d'un domaine, l'authentification du disque iSCSI ou RBD est une propriété du disque. En outre, le sous-élément <auth> d'un disque diffère de celui d'un pool de stockage.

    <auth username='redhat'>
      <secret type='iscsi' usage='iscsirhel7secret'/>
    </auth>
    Copy to Clipboard Toggle word wrap
  6. Pour activer les modifications, activez le pool de stockage. Si le pool a déjà été démarré, arrêtez et redémarrez le pool de stockage :

    # virsh pool-destroy iscsirhel7pool
    # virsh pool-start iscsirhel7pool
    Copy to Clipboard Toggle word wrap

15.10. Créer des vHBA

Un adaptateur de bus hôte virtuel (vHBA) relie le système hôte à un périphérique SCSI et est nécessaire pour créer un pool de stockage basé sur SCSI.

Vous pouvez créer un dispositif vHBA en le définissant dans un fichier de configuration XML.

Procédure

  1. Localisez les HBA sur votre système hôte en utilisant la commande virsh nodedev-list --cap vports.

    L'exemple suivant présente un hôte doté de deux HBA prenant en charge le vHBA :

    # virsh nodedev-list --cap vports
    scsi_host3
    scsi_host4
    Copy to Clipboard Toggle word wrap
  2. Affichez les détails du HBA à l'aide de la commande virsh nodedev-dumpxml HBA_device à l'aide de la commande

    # virsh nodedev-dumpxml scsi_host3
    Copy to Clipboard Toggle word wrap

    La sortie de la commande répertorie les champs <name>, <wwnn> et <wwpn>, qui sont utilisés pour créer un vHBA. <max_vports> indique le nombre maximum de vHBA pris en charge. Par exemple :

    <device>
      <name>scsi_host3</name>
      <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3</path>
      <parent>pci_0000_10_00_0</parent>
      <capability type='scsi_host'>
        <host>3</host>
        <unique_id>0</unique_id>
        <capability type='fc_host'>
          <wwnn>20000000c9848140</wwnn>
          <wwpn>10000000c9848140</wwpn>
          <fabric_wwn>2002000573de9a81</fabric_wwn>
        </capability>
        <capability type='vport_ops'>
          <max_vports>127</max_vports>
          <vports>0</vports>
        </capability>
      </capability>
    </device>
    Copy to Clipboard Toggle word wrap

    Dans cet exemple, la valeur <max_vports> indique qu'il y a un total de 127 ports virtuels disponibles dans la configuration HBA. La valeur <vports> indique le nombre de ports virtuels actuellement utilisés. Ces valeurs sont mises à jour après la création d'un vHBA.

  3. Créez un fichier XML similaire à l'un des fichiers suivants pour l'hôte vHBA. Dans ces exemples, le fichier est nommé vhba_host3.xml.

    Cet exemple utilise scsi_host3 pour décrire le vHBA parent.

    <device>
      <parent>scsi_host3</parent>
      <capability type='scsi_host'>
        <capability type='fc_host'>
        </capability>
      </capability>
    </device>
    Copy to Clipboard Toggle word wrap

    Cet exemple utilise une paire WWNN/WWPN pour décrire le vHBA parent.

    <device>
      <name>vhba</name>
      <parent wwnn='20000000c9848140' wwpn='10000000c9848140'/>
      <capability type='scsi_host'>
        <capability type='fc_host'>
        </capability>
      </capability>
    </device>
    Copy to Clipboard Toggle word wrap
    Note

    Les valeurs WWNN et WWPN doivent correspondre à celles indiquées dans les détails du HBA vus à l'étape précédente.

    Le champ <parent> indique le périphérique HBA à associer à ce périphérique vHBA. Les détails de la balise <device> sont utilisés dans l'étape suivante pour créer un nouveau périphérique vHBA pour l'hôte. Pour plus d'informations sur le format XML nodedev, consultez les pages en amont de libvirt.

    Note

    La commande virsh ne permet pas de définir les attributs parent_wwnn, parent_wwpn ou parent_fabric_wwn.

  4. Créez un VHBA basé sur le fichier XML créé à l'étape précédente en utilisant la commande virsh nodev-create.

    # virsh nodedev-create vhba_host3
    Node device scsi_host5 created from vhba_host3.xml
    Copy to Clipboard Toggle word wrap

Vérification

  • Vérifiez les détails du nouveau vHBA (scsi_host5) en utilisant la commande virsh nodedev-dumpxml:

    # virsh nodedev-dumpxml scsi_host5
    <device>
      <name>scsi_host5</name>
      <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3/vport-3:0-0/host5</path>
      <parent>scsi_host3</parent>
      <capability type='scsi_host'>
        <host>5</host>
        <unique_id>2</unique_id>
        <capability type='fc_host'>
          <wwnn>5001a4a93526d0a1</wwnn>
          <wwpn>5001a4ace3ee047d</wwpn>
          <fabric_wwn>2002000573de9a81</fabric_wwn>
        </capability>
      </capability>
    </device>
    Copy to Clipboard Toggle word wrap

Pour améliorer les performances graphiques de vos machines virtuelles (VM) sur un hôte RHEL 9, vous pouvez affecter un GPU hôte à une VM.

  • Vous pouvez détacher le GPU de l'hôte et passer le contrôle total du GPU directement à la VM.
  • Vous pouvez créer plusieurs périphériques médiatisés à partir d'un GPU physique et les affecter en tant que GPU virtuels (vGPU) à plusieurs invités. Cette fonction n'est actuellement prise en charge que sur certains GPU NVIDIA, et un seul périphérique médiatisé peut être attribué à un seul invité.
Important

L'affectation de GPU n'est actuellement prise en charge que sur les systèmes Intel 64 et AMD64.

16.1. Affectation d'un GPU à une machine virtuelle

Pour accéder aux GPU attachés au système hôte et les contrôler, vous devez configurer le système hôte pour qu'il transmette le contrôle direct du GPU à la machine virtuelle (VM).

Note

Si vous recherchez des informations sur l'attribution d'un GPU virtuel, consultez la section Gestion des périphériques NVIDIA vGPU.

Conditions préalables

  • Vous devez activer la prise en charge de l'IOMMU dans le noyau de la machine hôte.

    • Sur un hôte Intel, vous devez activer VT-d :

      1. Régénérer la configuration GRUB avec les paramètres intel_iommu=on et iommu=pt:

        # grubby --args="intel_iommu=on iommu_pt" --update-kernel DEFAULT
        Copy to Clipboard Toggle word wrap
      2. Redémarrer l'hôte.
    • Sur un hôte AMD, vous devez activer AMD-Vi.

      Notez que sur les hôtes AMD, IOMMU est activé par défaut, vous pouvez ajouter iommu=pt pour le faire passer en mode pass-through :

      1. Régénérer la configuration GRUB avec le paramètre iommu=pt:

        # grubby --args="iommu=pt" --update-kernel DEFAULT
        Copy to Clipboard Toggle word wrap
        Note

        L'option pt n'active l'IOMMU que pour les périphériques utilisés en mode pass-through et offre de meilleures performances à l'hôte. Cependant, tous les matériels ne prennent pas en charge cette option. Vous pouvez toujours attribuer des périphériques même si cette option n'est pas activée.

      2. Redémarrer l'hôte.

Procédure

  1. Empêche le pilote de se lier au GPU.

    1. Identifier l'adresse du bus PCI auquel le GPU est connecté.

      # lspci -Dnn | grep VGA
      0000:02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK106GL [Quadro K4000] [10de:11fa] (rev a1)
      Copy to Clipboard Toggle word wrap
    2. Empêcher le pilote graphique de l'hôte d'utiliser le GPU. Pour ce faire, utilisez l'ID PCI du GPU avec le pilote pci-stub.

      Par exemple, la commande suivante empêche le pilote de se lier au GPU connecté au bus 10de:11fa:

      # grubby --args="pci-stub.ids=10de:11fa" --update-kernel DEFAULT
      Copy to Clipboard Toggle word wrap
    3. Redémarrer l'hôte.
  2. Optional: Si certaines fonctions GPU, telles que l'audio, ne peuvent pas être transmises à la VM en raison de limitations de prise en charge, vous pouvez modifier les liaisons de pilote des points d'extrémité au sein d'un groupe IOMMU afin de ne transmettre que les fonctions GPU nécessaires.

    1. Convertissez les paramètres du GPU en XML et notez l'adresse PCI des points d'extrémité que vous souhaitez empêcher de s'attacher aux pilotes de l'hôte.

      Pour ce faire, convertissez l'adresse du bus PCI du GPU dans un format compatible avec libvirt en ajoutant le préfixe pci_ à l'adresse et en convertissant les délimiteurs en traits de soulignement.

      Par exemple, la commande suivante affiche la configuration XML du GPU connecté à l'adresse de bus 0000:02:00.0.

      # virsh nodedev-dumpxml pci_0000_02_00_0
      Copy to Clipboard Toggle word wrap
      <device>
       <name>pci_0000_02_00_0</name>
       <path>/sys/devices/pci0000:00/0000:00:03.0/0000:02:00.0</path>
       <parent>pci_0000_00_03_0</parent>
       <driver>
        <name>pci-stub</name>
       </driver>
       <capability type='pci'>
        <domain>0</domain>
        <bus>2</bus>
        <slot>0</slot>
        <function>0</function>
        <product id='0x11fa'>GK106GL [Quadro K4000]</product>
        <vendor id='0x10de'>NVIDIA Corporation</vendor>
        <iommuGroup number='13'>
         <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
         <address domain='0x0000' bus='0x02' slot='0x00' function='0x1'/>
        </iommuGroup>
        <pci-express>
         <link validity='cap' port='0' speed='8' width='16'/>
         <link validity='sta' speed='2.5' width='16'/>
        </pci-express>
       </capability>
      </device>
      Copy to Clipboard Toggle word wrap
    2. Empêcher les points d'extrémité de s'attacher au pilote de l'hôte.

      Dans cet exemple, pour affecter le GPU à une VM, empêchez les points d'extrémité correspondant à la fonction audio, <address domain='0x0000' bus='0x02' slot='0x00' function='0x1'/>, de s'attacher au pilote audio de l'hôte, et attachez plutôt les points d'extrémité à VFIO-PCI.

      # driverctl set-override 0000:02:00.1 vfio-pci
      Copy to Clipboard Toggle word wrap
  3. Attacher le GPU à la VM

    1. Créer un fichier de configuration XML pour le GPU en utilisant l'adresse du bus PCI.

      Par exemple, vous pouvez créer le fichier XML suivant, GPU-Assign.xml, en utilisant les paramètres de l'adresse du bus du GPU.

      <hostdev mode='subsystem' type='pci' managed='yes'>
       <driver name='vfio'/>
       <source>
        <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
       </source>
      </hostdev>
      Copy to Clipboard Toggle word wrap
    2. Enregistrer le fichier sur le système hôte.
    3. Fusionner le fichier avec la configuration XML de la VM.

      Par exemple, la commande suivante fusionne le fichier XML du GPU, GPU-Assign.xml, avec le fichier de configuration XML de la VM System1.

      # virsh attach-device System1 --file /home/GPU-Assign.xml --persistent
      Device attached successfully.
      Copy to Clipboard Toggle word wrap
      Note

      Le GPU est attaché en tant que périphérique graphique secondaire à la VM. L'affectation d'un GPU en tant que périphérique graphique principal n'est pas prise en charge, et Red Hat ne recommande pas de supprimer le périphérique graphique émulé principal dans la configuration XML de la VM.

Vérification

Problèmes connus

  • Le nombre de GPU pouvant être attachés à une VM est limité par le nombre maximum de périphériques PCI assignés, qui est actuellement de 64 dans RHEL 9. Cependant, le fait d'attacher plusieurs GPU à une VM est susceptible de causer des problèmes avec l'E/S mappée en mémoire (MMIO) sur l'invité, ce qui peut avoir pour conséquence que les GPU ne sont pas disponibles pour la VM.

    Pour contourner ces problèmes, définissez un espace MMIO 64 bits plus important et configurez les bits d'adresse physique de la vCPU de manière à ce que l'espace MMIO 64 bits étendu soit adressable.

  • La connexion d'un périphérique GPU NVIDIA à une VM utilisant un système d'exploitation invité RHEL 9 désactive actuellement la session Wayland sur cette VM et charge une session Xorg à la place. Ceci est dû à des incompatibilités entre les pilotes NVIDIA et Wayland.

16.2. Gestion des périphériques NVIDIA vGPU

La fonction vGPU permet de diviser un périphérique GPU NVIDIA physique en plusieurs périphériques virtuels, appelés mediated devices. Ces dispositifs médiatisés peuvent ensuite être affectés à plusieurs machines virtuelles (VM) en tant que GPU virtuels. Ces machines virtuelles peuvent ainsi partager les performances d'un seul GPU physique.

Important

L'attribution d'un GPU physique aux VM, avec ou sans utilisation de périphériques médiatisés, rend impossible l'utilisation du GPU par l'hôte.

16.2.1. Configuration des périphériques NVIDIA vGPU

Pour configurer la fonction NVIDIA vGPU, vous devez télécharger les pilotes NVIDIA vGPU pour votre périphérique GPU, créer des périphériques médiatisés et les affecter aux machines virtuelles concernées. Pour des instructions détaillées, voir ci-dessous.

Conditions préalables

  • Votre GPU prend en charge les appareils à médiation vGPU. Pour obtenir une liste actualisée des GPU NVIDIA prenant en charge la création de vGPU, consultez la documentation du logiciel NVIDIA vGPU.

    • Si vous ne savez pas quel GPU utilise votre hôte, installez le paquetage lshw et utilisez la commande lshw -C display. L'exemple suivant montre que le système utilise un GPU NVIDIA Tesla P4, compatible avec vGPU.

      # lshw -C display
      
      *-display
             description: 3D controller
             product: GP104GL [Tesla P4]
             vendor: NVIDIA Corporation
             physical id: 0
             bus info: pci@0000:01:00.0
             version: a1
             width: 64 bits
             clock: 33MHz
             capabilities: pm msi pciexpress cap_list
             configuration: driver=vfio-pci latency=0
             resources: irq:16 memory:f6000000-f6ffffff memory:e0000000-efffffff memory:f0000000-f1ffffff
      Copy to Clipboard Toggle word wrap

Procédure

  1. Téléchargez les pilotes NVIDIA vGPU et installez-les sur votre système. Pour obtenir des instructions, consultez la documentation de NVIDIA.
  2. Si le programme d'installation du logiciel NVIDIA n'a pas créé le fichier /etc/modprobe.d/nvidia-installer-disable-nouveau.conf, créez un fichier conf de n'importe quel nom dans /etc/modprobe.d/, et ajoutez les lignes suivantes dans le fichier :

    blacklist nouveau
    options nouveau modeset=0
    Copy to Clipboard Toggle word wrap
  3. Régénérer le ramdisk initial pour le noyau actuel, puis redémarrer.

    # dracut --force
    # reboot
    Copy to Clipboard Toggle word wrap
  4. Vérifiez que le noyau a chargé le module nvidia_vgpu_vfio et que le service nvidia-vgpu-mgr.service fonctionne.

    # lsmod | grep nvidia_vgpu_vfio
    nvidia_vgpu_vfio 45011 0
    nvidia 14333621 10 nvidia_vgpu_vfio
    mdev 20414 2 vfio_mdev,nvidia_vgpu_vfio
    vfio 32695 3 vfio_mdev,nvidia_vgpu_vfio,vfio_iommu_type1
    
    # systemctl status nvidia-vgpu-mgr.service
    nvidia-vgpu-mgr.service - NVIDIA vGPU Manager Daemon
       Loaded: loaded (/usr/lib/systemd/system/nvidia-vgpu-mgr.service; enabled; vendor preset: disabled)
       Active: active (running) since Fri 2018-03-16 10:17:36 CET; 5h 8min ago
     Main PID: 1553 (nvidia-vgpu-mgr)
     [...]
    Copy to Clipboard Toggle word wrap

    En outre, si vous créez une vGPU basée sur un périphérique GPU NVIDIA Ampere, assurez-vous que les fonctions virtuelles sont activées pour le GPU physique. Pour plus d'informations, consultez la documentation de NVIDIA.

  5. Générer un UUID de l'appareil.

    # uuidgen
    30820a6f-b1a5-4503-91ca-0c10ba58692a
    Copy to Clipboard Toggle word wrap
  6. Préparer un fichier XML avec une configuration du dispositif médiatisé, basée sur le matériel GPU détecté. Par exemple, l'exemple suivant configure un périphérique médiatisé de type nvidia-63 vGPU sur une carte NVIDIA Tesla P4 qui fonctionne sur le bus PCI 0000:01:00.0 et utilise l'UUID généré à l'étape précédente.

    <device>
        <parent>pci_0000_01_00_0</parent>
        <capability type="mdev">
            <type id="nvidia-63"/>
            <uuid>30820a6f-b1a5-4503-91ca-0c10ba58692a</uuid>
        </capability>
    </device>
    Copy to Clipboard Toggle word wrap
  7. Définissez un dispositif vGPU basé sur le fichier XML que vous avez préparé. Par exemple :

    # virsh nodedev-define vgpu-test.xml
    Node device mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 created from vgpu-test.xml
    Copy to Clipboard Toggle word wrap
  8. Optional: Vérifiez que le dispositif médiatisé est répertorié comme inactif.

    # virsh nodedev-list --cap mdev --inactive
    mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Copy to Clipboard Toggle word wrap
  9. Démarrez le dispositif vGPU que vous avez créé.

    # virsh nodedev-start mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Device mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 started
    Copy to Clipboard Toggle word wrap
  10. Optional: Assurez-vous que le dispositif médiatisé est répertorié comme actif.

    # virsh nodedev-list --cap mdev
    mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Copy to Clipboard Toggle word wrap
  11. Configurer le périphérique vGPU pour qu'il démarre automatiquement après le redémarrage de l'hôte

    # virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Device mdev_d196754e_d8ed_4f43_bf22_684ed698b08b_0000_9b_00_0 marked as autostarted
    Copy to Clipboard Toggle word wrap
  12. Attachez le dispositif médiatisé à une VM dont vous souhaitez partager les ressources vGPU. Pour ce faire, ajoutez les lignes suivantes, ainsi que l'UUID précédemment généré, aux sections <devices/> de la configuration XML de la VM.

    <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='on'>
      <source>
        <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/>
      </source>
    </hostdev>
    Copy to Clipboard Toggle word wrap

    Notez que chaque UUID ne peut être attribué qu'à une seule VM à la fois. En outre, si la VM n'a pas de périphériques vidéo QEMU, tels que virtio-vga, ajoutez également le paramètre ramfb='on' sur la ligne <hostdev>.

  13. Pour que toutes les fonctionnalités des périphériques vGPU soient disponibles sur les machines virtuelles assignées, configurez la licence du logiciel invité NVIDIA vGPU sur les machines virtuelles. Pour plus d'informations et d'instructions, consultez le Guide de l'utilisateur du serveur de licences logicielles NVIDIA Virtual GPU.

Vérification

  1. Interrogez les capacités de la vGPU que vous avez créée et assurez-vous qu'elle est répertoriée comme active et persistante.

    # virsh nodedev-info mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Name:           virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Parent:         pci_0000_01_00_0
    Active:         yes
    Persistent:     yes
    Autostart:      yes
    Copy to Clipboard Toggle word wrap
  2. Démarrez la VM et vérifiez que le système d'exploitation invité détecte le périphérique médiatisé comme étant un GPU NVIDIA. Par exemple, si la VM utilise Linux :

    # lspci -d 10de: -k
    07:00.0 VGA compatible controller: NVIDIA Corporation GV100GL [Tesla V100 SXM2 32GB] (rev a1)
            Subsystem: NVIDIA Corporation Device 12ce
            Kernel driver in use: nvidia
            Kernel modules: nouveau, nvidia_drm, nvidia
    Copy to Clipboard Toggle word wrap

Problèmes connus

  • L'attribution d'un périphérique NVIDIA vGPU à une VM qui utilise un système d'exploitation invité RHEL 9 désactive actuellement la session Wayland sur cette VM et charge une session Xorg à la place. Ceci est dû à des incompatibilités entre les pilotes NVIDIA et Wayland.

16.2.2. Suppression des périphériques NVIDIA vGPU

Pour modifier la configuration des périphériques vGPU assignés, vous devez supprimer les périphériques existants des machines virtuelles assignées. Pour plus d'informations, voir ci-dessous :

Conditions préalables

  • La VM à partir de laquelle vous souhaitez supprimer le périphérique est arrêtée.

Procédure

  1. Obtenez l'ID du dispositif médiatisé que vous souhaitez supprimer.

    # virsh nodedev-list --cap mdev
    mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Copy to Clipboard Toggle word wrap
  2. Arrêter l'instance en cours d'exécution du dispositif vGPU.

    # virsh nodedev-destroy mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Destroyed node device 'mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0'
    Copy to Clipboard Toggle word wrap
  3. Optional: Assurez-vous que le dispositif de médiation a été désactivé.

    # virsh nodedev-info mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Name:           virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Parent:         pci_0000_01_00_0
    Active:         no
    Persistent:     yes
    Autostart:      yes
    Copy to Clipboard Toggle word wrap
  4. Supprimez le périphérique de la configuration XML de la VM. Pour ce faire, utilisez l'utilitaire virsh edit pour modifier la configuration XML de la VM, et supprimez le segment de configuration de mdev. Le segment ressemblera à ce qui suit :

    <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci'>
      <source>
        <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/>
      </source>
    </hostdev>
    Copy to Clipboard Toggle word wrap

    Notez que l'arrêt et le détachement du périphérique médiatisé ne le supprime pas, mais le conserve à l'adresse defined. Vous pouvez donc redémarrer et attacher le périphérique à une autre VM.

  5. Optional: Pour supprimer le dispositif à médiation arrêté, supprimez sa définition.

    # virsh nodedev-undefine mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Undefined node device 'mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0'
    Copy to Clipboard Toggle word wrap

Vérification

  • Si vous avez seulement arrêté et détaché le périphérique, assurez-vous que le périphérique médiatisé est répertorié comme inactif.

    # virsh nodedev-list --cap mdev --inactive
    mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Copy to Clipboard Toggle word wrap
  • Si vous avez également supprimé le périphérique, assurez-vous que la commande suivante ne l'affiche pas.

    # virsh nodedev-list --cap mdev
    Copy to Clipboard Toggle word wrap

Pour évaluer les capacités des fonctions vGPU à votre disposition, vous pouvez obtenir des informations supplémentaires sur les périphériques médiatisés de votre système, telles que

  • Combien de dispositifs médiatisés d'un type donné peuvent être créés ?
  • Quels sont les dispositifs à médiation déjà configurés sur votre système.

Procédure

  • Pour voir les périphériques GPU disponibles sur votre hôte qui peuvent prendre en charge les périphériques vGPU, utilisez la commande virsh nodedev-list --cap mdev_types. Par exemple, l'illustration suivante montre un système avec deux périphériques NVIDIA Quadro RTX6000.

    # virsh nodedev-list --cap mdev_types
    pci_0000_5b_00_0
    pci_0000_9b_00_0
    Copy to Clipboard Toggle word wrap
  • Pour afficher les types de vGPU pris en charge par un périphérique GPU spécifique, ainsi que des métadonnées supplémentaires, utilisez la commande virsh nodedev-dumpxml.

    # virsh nodedev-dumpxml pci_0000_9b_00_0
    <device>
      <name>pci_0000_9b_00_0</name>
      <path>/sys/devices/pci0000:9a/0000:9a:00.0/0000:9b:00.0</path>
      <parent>pci_0000_9a_00_0</parent>
      <driver>
        <name>nvidia</name>
      </driver>
      <capability type='pci'>
        <class>0x030000</class>
        <domain>0</domain>
        <bus>155</bus>
        <slot>0</slot>
        <function>0</function>
        <product id='0x1e30'>TU102GL [Quadro RTX 6000/8000]</product>
        <vendor id='0x10de'>NVIDIA Corporation</vendor>
        <capability type='mdev_types'>
          <type id='nvidia-346'>
            <name>GRID RTX6000-12C</name>
            <deviceAPI>vfio-pci</deviceAPI>
            <availableInstances>2</availableInstances>
          </type>
          <type id='nvidia-439'>
            <name>GRID RTX6000-3A</name>
            <deviceAPI>vfio-pci</deviceAPI>
            <availableInstances>8</availableInstances>
          </type>
          [...]
          <type id='nvidia-440'>
            <name>GRID RTX6000-4A</name>
            <deviceAPI>vfio-pci</deviceAPI>
            <availableInstances>6</availableInstances>
          </type>
          <type id='nvidia-261'>
            <name>GRID RTX6000-8Q</name>
            <deviceAPI>vfio-pci</deviceAPI>
            <availableInstances>3</availableInstances>
          </type>
        </capability>
        <iommuGroup number='216'>
          <address domain='0x0000' bus='0x9b' slot='0x00' function='0x3'/>
          <address domain='0x0000' bus='0x9b' slot='0x00' function='0x1'/>
          <address domain='0x0000' bus='0x9b' slot='0x00' function='0x2'/>
          <address domain='0x0000' bus='0x9b' slot='0x00' function='0x0'/>
        </iommuGroup>
        <numa node='2'/>
        <pci-express>
          <link validity='cap' port='0' speed='8' width='16'/>
          <link validity='sta' speed='2.5' width='8'/>
        </pci-express>
      </capability>
    </device>
    Copy to Clipboard Toggle word wrap

Les services de streaming de bureau à distance suivants sont pris en charge sur l'hyperviseur RHEL 9 avec NVIDIA vGPU ou NVIDIA GPU passthrough activé :

  • HP ZCentral Remote Boost/Teradici
  • NICE DCV
  • Mechdyne TGX

Pour plus de détails sur l'assistance, voir la matrice d'assistance du fournisseur approprié.

Pour que vos machines virtuelles (VM) puissent se connecter sur un réseau à votre hôte, à d'autres VM sur votre hôte et à des emplacements sur un réseau externe, la mise en réseau de la VM doit être configurée en conséquence. Pour assurer la mise en réseau des VM, l'hyperviseur RHEL 9 et les VM nouvellement créées disposent d'une configuration réseau par défaut, qui peut également être modifiée. Cette configuration peut être modifiée :

  • Vous pouvez permettre aux VM de votre hôte d'être découvertes et connectées à partir d'emplacements situés en dehors de l'hôte, comme si les VM se trouvaient sur le même réseau que l'hôte.
  • Vous pouvez isoler partiellement ou totalement une VM du trafic réseau entrant afin d'accroître sa sécurité et de minimiser le risque que des problèmes liés à la VM aient un impact sur l'hôte.

Les sections suivantes expliquent les différents types de configuration de réseau VM et fournissent des instructions pour mettre en place les configurations de réseau VM sélectionnées.

17.1. Comprendre les réseaux virtuels

La connexion des machines virtuelles (VM) à d'autres périphériques et emplacements sur un réseau doit être facilitée par le matériel hôte. Les sections suivantes expliquent les mécanismes de connexion au réseau des machines virtuelles et décrivent les paramètres par défaut du réseau des machines virtuelles.

17.1.1. Fonctionnement des réseaux virtuels

La mise en réseau virtuelle utilise le concept de commutateur de réseau virtuel. Un commutateur de réseau virtuel est une construction logicielle qui fonctionne sur une machine hôte. Les machines virtuelles se connectent au réseau par l'intermédiaire du commutateur de réseau virtuel. En fonction de la configuration du commutateur virtuel, une machine virtuelle peut utiliser un réseau virtuel existant géré par l'hyperviseur ou une méthode de connexion au réseau différente.

La figure suivante montre un commutateur de réseau virtuel connectant deux machines virtuelles au réseau :

Du point de vue d'un système d'exploitation invité, une connexion réseau virtuelle est identique à une connexion réseau physique. Les machines hôtes considèrent les commutateurs réseau virtuels comme des interfaces réseau. Lorsque le service virtnetworkd est installé et démarré pour la première fois, il crée virbr0, l'interface réseau par défaut des machines virtuelles.

Pour afficher des informations sur cette interface, utilisez l'utilitaire ip sur l'hôte.

$ ip addr show virbr0
3: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state
UNKNOWN link/ether 1b:c4:94:cf:fd:17 brd ff:ff:ff:ff:ff:ff
inet 192.0.2.1/24 brd 192.0.2.255 scope global virbr0
Copy to Clipboard Toggle word wrap

Par défaut, toutes les machines virtuelles d'un même hôte sont connectées au même réseau virtuel de type NAT, appelé default, qui utilise l'interface virbr0. Pour plus d'informations, voir Configuration par défaut du réseau virtuel.

Pour un accès de base au réseau sortant uniquement à partir des machines virtuelles, aucune configuration réseau supplémentaire n'est généralement nécessaire, car le réseau par défaut est installé avec le paquetage libvirt-daemon-config-network et est automatiquement lancé lorsque le service virtnetworkd est démarré.

Si vous avez besoin d'une fonctionnalité réseau VM différente, vous pouvez créer des réseaux virtuels et des interfaces réseau supplémentaires et configurer vos VM pour qu'elles les utilisent. Outre le NAT par défaut, ces réseaux et interfaces peuvent être configurés pour utiliser l'un des modes suivants :

17.1.2. Configuration par défaut du réseau virtuel

Lorsque le service virtnetworkd est installé pour la première fois sur un hôte de virtualisation, il contient une configuration initiale de réseau virtuel en mode de traduction d'adresse réseau (NAT). Par défaut, toutes les machines virtuelles de l'hôte sont connectées au même réseau virtuel libvirt, appelé default. Les machines virtuelles sur ce réseau peuvent se connecter à des emplacements à la fois sur l'hôte et sur le réseau au-delà de l'hôte, mais avec les limitations suivantes :

  • Les VM sur le réseau sont visibles par l'hôte et les autres VM sur l'hôte, mais le trafic réseau est affecté par les pare-feu dans la pile réseau du système d'exploitation invité et par les règles de filtrage du réseau libvirt attachées à l'interface de l'invité.
  • Les machines virtuelles sur le réseau peuvent se connecter à des emplacements extérieurs à l'hôte, mais ne sont pas visibles pour eux. Le trafic sortant est affecté par les règles NAT, ainsi que par le pare-feu du système hôte.

Le diagramme suivant illustre la configuration par défaut du réseau VM :

La console web RHEL 9 permet de gérer les interfaces réseau virtuelles des machines virtuelles auxquelles la console web est connectée. Vous pouvez :

En utilisant la console web RHEL 9, vous pouvez afficher et modifier les interfaces réseau virtuelles sur une machine virtuelle (VM) sélectionnée :

Conditions préalables

Procédure

  1. Dans l'interface Machines virtuelles, cliquez sur la VM dont vous voulez voir les informations.

    Une nouvelle page s'ouvre avec une section Vue d'ensemble contenant des informations de base sur la VM sélectionnée et une section Console permettant d'accéder à l'interface graphique de la VM.

  2. Faites défiler jusqu'à Interfaces réseau.

    La section Interfaces réseau affiche des informations sur l'interface réseau virtuelle configurée pour la VM ainsi que des options pour les interfaces réseau Add, Delete, Edit, ou Unplug.

    Les informations comprennent les éléments suivants :

    • Type - Type d'interface réseau pour la VM. Les types comprennent le réseau virtuel, le pont vers le réseau local et l'attachement direct.

      Note

      La connexion Ethernet générique n'est pas prise en charge dans RHEL 9 et les versions ultérieures.

    • Model type - Le modèle de l'interface réseau virtuelle.
    • MAC Address - L'adresse MAC de l'interface réseau virtuelle.
    • IP Address - L'adresse IP de l'interface réseau virtuelle.
    • Source - La source de l'interface réseau. Elle dépend du type de réseau.
    • State - État de l'interface réseau virtuelle.
  3. Pour modifier les paramètres de l'interface réseau virtuelle, cliquez sur Edit. La boîte de dialogue Virtual Network Interface Settings (Paramètres de l'interface réseau virtuelle) s'ouvre.

  4. Modifier le type d'interface, la source, le modèle ou l'adresse MAC.
  5. Cliquez sur Enregistrer. L'interface réseau est modifiée.

    Note

    Les modifications apportées aux paramètres de l'interface réseau virtuelle ne prennent effet qu'après le redémarrage de la VM.

    En outre, l'adresse MAC ne peut être modifiée que lorsque la machine virtuelle est éteinte.

En utilisant la console web RHEL 9, vous pouvez créer une interface réseau virtuelle et y connecter une machine virtuelle (VM).

Conditions préalables

Procédure

  1. Dans l'interface Machines virtuelles, cliquez sur la VM dont vous voulez voir les informations.

    Une nouvelle page s'ouvre avec une section Vue d'ensemble contenant des informations de base sur la VM sélectionnée et une section Console permettant d'accéder à l'interface graphique de la VM.

  2. Faites défiler jusqu'à Interfaces réseau.

    La section Interfaces réseau affiche des informations sur l'interface réseau virtuelle configurée pour la VM ainsi que des options pour les interfaces réseau Add, Edit, ou Plug.

  3. Cliquez sur Plug dans la ligne de l'interface réseau virtuelle que vous souhaitez connecter.

    L'interface réseau virtuelle sélectionnée se connecte à la VM.

En utilisant la console web RHEL 9, vous pouvez déconnecter les interfaces réseau virtuelles connectées à une machine virtuelle (VM) sélectionnée.

Conditions préalables

Procédure

  1. Dans l'interface Machines virtuelles, cliquez sur la VM dont vous voulez voir les informations.

    Une nouvelle page s'ouvre avec une section Vue d'ensemble contenant des informations de base sur la VM sélectionnée et une section Console permettant d'accéder à l'interface graphique de la VM.

  2. Faites défiler jusqu'à Interfaces réseau.

    La section Interfaces réseau affiche des informations sur l'interface réseau virtuelle configurée pour la VM ainsi que des options pour les interfaces réseau Add, Delete, Edit, ou Unplug.

  3. Cliquez sur Débrancher dans la ligne de l'interface réseau virtuelle que vous souhaitez déconnecter.

    L'interface réseau virtuelle sélectionnée se déconnecte de la VM.

17.4. Types de connexions réseau des machines virtuelles

Pour modifier les propriétés de mise en réseau et le comportement de vos machines virtuelles, changez le type de réseau virtuel ou d'interface que les machines virtuelles utilisent. Les sections suivantes décrivent les types de connexion disponibles pour les VM dans RHEL 9.

Par défaut, les commutateurs de réseau virtuel fonctionnent en mode de traduction d'adresse réseau (NAT). Ils utilisent le masquage IP plutôt que le Source-NAT (SNAT) ou le Destination-NAT (DNAT). Le masquage IP permet aux machines virtuelles connectées d'utiliser l'adresse IP de la machine hôte pour communiquer avec n'importe quel réseau externe. Lorsque le commutateur de réseau virtuel fonctionne en mode NAT, les ordinateurs externes à l'hôte ne peuvent pas communiquer avec les machines virtuelles à l'intérieur de l'hôte.

Avertissement

Les commutateurs de réseau virtuel utilisent le NAT configuré par des règles de pare-feu. Il n'est pas recommandé de modifier ces règles pendant que le commutateur fonctionne, car des règles incorrectes peuvent empêcher le commutateur de communiquer.

17.4.2. Réseau virtuel en mode routé

En utilisant le mode Routed, le commutateur virtuel se connecte au LAN physique connecté à la machine hôte, transmettant le trafic dans les deux sens sans utiliser de NAT. Le commutateur virtuel peut examiner tout le trafic et utiliser les informations contenues dans les paquets réseau pour prendre des décisions de routage. Dans ce mode, les machines virtuelles (VM) se trouvent toutes dans un sous-réseau unique, séparé de la machine hôte. Le sous-réseau des machines virtuelles est acheminé via un commutateur virtuel, qui existe sur la machine hôte. Cela permet d'établir des connexions entrantes, mais nécessite des entrées supplémentaires dans la table de routage pour les systèmes sur le réseau externe.

Le mode routé utilise le routage basé sur l'adresse IP :

L'hébergement de serveurs virtuels (VSH) est une topologie courante qui utilise le mode routé. Un fournisseur VSH peut avoir plusieurs machines hôtes, chacune avec deux connexions réseau physiques. Une interface est utilisée pour la gestion et la comptabilité, l'autre pour la connexion des machines virtuelles. Chaque VM possède sa propre adresse IP publique, mais les machines hôtes utilisent des adresses IP privées afin que seuls les administrateurs internes puissent gérer les VM.

17.4.3. Réseau virtuel en mode ponté

Dans la plupart des modes de mise en réseau des VM, les VM créent automatiquement le pont virtuel virbr0 et s'y connectent. En revanche, en mode bridged, la VM se connecte à un pont Linux existant sur l'hôte. Par conséquent, la VM est directement visible sur le réseau physique. Cela permet les connexions entrantes, mais ne nécessite pas d'entrées supplémentaires dans la table de routage.

Le mode ponté utilise la commutation de connexion basée sur l'adresse MAC :

En mode ponté, la VM apparaît dans le même sous-réseau que la machine hôte. Toutes les autres machines physiques sur le même réseau physique peuvent détecter la VM et y accéder.

Liaison entre réseaux pontés

Il est possible d'utiliser plusieurs interfaces de pont physiques sur l'hyperviseur en les reliant par un lien. Le lien peut ensuite être ajouté à un pont, après quoi les machines virtuelles peuvent également être ajoutées au pont. Cependant, le pilote de liaison a plusieurs modes de fonctionnement, et tous ces modes ne fonctionnent pas avec une passerelle où des machines virtuelles sont en cours d'utilisation.

Les modes de liaison suivants sont utilisables :

  • mode 1
  • mode 2
  • mode 4

En revanche, les modes 0, 3, 5 ou 6 sont susceptibles de faire échouer la connexion. Notez également que la surveillance des interfaces indépendantes du support (MII) doit être utilisée pour surveiller les modes de liaison, car la surveillance du protocole de résolution d'adresses (ARP) ne fonctionne pas correctement.

Pour plus d'informations sur les modes de liaison, reportez-vous à la base de connaissances de Red Hat.

Scénarios courants

Les cas d'utilisation les plus courants du mode ponté sont les suivants :

  • Déploiement de machines virtuelles dans un réseau existant aux côtés de machines hôtes, rendant la différence entre machines virtuelles et physiques invisible pour l'utilisateur final.
  • Déploiement de machines virtuelles sans modification des paramètres de configuration du réseau physique existant.
  • Déploiement de machines virtuelles qui doivent être facilement accessibles à un réseau physique existant. Placer des machines virtuelles sur un réseau physique où elles doivent accéder à des services DHCP.
  • Connexion des machines virtuelles à un réseau existant où des réseaux locaux virtuels (VLAN) sont utilisés.
  • Un réseau de zone démilitarisée (DMZ). Pour un déploiement DMZ avec des machines virtuelles, Red Hat recommande de configurer la DMZ au niveau du routeur et des commutateurs du réseau physique, et de connecter les machines virtuelles au réseau physique en utilisant le mode ponté.

17.4.4. Mise en réseau virtuelle en mode isolé

En utilisant le mode isolated, les machines virtuelles connectées au commutateur virtuel peuvent communiquer entre elles et avec la machine hôte, mais leur trafic ne passera pas en dehors de la machine hôte, et elles ne peuvent pas recevoir de trafic en provenance de l'extérieur de la machine hôte. L'utilisation de dnsmasq dans ce mode est nécessaire pour les fonctionnalités de base telles que DHCP.

17.4.5. Mise en réseau virtuelle en mode ouvert

Lorsque le mode open est utilisé pour la mise en réseau, libvirt ne génère aucune règle de pare-feu pour le réseau. Par conséquent, libvirt n'écrase pas les règles de pare-feu fournies par l'hôte, et l'utilisateur peut donc gérer manuellement les règles de pare-feu de la VM.

Le tableau suivant fournit des informations sur les emplacements auxquels certains types de configurations réseau de machines virtuelles (VM) peuvent se connecter et sur lesquels elles sont visibles.

Expand
Tableau 17.1. Types de connexion aux machines virtuelles
 Connexion à l'hôteConnexion à d'autres machines virtuelles sur l'hôteConnexion à des sites extérieursVisible de l'extérieur

Bridged mode

OUI

OUI

OUI

OUI

NAT

OUI

OUI

OUI

no

Routed mode

OUI

OUI

OUI

OUI

Isolated mode

OUI

OUI

no

no

Open mode

Depends on the host’s firewall rules

Les machines virtuelles (VM) qui utilisent l'environnement d'exécution avant démarrage (PXE) peuvent démarrer et charger leur configuration à partir d'un réseau. Ce chapitre explique comment utiliser libvirt pour démarrer des machines virtuelles à partir d'un serveur PXE sur un réseau virtuel ou ponté.

Avertissement

Ces procédures ne sont fournies qu'à titre d'exemple. Assurez-vous que vous disposez de suffisamment de sauvegardes avant de poursuivre.

Cette procédure décrit comment configurer un réseau virtuel libvirt pour fournir un environnement d'exécution avant démarrage (PXE). Cela permet aux machines virtuelles sur votre hôte d'être configurées pour démarrer à partir d'une image de démarrage disponible sur le réseau virtuel.

Conditions préalables

  • Un serveur PXE local (DHCP et TFTP), tel que :

    • serveur interne libvirt
    • dhcpd et tftpd configurés manuellement
    • dnsmasq
    • Serveur de cordonnier
  • Images de démarrage PXE, telles que PXELINUX configurées par Cobbler ou manuellement.

Procédure

  1. Placez les images de démarrage PXE et la configuration dans le dossier /var/lib/tftpboot.
  2. Définir les droits d'accès aux dossiers :

    # chmod -R a r /var/lib/tftpboot
    Copy to Clipboard Toggle word wrap
  3. Définir la propriété du dossier :

    # chown -R nobody: /var/lib/tftpboot
    Copy to Clipboard Toggle word wrap
  4. Mise à jour du contexte SELinux :

    # chcon -R --reference /usr/sbin/dnsmasq /var/lib/tftpboot
    # chcon -R --reference /usr/libexec/libvirt_leaseshelper /var/lib/tftpboot
    Copy to Clipboard Toggle word wrap
  5. Arrêter le réseau virtuel :

    # virsh net-destroy default
    Copy to Clipboard Toggle word wrap
  6. Ouvrez le fichier de configuration du réseau virtuel dans votre éditeur par défaut :

    # virsh net-edit default
    Copy to Clipboard Toggle word wrap
  7. Modifiez l'élément <ip> pour inclure l'adresse, le masque de réseau, la plage d'adresses DHCP et le fichier de démarrage appropriés, où example-pxelinux est le nom du fichier de l'image de démarrage.

    <ip address='192.0.2.1' netmask='255.255.255.0'>
       <tftp root='/var/lib/tftpboot'/>
       <dhcp>
          <range start='192.0.2.2' end='192.0.2.254' />
          <bootp file='example-pxelinux'/>
       </dhcp>
    </ip>
    Copy to Clipboard Toggle word wrap
  8. Démarrer le réseau virtuel :

    # virsh net-start default
    Copy to Clipboard Toggle word wrap

Vérification

  • Vérifiez que le réseau virtuel default est actif :

    # virsh net-list
    Name             State    Autostart   Persistent
    ---------------------------------------------------
    default          active   no          no
    Copy to Clipboard Toggle word wrap

Pour démarrer les machines virtuelles (VM) à partir d'un serveur Preboot Execution Environment (PXE) disponible sur un réseau virtuel, vous devez activer le démarrage PXE.

Conditions préalables

Procédure

  • Créez une nouvelle VM avec le démarrage PXE activé. Par exemple, pour installer à partir d'un PXE, disponible sur le réseau virtuel default, dans un nouveau fichier image qcow2 de 10 Go :

    # virt-install --pxe --network network=default --memory 2048 --vcpus 2 --disk size=10
    Copy to Clipboard Toggle word wrap
    • Vous pouvez également modifier manuellement le fichier de configuration XML d'une VM existante :

      1. Veiller à ce que l'élément <os> contienne un élément <boot dev='network'/>:

        <os>
           <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
           <boot dev='network'/>
           <boot dev='hd'/>
        </os>
        Copy to Clipboard Toggle word wrap
      2. Assurez-vous que le réseau invité est configuré pour utiliser votre réseau virtuel :

        <interface type='network'>
           <mac address='52:54:00:66:79:14'/>
           <source network='default'/>
           <target dev='vnet0'/>
           <alias name='net0'/>
           <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
        </interface>
        Copy to Clipboard Toggle word wrap

Vérification

  • Démarrez la VM à l'aide de la commande virsh start. Si PXE est configuré correctement, la VM démarre à partir d'une image de démarrage disponible sur le serveur PXE.

Pour démarrer les machines virtuelles (VM) à partir d'un serveur Preboot Execution Environment (PXE) disponible sur un réseau ponté, vous devez activer le démarrage PXE.

Conditions préalables

  • Le pontage réseau est activé.
  • Un serveur de démarrage PXE est disponible sur le réseau ponté.

Procédure

  • Créez une nouvelle VM avec le démarrage PXE activé. Par exemple, pour installer à partir d'un PXE, disponible sur le réseau ponté breth0, dans un nouveau fichier image qcow2 de 10 Go :

    # virt-install --pxe --network bridge=breth0 --memory 2048 --vcpus 2 --disk size=10
    Copy to Clipboard Toggle word wrap
    • Vous pouvez également modifier manuellement le fichier de configuration XML d'une VM existante :

      1. Veiller à ce que l'élément <os> contienne un élément <boot dev='network'/>:

        <os>
           <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
           <boot dev='network'/>
           <boot dev='hd'/>
        </os>
        Copy to Clipboard Toggle word wrap
      2. Assurez-vous que la VM est configurée pour utiliser votre réseau ponté :

        <interface type='bridge'>
           <mac address='52:54:00:5a:ad:cb'/>
           <source bridge='breth0'/>
           <target dev='vnet0'/>
           <alias name='net0'/>
           <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
        </interface>
        Copy to Clipboard Toggle word wrap

Vérification

  • Démarrez la VM à l'aide de la commande virsh start. Si PXE est configuré correctement, la VM démarre à partir d'une image de démarrage disponible sur le serveur PXE.

Si vous avez besoin d'un accès non privilégié à un réseau virtuel, par exemple lorsque vous utilisez une connexion session de libvirt, vous pouvez configurer votre machine virtuelle (VM) pour qu'elle utilise le back-end de mise en réseau passt.

Conditions préalables

  • Le paquetage passt a été installé sur votre système.

    # dnf install passt
    Copy to Clipboard Toggle word wrap

Procédure

  1. Ouvrez la configuration XML de la VM sur laquelle vous souhaitez utiliser une connexion passt. Par exemple :

    # virsh edit <testguest1>
    Copy to Clipboard Toggle word wrap
  2. Dans la section <devices>, ajoutez un élément <interface type='user'> qui utilise passt comme type d'arrière-plan.

    Par exemple, la configuration suivante établit une connexion passt qui utilise des adresses et des routes copiées à partir de l'interface hôte associée à la première route par défaut :

    <devices>
      [...]
      <interface type='user'>
        <backend type='passt'/>
      </interface>
    </devices>
    Copy to Clipboard Toggle word wrap

    En option, lorsque vous utilisez passt, vous pouvez spécifier plusieurs éléments <portForward> pour transférer le trafic réseau entrant de l'hôte vers cette interface VM. Vous pouvez également personnaliser les adresses IP des interfaces. Par exemple :

    <devices>
      [...]
      <interface type='user'>
        <backend type='passt'/>
        <mac address="52:54:00:98:d8:b7"/>
        <source dev='eth0'/>
        <ip family='ipv4' address='192.0.2.1' prefix='24'/>
        <ip family='ipv6' address='::ffff:c000:201'/>
        <portForward proto='tcp'>
          <range start='2022' to='22'/>
        </portForward>
        <portForward proto='udp' address='1.2.3.4'>
           <range start='5000' end='5020' to='6000'/>
           <range start='5010' end='5015' exclude='yes'/>
        </portForward>
        <portForward proto='tcp' address='2001:db8:ac10:fd01::1:10' dev='eth0'>
          <range start='8080'/>
          <range start='4433' to='3444'/>
        </portForward>
      </interface>
    </devices>
    Copy to Clipboard Toggle word wrap

    Cet exemple de configuration établit une connexion passt avec les paramètres suivants :

    • La VM copie les itinéraires réseau pour transmettre le trafic à partir de l'interface de l'hôte eth0.
    • Le MAC de l'interface est défini sur 52:54:00:98:d8:b7. S'il n'est pas défini, un MAC aléatoire sera généré.
    • L'adresse IPv4 est définie sur 192.0.2.1/24, et l'adresse IPv6 sur ::ffff:c000:201.
    • Le port TCP 2022 de l'hôte transmet son trafic réseau au port 22 de la VM.
    • L'adresse TCP 2001:db8:ac10:fd01::1:10 sur l'interface hôte eth0 et le port 8080 transmettent leur trafic réseau au port 8080 de la VM. Le port 4433 transmet son trafic au port 3444 de la VM.
    • L'adresse UDP 1.2.3.4 et les ports 5000 - 5009 et 5016 - 5020 de l'hôte transmettent leur trafic réseau aux ports 6000 - 6009 et 6016 - 6020 de la VM.
  3. Sauvegarder la configuration XML.

Vérification

  • Démarrez ou redémarrez la VM que vous avez configurée avec passt:

    # virsh reboot <vm-name>
    # virsh start <vm-name>
    Copy to Clipboard Toggle word wrap

    Si la VM démarre avec succès, elle utilise maintenant le backend de mise en réseau passt.

Les machines virtuelles (VM) subissent toujours un certain degré de détérioration des performances par rapport à l'hôte. Les sections suivantes expliquent les raisons de cette détérioration et fournissent des instructions sur la manière de minimiser l'impact de la virtualisation sur les performances dans RHEL 9, afin que les ressources de votre infrastructure matérielle puissent être utilisées aussi efficacement que possible.

Les VM sont exécutées en tant que processus de l'espace utilisateur sur l'hôte. L'hyperviseur doit donc convertir les ressources système de l'hôte pour que les machines virtuelles puissent les utiliser. Par conséquent, une partie des ressources est consommée par la conversion, et la VM ne peut donc pas atteindre le même niveau de performance que l'hôte.

L'impact de la virtualisation sur les performances des systèmes

Les raisons plus spécifiques de la perte de performance d'une VM sont les suivantes :

  • Les unités centrales virtuelles (vCPU) sont implémentées comme des threads sur l'hôte, gérés par le planificateur Linux.
  • Les machines virtuelles n'héritent pas automatiquement des fonctions d'optimisation, telles que NUMA ou les pages volumineuses, du noyau hôte.
  • Les paramètres d'E/S disque et réseau de l'hôte peuvent avoir un impact significatif sur les performances de la VM.
  • Le trafic réseau est généralement acheminé vers une VM par l'intermédiaire d'un pont logiciel.
  • En fonction des appareils hôtes et de leurs modèles, l'émulation d'un matériel particulier peut entraîner des frais généraux importants.

La gravité de l'impact de la virtualisation sur les performances de la VM est influencée par divers facteurs, notamment

  • Nombre de machines virtuelles fonctionnant simultanément.
  • La quantité de périphériques virtuels utilisés par chaque VM.
  • Les types de périphériques utilisés par les VM.
Réduire la perte de performance des machines virtuelles

RHEL 9 propose un certain nombre de fonctionnalités que vous pouvez utiliser pour réduire les effets négatifs de la virtualisation sur les performances. Notamment :

Important

L'optimisation des performances de la VM peut avoir des effets négatifs sur d'autres fonctions de virtualisation. Par exemple, cela peut rendre la migration de la VM modifiée plus difficile.

L'utilitaire TuneD est un mécanisme de fourniture de profils de réglage qui adapte RHEL à certaines caractéristiques de la charge de travail, telles que les exigences des tâches à forte intensité de CPU ou la réactivité du débit du réseau de stockage. Il fournit un certain nombre de profils de réglage préconfigurés pour améliorer les performances et réduire la consommation d'énergie dans un certain nombre de cas d'utilisation spécifiques. Vous pouvez modifier ces profils ou en créer de nouveaux afin d'élaborer des solutions de performance adaptées à votre environnement, y compris les environnements virtualisés.

Pour optimiser RHEL 9 pour la virtualisation, utilisez les profils suivants :

  • Pour les machines virtuelles RHEL 9, utilisez le profil virtual-guest. Il est basé sur le profil généralement applicable throughput-performance généralement applicable, mais il diminue également l'échange de mémoire virtuelle.
  • Pour les hôtes de virtualisation RHEL 9, utilisez le profil virtual-host. Ce profil permet une réécriture plus agressive des pages de mémoire sales, ce qui améliore les performances de l'hôte.

Conditions préalables

Procédure

Pour activer un profil TuneD spécifique :

  1. Liste des profils TuneD disponibles.

    # tuned-adm list
    
    Available profiles:
    - balanced             - General non-specialized TuneD profile
    - desktop              - Optimize for the desktop use-case
    [...]
    - virtual-guest        - Optimize for running inside a virtual guest
    - virtual-host         - Optimize for running KVM guests
    Current active profile: balanced
    Copy to Clipboard Toggle word wrap
  2. Optional: Créez un nouveau profil TuneD ou modifiez un profil TuneD existant.

    Pour plus d'informations, voir Personnaliser les profils TuneD.

  3. Activer un profil TuneD.

    # tuned-adm profile selected-profile
    Copy to Clipboard Toggle word wrap
    • Pour optimiser un hôte de virtualisation, utilisez le profil virtual-host.

      # tuned-adm profile virtual-host
      Copy to Clipboard Toggle word wrap
    • Sur un système d'exploitation invité RHEL, utilisez le profil virtual-guest.

      # tuned-adm profile virtual-guest
      Copy to Clipboard Toggle word wrap

18.3. Optimisation des démons libvirt

La suite de virtualisation libvirt fonctionne comme une couche de gestion pour l'hyperviseur RHEL, et votre configuration libvirt a un impact significatif sur votre hôte de virtualisation. Notamment, RHEL 9 contient deux types différents de démons libvirt, monolithiques ou modulaires, et le type de démons que vous utilisez affecte la granularité avec laquelle vous pouvez configurer les pilotes de virtualisation individuels.

18.3.1. Types de démons libvirt

RHEL 9 prend en charge les types de démons libvirt suivants :

Libvirt monolithique

Le démon traditionnel libvirt, libvirtd, contrôle une grande variété de pilotes de virtualisation à l'aide d'un seul fichier de configuration - /etc/libvirt/libvirtd.conf.

En tant que tel, libvirtd permet une configuration centralisée de l'hyperviseur, mais peut utiliser les ressources du système de manière inefficace. Par conséquent, libvirtd ne sera plus pris en charge dans une prochaine version majeure de RHEL.

Toutefois, si vous êtes passé de RHEL 8 à RHEL 9, votre hôte utilise toujours libvirtd par défaut.

Libvirt modulaire

Nouvellement introduit dans RHEL 9, libvirt modulaire fournit un démon spécifique pour chaque pilote de virtualisation. Il s'agit notamment des pilotes suivants :

  • virtqemud - Un démon principal pour la gestion de l'hyperviseur
  • virtinterfaced - Un démon secondaire pour la gestion de la carte d'interface réseau de l'hôte
  • virtnetworkd - Un démon secondaire pour la gestion des réseaux virtuels
  • virtnodedevd - Un démon secondaire pour la gestion des périphériques physiques de l'hôte
  • virtnwfilterd - Un démon secondaire pour la gestion du pare-feu de l'hôte
  • virtsecretd - Un démon secondaire pour la gestion des secrets de l'hôte
  • virtstoraged - Un démon secondaire pour la gestion du stockage

Chaque démon dispose d'un fichier de configuration distinct - par exemple /etc/libvirt/virtqemud.conf. En tant que tels, les démons modulaires libvirt offrent de meilleures options pour affiner la gestion des ressources libvirt.

Si vous avez effectué une nouvelle installation de RHEL 9, la version modulaire de libvirt est configurée par défaut.

Prochaines étapes

18.3.2. Activation des démons modulaires libvirt

Dans RHEL 9, la bibliothèque libvirt utilise des démons modulaires qui gèrent des ensembles de pilotes de virtualisation individuels sur votre hôte. Par exemple, le démon virtqemud gère les pilotes QEMU.

Si vous avez effectué une nouvelle installation d'un hôte RHEL 9, votre hyperviseur utilise par défaut les démons modulaires libvirt. Toutefois, si vous avez mis à niveau votre hôte de RHEL 8 à RHEL 9, votre hyperviseur utilise le démon monolithique libvirtd, qui est la valeur par défaut de RHEL 8.

Si c'est le cas, Red Hat recommande d'activer les démons modulaires libvirt à la place, car ils offrent de meilleures options pour affiner la gestion des ressources de libvirt. De plus, libvirtd ne sera plus pris en charge dans une prochaine version majeure de RHEL.

Conditions préalables

  • Votre hyperviseur utilise le service monolithique libvirtd.

    # systemctl is-active libvirtd.service
    active
    Copy to Clipboard Toggle word wrap

    Si cette commande affiche active, vous utilisez libvirtd.

  • Vos machines virtuelles sont arrêtées.

Procédure

  1. Arrêtez libvirtd et ses prises.

    $ systemctl stop libvirtd.service
    $ systemctl stop libvirtd{,-ro,-admin,-tcp,-tls}.socket
    Copy to Clipboard Toggle word wrap
  2. Désactivez libvirtd pour éviter qu'il ne démarre au démarrage.

    $ systemctl disable libvirtd.service
    $ systemctl disable libvirtd{,-ro,-admin,-tcp,-tls}.socket
    Copy to Clipboard Toggle word wrap
  3. Activer les démons modulaires libvirt.

    # for drv in qemu interface network nodedev nwfilter secret storage; do systemctl unmask virt${drv}d.service; systemctl unmask virt${drv}d{,-ro,-admin}.socket; systemctl enable virt${drv}d.service; systemctl enable virt${drv}d{,-ro,-admin}.socket; done
    Copy to Clipboard Toggle word wrap
  4. Démarrer les sockets pour les démons modulaires.

    # for drv in qemu network nodedev nwfilter secret storage; do systemctl start virt${drv}d{,-ro,-admin}.socket; done
    Copy to Clipboard Toggle word wrap
  5. Optional: Si vous devez vous connecter à votre hôte à partir d'hôtes distants, activez et démarrez le démon proxy de virtualisation.

    1. Vérifiez si le service libvirtd-tls.socket est activé sur votre système.

      # grep listen_tls /etc/libvirt/libvirtd.conf
      
      listen_tls = 0
      Copy to Clipboard Toggle word wrap
    2. Si libvirtd-tls.socket n'est pas activé (listen_tls = 0), activez virtproxyd comme suit :

      # systemctl unmask virtproxyd.service
      # systemctl unmask virtproxyd{,-ro,-admin}.socket
      # systemctl enable virtproxyd.service
      # systemctl enable virtproxyd{,-ro,-admin}.socket
      # systemctl start virtproxyd{,-ro,-admin}.socket
      Copy to Clipboard Toggle word wrap
    3. Si libvirtd-tls.socket est activé (listen_tls = 1), activez virtproxyd comme suit :

      # systemctl unmask virtproxyd.service
      # systemctl unmask virtproxyd{,-ro,-admin,-tls}.socket
      # systemctl enable virtproxyd.service
      # systemctl enable virtproxyd{,-ro,-admin,-tls}.socket
      # systemctl start virtproxyd{,-ro,-admin,-tls}.socket
      Copy to Clipboard Toggle word wrap

      Pour activer le socket TLS de virtproxyd, votre hôte doit avoir des certificats TLS configurés pour fonctionner avec libvirt. Pour plus d'informations, consultez la documentation Upstream libvirt.

Vérification

  1. Activer les démons de virtualisation activés.

    # virsh uri
    qemu:///system
    Copy to Clipboard Toggle word wrap
  2. Vérifiez que votre hôte utilise le démon modulaire virtqemud.

    # systemctl is-active virtqemud.service
    active
    Copy to Clipboard Toggle word wrap

    Si l'état est active, vous avez activé avec succès les démons modulaires libvirt.

18.4. Configuration de la mémoire de la machine virtuelle

Pour améliorer les performances d'une machine virtuelle (VM), vous pouvez lui attribuer de la mémoire vive supplémentaire. De même, vous pouvez réduire la quantité de mémoire allouée à une VM afin que la mémoire de l'hôte puisse être allouée à d'autres VM ou tâches.

Pour effectuer ces actions, vous pouvez utiliser la console web ou l'interface de ligne de commande.

Pour améliorer les performances d'une machine virtuelle (VM) ou libérer les ressources de l'hôte qu'elle utilise, vous pouvez utiliser la console web pour ajuster la quantité de mémoire allouée à la VM.

Conditions préalables

  • Le système d'exploitation invité exécute les pilotes de ballons de mémoire. Pour vérifier que c'est bien le cas :

    1. Assurez-vous que la configuration de la VM inclut le périphérique memballoon:

      # virsh dumpxml testguest | grep memballoon
      <memballoon model='virtio'>
          </memballoon>
      Copy to Clipboard Toggle word wrap

      Si cette commande affiche une sortie et que le modèle n'est pas défini sur none, le dispositif memballoon est présent.

    2. Assurez-vous que les pilotes de ballons fonctionnent dans le système d'exploitation invité.

  • Le plug-in VM de la console web est installé sur votre système.

Procédure

  1. Optional: Obtenez les informations relatives à la mémoire maximale et à la mémoire actuellement utilisée pour une VM. Cela servira de base de référence pour vos modifications, ainsi que pour la vérification.

    # virsh dominfo testguest
    Max memory:     2097152 KiB
    Used memory:    2097152 KiB
    Copy to Clipboard Toggle word wrap
  2. Dans l'interface Machines virtuelles, cliquez sur la VM dont vous voulez voir les informations.

    Une nouvelle page s'ouvre avec une section Vue d'ensemble contenant des informations de base sur la VM sélectionnée et une section Console permettant d'accéder à l'interface graphique de la VM.

  3. Cliquez sur modifier à côté de la ligne Memory dans le volet Vue d'ensemble.

    La boîte de dialogue Memory Adjustment apparaît.

  4. Configurer la mémoire virtuelle pour la VM sélectionnée.

    • Maximum allocation - Définit la quantité maximale de mémoire hôte que la VM peut utiliser pour ses processus. Vous pouvez spécifier la mémoire maximale lors de la création de la VM ou l'augmenter ultérieurement. Vous pouvez spécifier la mémoire en multiples de MiB ou GiB.

      Le réglage de l'allocation maximale de mémoire n'est possible que sur une VM éteinte.

    • Current allocation - Définit la quantité réelle de mémoire allouée à la VM. Cette valeur peut être inférieure à l'allocation maximale, mais ne peut pas la dépasser. Vous pouvez ajuster la valeur pour réguler la mémoire disponible pour les processus de la VM. Vous pouvez spécifier la mémoire en multiples de MiB ou GiB.

      Si vous ne spécifiez pas cette valeur, l'allocation par défaut est la valeur Maximum allocation.

  5. Cliquez sur Enregistrer.

    L'allocation de mémoire de la VM est ajustée.

Pour améliorer les performances d'une machine virtuelle (VM) ou libérer les ressources de l'hôte qu'elle utilise, vous pouvez utiliser le CLI pour ajuster la quantité de mémoire allouée à la VM.

Conditions préalables

  • Le système d'exploitation invité exécute les pilotes de ballons de mémoire. Pour vérifier que c'est bien le cas :

    1. Assurez-vous que la configuration de la VM inclut le périphérique memballoon:

      # virsh dumpxml testguest | grep memballoon
      <memballoon model='virtio'>
          </memballoon>
      Copy to Clipboard Toggle word wrap

      Si cette commande affiche une sortie et que le modèle n'est pas défini sur none, le dispositif memballoon est présent.

    2. Assurez-vous que les pilotes Ballon fonctionnent dans le système d'exploitation invité.

Procédure

  1. Optional: Obtenez les informations relatives à la mémoire maximale et à la mémoire actuellement utilisée pour une VM. Cela servira de base de référence pour vos modifications, ainsi que pour la vérification.

    # virsh dominfo testguest
    Max memory:     2097152 KiB
    Used memory:    2097152 KiB
    Copy to Clipboard Toggle word wrap
  2. Ajuste la mémoire maximale allouée à une VM. L'augmentation de cette valeur améliore le potentiel de performance de la VM, et la réduction de cette valeur diminue l'empreinte de performance de la VM sur votre hôte. Notez que cette modification ne peut être effectuée que sur une VM éteinte, de sorte que l'ajustement d'une VM en cours d'exécution nécessite un redémarrage pour être pris en compte.

    Par exemple, pour modifier la mémoire maximale que la VM testguest peut utiliser à 4096 MiB :

    # virt-xml testguest --edit --memory memory=4096,currentMemory=4096
    Domain 'testguest' defined successfully.
    Changes will take effect after the domain is fully powered off.
    Copy to Clipboard Toggle word wrap

    Pour augmenter la mémoire maximale d'une VM en cours d'exécution, vous pouvez attacher un périphérique de mémoire à la VM. Cette opération est également appelée memory hot plug. Pour plus d'informations, voir Attacher des périphériques de mémoire aux machines virtuelles.

    Avertissement

    La suppression des périphériques de mémoire d'une VM en cours d'exécution (également appelée débranchement à chaud de la mémoire) n'est pas prise en charge et est fortement déconseillée par Red Hat.

  3. Optional: Vous pouvez également ajuster la mémoire actuellement utilisée par la VM, jusqu'à l'allocation maximale. Cela permet de réguler la charge de mémoire de la VM sur l'hôte jusqu'au prochain redémarrage, sans modifier l'allocation maximale de la VM.

    # virsh setmem testguest --current 2048
    Copy to Clipboard Toggle word wrap

Vérification

  1. Confirmez que la mémoire utilisée par la VM a été mise à jour :

    # virsh dominfo testguest
    Max memory:     4194304 KiB
    Used memory:    2097152 KiB
    Copy to Clipboard Toggle word wrap
  2. Optional: Si vous avez ajusté la mémoire actuelle de la VM, vous pouvez obtenir des statistiques sur les ballons de mémoire de la VM afin d'évaluer l'efficacité avec laquelle elle régule son utilisation de la mémoire.

     # virsh domstats --balloon testguest
    Domain: 'testguest'
      balloon.current=365624
      balloon.maximum=4194304
      balloon.swap_in=0
      balloon.swap_out=0
      balloon.major_fault=306
      balloon.minor_fault=156117
      balloon.unused=3834448
      balloon.available=4035008
      balloon.usable=3746340
      balloon.last-update=1587971682
      balloon.disk_caches=75444
      balloon.hugetlb_pgalloc=0
      balloon.hugetlb_pgfail=0
      balloon.rss=1005456
    Copy to Clipboard Toggle word wrap

RHEL 9 fournit le périphérique de mémoire paravirtualisée virtio-mem. Ce périphérique permet d'ajouter ou de supprimer dynamiquement de la mémoire hôte dans les machines virtuelles (VM). Par exemple, vous pouvez utiliser virtio-mem pour déplacer des ressources mémoire entre des machines virtuelles en cours d'exécution ou pour redimensionner la mémoire des machines virtuelles dans des configurations en nuage en fonction de vos besoins actuels.

18.4.3.1. Aperçu de virtio-mem

virtio-mem est un dispositif de mémoire paravirtualisé qui peut être utilisé pour ajouter ou supprimer dynamiquement de la mémoire hôte dans les machines virtuelles (VM). Par exemple, vous pouvez utiliser ce périphérique pour déplacer des ressources mémoire entre des machines virtuelles en cours d'exécution ou pour redimensionner la mémoire des machines virtuelles dans des configurations en nuage en fonction de vos besoins actuels.

En utilisant virtio-mem, vous pouvez augmenter la mémoire d'une VM au-delà de sa taille initiale, et la réduire à sa taille d'origine, dans des unités qui peuvent avoir une taille de 4 à plusieurs centaines de mégaoctets (MiBs). Notez toutefois que virtio-mem repose également sur une configuration spécifique du système d'exploitation invité, notamment pour débrancher la mémoire de manière fiable.

limitations des fonctionnalités du virtio-mem

virtio-mem n'est actuellement pas compatible avec les fonctionnalités suivantes :

  • Utilisation du verrouillage de la mémoire pour les applications en temps réel sur l'hôte
  • Utilisation de la virtualisation chiffrée sur l'hôte
  • Combinaison de virtio-mem avec memballoon inflation et déflation sur l'hôte
  • Décharger ou recharger le pilote virtio_mem dans une VM
  • L'utilisation de dispositifs pour utilisateurs virtuels, à l'exception de virtiofs

Avant d'utiliser virtio-mem pour attacher de la mémoire à une machine virtuelle en cours d'exécution (également connue sous le nom de hot-plugging de mémoire), vous devez configurer le système d'exploitation de la machine virtuelle (VM) pour qu'il mette automatiquement la mémoire hot-plugged dans un état en ligne. Sinon, le système d'exploitation invité n'est pas en mesure d'utiliser la mémoire supplémentaire. Vous pouvez choisir l'une des configurations suivantes pour la mise en ligne de la mémoire :

  • online_movable
  • online_kernel
  • auto-movable

Pour en savoir plus sur les différences entre ces configurations, voir : Comparaison des configurations d'optimisation de la mémoire

L'activation de la mémoire est configurée par défaut avec les règles udev dans RHEL. Cependant, lorsque vous utilisez virtio-mem, il est recommandé de configurer l'allocation de mémoire directement dans le noyau.

Conditions préalables

  • L'hôte a une architecture CPU Intel 64 ou AMD64.
  • L'hôte utilise le système d'exploitation RHEL 9.4 ou une version ultérieure.
  • Les machines virtuelles exécutées sur l'hôte utilisent l'une des versions suivantes du système d'exploitation :

    • RHEL 8.10

      Important

      Le débranchement de la mémoire d'une VM en cours d'exécution est désactivé par défaut dans les VM RHEL 8.10.

    • RHEL 9

Procédure

  • Pour configurer l'onlining de la mémoire afin d'utiliser la configuration online_movable dans la VM :

    1. Définissez le paramètre de ligne de commande memhp_default_state kernel à online_movable:

      # grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online_movable
      Copy to Clipboard Toggle word wrap
    2. Redémarrez la VM.
  • Pour configurer l'onlining de la mémoire afin d'utiliser la configuration online_kernel dans la VM :

    1. Définissez le paramètre de ligne de commande memhp_default_state kernel à online_kernel:

      # grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online_kernel
      Copy to Clipboard Toggle word wrap
    2. Redémarrez la VM.
  • Pour utiliser la politique d'optimisation de la mémoire auto-movable dans la VM :

    1. Définissez le paramètre de ligne de commande memhp_default_state kernel à online:

      # grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online
      Copy to Clipboard Toggle word wrap
    2. Définissez le paramètre de ligne de commande memory_hotplug.online_policy kernel à auto-movable:

      # grubby --update-kernel=ALL --remove-args="memory_hotplug.online_policy" --args=memory_hotplug.online_policy=auto-movable
      Copy to Clipboard Toggle word wrap
    3. Optional: Pour affiner la politique de mise en ligne de auto-movable, modifiez les paramètres memory_hotplug.auto_movable_ratio et memory_hotplug.auto_movable_numa_aware:

      # grubby --update-kernel=ALL --remove-args="memory_hotplug.auto_movable_ratio" --args=memory_hotplug.auto_movable_ratio=<percentage>
      
      # grubby --update-kernel=ALL --remove-args="memory_hotplug.memory_auto_movable_numa_aware" --args=memory_hotplug.auto_movable_numa_aware=<y/n>
      Copy to Clipboard Toggle word wrap
      • La valeur memory_hotplug.auto_movable_ratio parameter définit le ratio maximum de mémoire disponible uniquement pour les allocations mobiles par rapport à la mémoire disponible pour toutes les allocations. Le ratio est exprimé en pourcentage et la valeur par défaut est : 301 (%), ce qui correspond à un ratio de 3:1.
      • Le paramètre memory_hotplug.auto_movable_numa_aware détermine si le paramètre memory_hotplug.auto_movable_ratio s'applique à la mémoire de tous les nœuds NUMA disponibles ou uniquement à la mémoire d'un seul nœud NUMA. La valeur par défaut est : y (yes)

        Par exemple, si le rapport maximal est fixé à 301 % et que le paramètre memory_hotplug.auto_movable_numa_aware est fixé à y (oui), le rapport 3:1 est appliqué même au sein du nœud NUMA auquel est rattaché le périphérique virtio-mem. Si le paramètre est défini sur n (no), le rapport maximal de 3:1 n'est appliqué que pour l'ensemble des nœuds NUMA.

        En outre, si le ratio n'est pas dépassé, la nouvelle mémoire connectée à chaud ne sera disponible que pour les attributions mobiles. Dans le cas contraire, la nouvelle mémoire connectée à chaud sera disponible à la fois pour les allocations mobiles et inamovibles.

    4. Redémarrez la VM.

Vérification

  • Pour savoir si la configuration de online_movable a été définie correctement, vérifiez la valeur actuelle du paramètre du noyau memhp_default_state:

    # cat /sys/devices/system/memory/auto_online_blocks
    
    online_movable
    Copy to Clipboard Toggle word wrap
  • Pour savoir si la configuration de online_kernel a été définie correctement, vérifiez la valeur actuelle du paramètre du noyau memhp_default_state:

    # cat /sys/devices/system/memory/auto_online_blocks
    
    online_kernel
    Copy to Clipboard Toggle word wrap
  • Pour savoir si la configuration de auto-movable est correcte, vérifiez les paramètres suivants du noyau :

    • memhp_default_state:

      # cat /sys/devices/system/memory/auto_online_blocks
      
      online
      Copy to Clipboard Toggle word wrap
    • memory_hotplug.online_policy:

      # cat /sys/module/memory_hotplug/parameters/online_policy
      
      auto-movable
      Copy to Clipboard Toggle word wrap
    • memory_hotplug.auto_movable_ratio:

      # cat /sys/module/memory_hotplug/parameters/auto_movable_ratio
      
      301
      Copy to Clipboard Toggle word wrap
    • memory_hotplug.auto_movable_numa_aware:

      # cat /sys/module/memory_hotplug/parameters/auto_movable_numa_aware
      
      y
      Copy to Clipboard Toggle word wrap

Pour attacher de la mémoire supplémentaire à une machine virtuelle en cours d'exécution (également connue sous le nom de hot-plugging de mémoire) et pouvoir ensuite redimensionner la mémoire connectée à chaud, vous pouvez utiliser un périphérique virtio-mem. Plus précisément, vous pouvez utiliser les fichiers de configuration XML de libvirt et les commandes virsh pour définir et attacher des périphériques virtio-mem aux machines virtuelles (VM).

Conditions préalables

  • L'hôte a une architecture CPU Intel 64 ou AMD64.
  • L'hôte utilise le système d'exploitation RHEL 9.4 ou une version ultérieure.
  • Les machines virtuelles exécutées sur l'hôte utilisent l'une des versions suivantes du système d'exploitation :

    • RHEL 8.10

      Important

      Le débranchement de la mémoire d'une VM en cours d'exécution est désactivé par défaut dans les VM RHEL 8.10.

    • RHEL 9
  • La VM est configurée pour l'optimisation de la mémoire. Pour plus d'informations, voir : Configuration de l'allocation de mémoire dans les machines virtuelles

Procédure

  1. Assurez-vous que la configuration XML de la VM cible inclut le paramètre maxMemory:

    # virsh edit testguest1
    
    <domain type='kvm'>
      <name>testguest1</name>
      ...
      <maxMemory unit='GiB'>128</maxMemory>
      ...
    </domain>
    Copy to Clipboard Toggle word wrap

    Dans cet exemple, la configuration XML de la VM testguest1 définit un paramètre maxMemory d'une taille de 128 gibibytes (GiB). La taille de maxMemory spécifie la mémoire maximale que la VM peut utiliser, ce qui inclut la mémoire initiale et la mémoire connectée à chaud.

  2. Créer et ouvrir un fichier XML pour définir les périphériques virtio-mem sur l'hôte, par exemple :

    # vim virtio-mem-device.xml
    Copy to Clipboard Toggle word wrap
  3. Ajoutez les définitions XML des dispositifs virtio-mem au fichier et enregistrez-le :

    <memory model='virtio-mem'>
            <target>
                    <size unit='GiB'>48</size>
                    <node>0</node>
                    <block unit='MiB'>2</block>
                    <requested unit='GiB'>16</requested>
                    <current unit='GiB'>16</current>
            </target>
            <alias name='ua-virtiomem0'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </memory>
    <memory model='virtio-mem'>
            <target>
                    <size unit='GiB'>48</size>
                    <node>1</node>
                    <block unit='MiB'>2</block>
                    <requested unit='GiB'>0</requested>
                    <current unit='GiB'>0</current>
            </target>
            <alias name='ua-virtiomem1'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </memory>
    Copy to Clipboard Toggle word wrap

    Dans cet exemple, deux appareils virtio-mem sont définis avec les paramètres suivants :

    • size: Il s'agit de la taille maximale de l'appareil. Dans l'exemple, elle est de 48 GiB. La taille de size doit être un multiple de celle de block.
    • node: Il s'agit du nœud vNUMA attribué à l'appareil virtio-mem.
    • block: Il s'agit de la taille du bloc de l'appareil. Elle doit être au moins égale à la taille de la Transparent Huge Page (THP), qui est de 2 MiB sur l'architecture CPU Intel 64 ou AMD64. La taille de bloc de 2 MiB sur l'architecture Intel 64 ou AMD64 est généralement un bon choix par défaut. Lorsque vous utilisez virtio-mem avec Virtual Function I/O (VFIO) ou mediated devices (mdev), le nombre total de blocs sur tous les périphériques virtio-mem ne doit pas être supérieur à 32768, sinon l'enfichage de la RAM risque d'échouer.
    • requested: Il s'agit de la quantité de mémoire que vous attachez à la VM avec le périphérique virtio-mem. Cependant, il s'agit simplement d'une demande adressée à la VM et il se peut qu'elle ne soit pas résolue avec succès, par exemple si la VM n'est pas correctement configurée. La taille de requested doit être un multiple de la taille de block et ne peut pas dépasser le maximum défini size.
    • current: Ceci représente la taille actuelle que le périphérique virtio-mem fournit à la VM. La taille de current peut être différente de celle de requested, par exemple lorsque les demandes ne peuvent pas être exécutées ou lors du redémarrage de la VM.
    • alias: Il s'agit d'un alias facultatif défini par l'utilisateur que vous pouvez utiliser pour spécifier le périphérique virtio-mem prévu, par exemple lors de l'édition du périphérique avec les commandes libvirt. Tous les alias définis par l'utilisateur dans libvirt doivent commencer par le préfixe "ua-".

      Hormis ces paramètres spécifiques, libvirt gère le périphérique virtio-mem comme n'importe quel autre périphérique PCI. Pour plus d'informations sur la gestion des périphériques PCI attachés aux machines virtuelles, voir : Gestion des périphériques virtuels

  4. Utilisez le fichier XML pour attacher les dispositifs virtio-mem définis à une VM. Par exemple, pour attacher de façon permanente les deux dispositifs définis dans le fichier virtio-mem-device.xml à la VM testguest1 en cours d'exécution :

    # virsh attach-device testguest1 virtio-mem-device.xml --live --config
    Copy to Clipboard Toggle word wrap

    L'option --live attache le périphérique à une VM en cours d'exécution uniquement, sans persistance entre les démarrages. L'option --config rend les modifications de configuration persistantes. Vous pouvez également attacher le périphérique à une VM à l'arrêt sans l'option --live.

  5. Optional: Pour modifier dynamiquement la taille de requested d'un périphérique virtio-mem connecté à une VM en cours d'exécution, utilisez la commande virsh update-memory-device:

    # virsh update-memory-device testguest1 --alias ua-virtiomem0 --requested-size 4GiB
    Copy to Clipboard Toggle word wrap

    Dans cet exemple :

    • testguest1 est la VM que vous souhaitez mettre à jour.
    • --alias ua-virtiomem0 est le dispositif virtio-mem spécifié par un alias précédemment défini.
    • --requested-size 4GiB modifie la taille de requested du périphérique virtio-mem à 4 GiB.

      Avertissement

      Débrancher la mémoire d'une VM en cours d'exécution en réduisant la taille de requested peut ne pas être fiable. La réussite de ce processus dépend de plusieurs facteurs, tels que la politique d'onlining de la mémoire utilisée.

      Dans certains cas, le système d'exploitation invité ne peut pas terminer la demande avec succès, car la modification de la quantité de mémoire connectée à chaud n'est pas possible à ce moment-là.

      En outre, le débranchement de la mémoire d'une VM en cours d'exécution est désactivé par défaut dans les VM RHEL 8.10.

  6. Optional: Pour débrancher un périphérique virtio-mem d'une VM arrêtée, utilisez la commande virsh detach-device:

    # virsh detach-device testguest1 virtio-mem-device.xml
    Copy to Clipboard Toggle word wrap
  7. Optional: Pour débrancher un périphérique virtio-mem d'une VM en cours d'exécution :

    1. Modifiez la taille de requested du périphérique virtio-mem à 0, sinon la tentative de débrancher un périphérique virtio-mem d'une VM en cours d'exécution échouera.

      # virsh update-memory-device testguest1 --alias ua-virtiomem0 --requested-size 0
      Copy to Clipboard Toggle word wrap
    2. Débranchez un périphérique virtio-mem de la VM en cours d'exécution :

      # virsh detach-device testguest1 virtio-mem-device.xml
      Copy to Clipboard Toggle word wrap

Vérification

  • Dans la VM, vérifiez la RAM disponible et voyez si la quantité totale inclut maintenant la mémoire connectée à chaud :

    # free -h
    
            total    used    free   shared  buff/cache   available
    Mem:    31Gi     5.5Gi   14Gi   1.3Gi   11Gi         23Gi
    Swap:   8.0Gi    0B      8.0Gi
    Copy to Clipboard Toggle word wrap
    # numactl -H
    
    available: 1 nodes (0)
    node 0 cpus: 0 1 2 3 4 5 6 7
    node 0 size: 29564 MB
    node 0 free: 13351 MB
    node distances:
    node   0
      0:  10
    Copy to Clipboard Toggle word wrap
  • La quantité actuelle de RAM branchée peut également être visualisée sur l'hôte en affichant la configuration XML de la VM en cours d'exécution :

    # virsh dumpxml testguest1
    
    <domain type='kvm'>
      <name>testguest1</name>
      ...
      <currentMemory unit='GiB'>31</currentMemory>
      ...
      <memory model='virtio-mem'>
          <target>
            <size unit='GiB'>48</size>
            <node>0</node>
            <block unit='MiB'>2</block>
            <requested unit='GiB'>16</requested>
            <current unit='GiB'>16</current>
          </target>
          <alias name='ua-virtiomem0'/>
          <address type='pci' domain='0x0000' bus='0x08' slot='0x00' function='0x0'/>
      ...
    </domain>
    Copy to Clipboard Toggle word wrap

    Dans cet exemple :

    • <currentMemory unit='GiB'>31</currentMemory> représente la mémoire vive totale disponible dans la VM, toutes sources confondues.
    • <current unit='GiB'>16</current> représente la taille actuelle de la mémoire vive enfichée fournie par le dispositif virtio-mem.

Lorsque vous attachez de la mémoire à une machine virtuelle RHEL en cours d'exécution (également connue sous le nom de hot-plugging de mémoire), vous devez mettre la mémoire hot-plugged dans un état en ligne dans le système d'exploitation de la machine virtuelle (VM). Sinon, le système ne pourra pas utiliser la mémoire.

Le tableau suivant résume les principales considérations à prendre en compte lors du choix entre les différentes configurations de mise en ligne de la mémoire.

Expand
Tableau 18.1. Comparaison des configurations d'optimisation de la mémoire
Nom de la configurationDébrancher la mémoire d'une VMUn risque de déséquilibre de la zone de mémoireUn cas d'utilisation potentielExigences en matière de mémoire de la charge de travail prévue

online_movable

La mémoire connectée à chaud peut être débranchée de manière fiable.

Oui

Branchement à chaud d'une quantité relativement faible de mémoire

Principalement la mémoire de l'espace utilisateur

auto-movable

Les parties mobiles de la mémoire connectée à chaud peuvent être débranchées de manière fiable.

Minime

Branchement à chaud d'une grande quantité de mémoire

Principalement la mémoire de l'espace utilisateur

online_kernel

La mémoire connectée à chaud ne peut pas être débranchée de manière fiable.

Non

Un débranchement de la mémoire peu fiable est acceptable.

Mémoire de l'espace utilisateur ou de l'espace noyau

Un zone imbalance est un manque de pages de mémoire disponibles dans l'une des zones de mémoire de Linux. Un zone imbalance peut avoir un impact négatif sur les performances du système. Par exemple, le noyau peut se bloquer s'il n'a plus de mémoire libre pour les allocations inamovibles. En général, les allocations mobiles contiennent principalement des pages de mémoire de l'espace utilisateur et les allocations inamovibles contiennent principalement des pages de mémoire de l'espace noyau.

Les capacités d'entrée et de sortie (E/S) d'une machine virtuelle (VM) peuvent limiter de manière significative l'efficacité globale de la VM. Pour y remédier, vous pouvez optimiser les E/S d'une VM en configurant les paramètres d'E/S par bloc.

Lorsque plusieurs périphériques de bloc sont utilisés par une ou plusieurs machines virtuelles, il peut être important d'ajuster la priorité d'E/S de certains périphériques virtuels en modifiant leur adresse I/O weights.

L'augmentation du poids d'E/S d'un périphérique augmente sa priorité pour la bande passante d'E/S et lui permet donc de disposer de plus de ressources hôte. De même, la réduction du poids d'un périphérique lui permet de consommer moins de ressources hôte.

Note

La valeur weight de chaque appareil doit être comprise entre 100 et 1000. La valeur peut également être 0, ce qui supprime ce dispositif des listes par dispositif.

Procédure

Pour afficher et définir les paramètres d'E/S en bloc d'une VM :

  1. Affiche les paramètres actuels de <blkio> pour une VM :

    # virsh dumpxml VM-name

    <domain>
      [...]
      <blkiotune>
        <weight>800</weight>
        <device>
          <path>/dev/sda</path>
          <weight>1000</weight>
        </device>
        <device>
          <path>/dev/sdb</path>
          <weight>500</weight>
        </device>
      </blkiotune>
      [...]
    </domain>
    Copy to Clipboard Toggle word wrap
  2. Modifier le poids des E/S d'un appareil spécifié :

    # virsh blkiotune VM-name --device-weights device, I/O-weight
    Copy to Clipboard Toggle word wrap

    Par exemple, la procédure suivante modifie le poids du périphérique /dev/sda dans la VM testguest1 pour le porter à 500.

    # virsh blkiotune testguest1 --device-weights /dev/sda, 500
    Copy to Clipboard Toggle word wrap

Lorsque plusieurs machines virtuelles fonctionnent simultanément, elles peuvent perturber les performances du système en utilisant un nombre excessif d'entrées/sorties sur disque. La limitation des E/S disque dans la virtualisation KVM permet de fixer une limite aux demandes d'E/S disque envoyées par les machines virtuelles à la machine hôte. Cela permet d'éviter qu'une machine virtuelle ne surutilise les ressources partagées et n'affecte les performances des autres machines virtuelles.

Pour activer la limitation des E/S de disque, définissez une limite pour les demandes d'E/S de disque envoyées à la machine hôte à partir de chaque périphérique de bloc attaché aux machines virtuelles.

Procédure

  1. Utilisez la commande virsh domblklist pour répertorier les noms de tous les périphériques de disque d'une VM donnée.

    # virsh domblklist rollin-coal
    Target     Source
    ------------------------------------------------
    vda        /var/lib/libvirt/images/rollin-coal.qcow2
    sda        -
    sdb        /home/horridly-demanding-processes.iso
    Copy to Clipboard Toggle word wrap
  2. Recherchez le périphérique de bloc hôte sur lequel est monté le disque virtuel que vous souhaitez supprimer.

    Par exemple, si vous souhaitez accélérer le disque virtuel sdb de l'étape précédente, la sortie suivante montre que le disque est monté sur la partition /dev/nvme0n1p3.

    $ lsblk
    NAME                                          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
    zram0                                         252:0    0     4G  0 disk  [SWAP]
    nvme0n1                                       259:0    0 238.5G  0 disk
    ├─nvme0n1p1                                   259:1    0   600M  0 part  /boot/efi
    ├─nvme0n1p2                                   259:2    0     1G  0 part  /boot
    └─nvme0n1p3                                   259:3    0 236.9G  0 part
      └─luks-a1123911-6f37-463c-b4eb-fxzy1ac12fea 253:0    0 236.9G  0 crypt /home
    Copy to Clipboard Toggle word wrap
  3. Définissez les limites d'E/S pour le périphérique de bloc à l'aide de la commande virsh blkiotune.

    # virsh blkiotune VM-name --parameter device,limit
    Copy to Clipboard Toggle word wrap

    L'exemple suivant limite le disque sdb de la VM rollin-coal à 1 000 opérations d'E/S en lecture et en écriture par seconde et à 50 Mo par seconde de débit en lecture et en écriture.

    # virsh blkiotune rollin-coal --device-read-iops-sec /dev/nvme0n1p3,1000 --device-write-iops-sec /dev/nvme0n1p3,1000 --device-write-bytes-sec /dev/nvme0n1p3,52428800 --device-read-bytes-sec /dev/nvme0n1p3,52428800
    Copy to Clipboard Toggle word wrap

Informations complémentaires

  • L'étranglement des E/S disque peut être utile dans diverses situations, par exemple lorsque des machines virtuelles appartenant à différents clients tournent sur le même hôte, ou lorsque des garanties de qualité de service sont données pour différentes machines virtuelles. La limitation des E/S disque peut également être utilisée pour simuler des disques plus lents.
  • La limitation des E/S peut être appliquée indépendamment à chaque périphérique bloc attaché à une VM et permet de limiter le débit et les opérations d'E/S.
  • Red Hat ne prend pas en charge l'utilisation de la commande virsh blkdeviotune pour configurer la limitation des E/S dans les machines virtuelles. Pour plus d'informations sur les fonctionnalités non prises en charge lors de l'utilisation de RHEL 9 en tant qu'hôte de VM, voir Fonctionnalités non prises en charge dans la virtualisation RHEL 9.

18.5.3. Activation de virtio-scsi multi-queues

Lorsque vous utilisez des périphériques de stockage virtio-scsi dans vos machines virtuelles (VM), la fonction multi-queue virtio-scsi améliore les performances et l'évolutivité du stockage. Elle permet à chaque unité centrale virtuelle (vCPU) de disposer d'une file d'attente distincte et d'une interruption à utiliser sans affecter les autres vCPU.

Procédure

  • Pour activer la prise en charge de virtio-scsi multi-queues pour une VM spécifique, ajoutez les éléments suivants à la configuration XML de la VM, où N est le nombre total de files d'attente vCPU :

    <controller type='scsi' index='0' model='virtio-scsi'>
       <driver queues='N' />
    </controller>
    Copy to Clipboard Toggle word wrap

Tout comme les processeurs physiques des machines hôtes, les vCPU sont essentiels aux performances des machines virtuelles (VM). Par conséquent, l'optimisation des vCPU peut avoir un impact significatif sur l'efficacité des ressources de vos VM. Pour optimiser votre vCPU :

  1. Ajustez le nombre d'unités centrales attribuées à la VM. Vous pouvez effectuer cette opération à l'aide du CLI ou de la console Web.
  2. Assurez-vous que le modèle vCPU est aligné sur le modèle CPU de l'hôte. Par exemple, pour configurer la VM testguest1 afin qu'elle utilise le modèle de CPU de l'hôte :

    # virt-xml testguest1 --edit --cpu host-model
    Copy to Clipboard Toggle word wrap

    Sur un système ARM 64, utilisez --cpu host-passthrough.

  3. Gérer la fusion des pages identiques du noyau (KSM).
  4. Si votre machine hôte utilise l'accès non uniforme à la mémoire (NUMA), vous pouvez également consulter le site configure NUMA pour ses machines virtuelles. Les processus de l'unité centrale et de la mémoire de l'hôte sont ainsi mappés au plus près des processus de l'unité centrale et de la mémoire de la VM. En effet, le réglage NUMA fournit au vCPU un accès plus rationnel à la mémoire système allouée à la VM, ce qui peut améliorer l'efficacité de traitement du vCPU.

    Pour plus de détails, voir Configuration de NUMA dans une machine virtuelle et Exemple de scénario d'optimisation des performances vCPU.

Pour augmenter ou optimiser les performances du processeur d'une machine virtuelle (VM), vous pouvez ajouter ou supprimer des processeurs virtuels (vCPU) assignés à la VM.

Lorsqu'elle est effectuée sur une VM en cours d'exécution, cette opération est également appelée vCPU hot plugging et hot unplugging (branchement et débranchement à chaud des vCPU). Cependant, notez que le vCPU hot unplug n'est pas pris en charge dans RHEL 9, et Red Hat déconseille fortement son utilisation.

Conditions préalables

  • Optional: Affichez l'état actuel des vCPU de la VM ciblée. Par exemple, pour afficher le nombre de vCPU sur la VM testguest:

    # virsh vcpucount testguest
    maximum      config         4
    maximum      live           2
    current      config         2
    current      live           1
    Copy to Clipboard Toggle word wrap

    Cette sortie indique que testguest utilise actuellement 1 vCPU, et qu'il est possible d'y connecter à chaud 1 vCPU supplémentaire pour augmenter les performances de la VM. Cependant, après le redémarrage, le nombre de vCPUs utilisées par testguest passera à 2, et il sera possible de brancher à chaud 2 vCPUs supplémentaires.

Procédure

  1. Ajuste le nombre maximum de vCPU qui peuvent être attachés à une VM, ce qui prend effet au prochain démarrage de la VM.

    Par exemple, pour augmenter le nombre maximum de vCPU pour la VM testguest à 8 :

    # virsh setvcpus testguest 8 --maximum --config
    Copy to Clipboard Toggle word wrap

    Notez que le maximum peut être limité par la topologie de l'unité centrale, le matériel de l'hôte, l'hyperviseur et d'autres facteurs.

  2. Ajustez le nombre actuel de vCPUs attachés à une VM, jusqu'au maximum configuré à l'étape précédente. Par exemple :

    • Pour augmenter le nombre de vCPU attachés à la VM testguest en cours d'exécution à 4 :

      # virsh setvcpus testguest 4 --live
      Copy to Clipboard Toggle word wrap

      Cela augmente les performances de la VM et l'empreinte de la charge de l'hôte de testguest jusqu'au prochain démarrage de la VM.

    • Pour réduire de façon permanente le nombre de vCPUs attachés à la VM testguest à 1 :

      # virsh setvcpus testguest 1 --config
      Copy to Clipboard Toggle word wrap

      Cela diminue les performances de la VM et l'empreinte de la charge de l'hôte sur testguest après le prochain démarrage de la VM. Toutefois, si nécessaire, des vCPU supplémentaires peuvent être connectées à chaud à la VM pour augmenter temporairement ses performances.

Vérification

  • Confirmez que l'état actuel de vCPU pour la VM reflète vos changements.

    # virsh vcpucount testguest
    maximum      config         8
    maximum      live           4
    current      config         1
    current      live           4
    Copy to Clipboard Toggle word wrap

18.6.2. Gestion des CPU virtuels à l'aide de la console web

En utilisant la console web RHEL 9, vous pouvez examiner et configurer les CPU virtuels utilisés par les machines virtuelles (VM) auxquelles la console web est connectée.

Conditions préalables

Procédure

  1. Dans l'interface Machines virtuelles, cliquez sur la VM dont vous voulez voir les informations.

    Une nouvelle page s'ouvre avec une section Vue d'ensemble contenant des informations de base sur la VM sélectionnée et une section Console permettant d'accéder à l'interface graphique de la VM.

  2. Cliquez sur modifier en regard du nombre de vCPU dans le volet Vue d'ensemble.

    La boîte de dialogue vCPU details apparaît.

  1. Configurer les CPU virtuels pour la VM sélectionnée.

    • vCPU Count - Le nombre de vCPUs actuellement utilisés.

      Note

      Le nombre de vCPU ne peut pas être supérieur au maximum de vCPU.

    • vCPU Maximum - Le nombre maximum de CPU virtuels qui peuvent être configurés pour la VM. Si cette valeur est supérieure à vCPU Count, des vCPU supplémentaires peuvent être attachés à la VM.
    • Sockets - Le nombre de sockets à exposer à la VM.
    • Cores per socket - Le nombre de cœurs pour chaque socket à exposer à la VM.
    • Threads per core - Le nombre de threads pour chaque cœur à exposer à la VM.

      Notez que les options Sockets, Cores per socket, et Threads per core ajustent la topologie du CPU de la VM. Cela peut être bénéfique pour les performances du vCPU et peut avoir un impact sur la fonctionnalité de certains logiciels dans le système d'exploitation invité. Si un paramètre différent n'est pas requis par votre déploiement, conservez les valeurs par défaut.

  2. Cliquez sur Appliquer.

    Les CPU virtuels de la VM sont configurés.

    Note

    Les modifications apportées aux paramètres de l'unité centrale virtuelle ne prennent effet qu'après le redémarrage de la VM.

18.6.3. Configurer NUMA dans une machine virtuelle

Les méthodes suivantes peuvent être utilisées pour configurer les paramètres NUMA (Non-Uniform Memory Access) d'une machine virtuelle (VM) sur un hôte RHEL 9.

Conditions préalables

  • L'hôte est une machine compatible NUMA. Pour savoir si c'est le cas, utilisez la commande virsh nodeinfo et consultez la ligne NUMA cell(s):

    # virsh nodeinfo
    CPU model:           x86_64
    CPU(s):              48
    CPU frequency:       1200 MHz
    CPU socket(s):       1
    Core(s) per socket:  12
    Thread(s) per core:  2
    NUMA cell(s):        2
    Memory size:         67012964 KiB
    Copy to Clipboard Toggle word wrap

    Si la valeur de la ligne est égale ou supérieure à 2, l'hôte est compatible NUMA.

Procédure

Pour faciliter l'utilisation, vous pouvez mettre en place la configuration NUMA d'une VM à l'aide d'utilitaires et de services automatisés. Toutefois, une configuration NUMA manuelle est plus susceptible de produire une amélioration significative des performances.

Automatic methods

  • Définissez la politique NUMA de la VM sur Preferred. Par exemple, pour la VM testguest5:

    # virt-xml testguest5 --edit --vcpus placement=auto
    # virt-xml testguest5 --edit --numatune mode=preferred
    Copy to Clipboard Toggle word wrap
  • Activer l'équilibrage automatique des NUMA sur l'hôte :

    # echo 1 > /proc/sys/kernel/numa_balancing
    Copy to Clipboard Toggle word wrap
  • Démarrez le service numad pour aligner automatiquement le processeur de la VM sur les ressources mémoire.

    # systemctl start numad
    Copy to Clipboard Toggle word wrap

Manual methods

  1. Affecter des threads vCPU spécifiques à un processeur hôte spécifique ou à une gamme de processeurs. Ceci est également possible sur les hôtes et les VMs non-NUMA, et est recommandé comme méthode sûre d'amélioration des performances vCPU.

    Par exemple, les commandes suivantes épinglent les threads vCPU 0 à 5 de la VM testguest6 aux CPU 1, 3, 5, 7, 9 et 11 de l'hôte, respectivement :

    # virsh vcpupin testguest6 0 1
    # virsh vcpupin testguest6 1 3
    # virsh vcpupin testguest6 2 5
    # virsh vcpupin testguest6 3 7
    # virsh vcpupin testguest6 4 9
    # virsh vcpupin testguest6 5 11
    Copy to Clipboard Toggle word wrap

    Vous pouvez ensuite vérifier si l'opération s'est déroulée correctement :

    # virsh vcpupin testguest6
    VCPU   CPU Affinity
    ----------------------
    0      1
    1      3
    2      5
    3      7
    4      9
    5      11
    Copy to Clipboard Toggle word wrap
  2. Après avoir épinglé les threads vCPU, vous pouvez également épingler les threads de processus QEMU associés à une VM spécifique à un processeur hôte spécifique ou à une plage de processeurs. Par exemple, les commandes suivantes épinglent le thread de processus QEMU de testguest6 aux CPU 13 et 15, et vérifient que cela a réussi :

    # virsh emulatorpin testguest6 13,15
    # virsh emulatorpin testguest6
    emulator: CPU Affinity
    ----------------------------------
           *: 13,15
    Copy to Clipboard Toggle word wrap
  3. Enfin, vous pouvez également spécifier les nœuds NUMA de l'hôte qui seront affectés spécifiquement à une certaine VM. Cela peut améliorer l'utilisation de la mémoire de l'hôte par le vCPU de la VM. Par exemple, les commandes suivantes configurent testguest6 pour qu'il utilise les nœuds NUMA 3 à 5, et vérifient que l'opération a réussi :

    # virsh numatune testguest6 --nodeset 3-5
    # virsh numatune testguest6
    Copy to Clipboard Toggle word wrap
Note

Pour obtenir les meilleurs résultats, il est recommandé d'utiliser toutes les méthodes de réglage manuel énumérées ci-dessus

Pour obtenir la meilleure performance vCPU possible, Red Hat recommande d'utiliser les paramètres manuels vcpupin, emulatorpin, et numatune ensemble, par exemple comme dans le scénario suivant.

Scénario de départ

  • Votre hôte présente les caractéristiques matérielles suivantes :

    • 2 nœuds NUMA
    • 3 cœurs de CPU sur chaque nœud
    • 2 threads sur chaque cœur

    La sortie de virsh nodeinfo d'une telle machine ressemblerait à ce qui suit :

    # virsh nodeinfo
    CPU model:           x86_64
    CPU(s):              12
    CPU frequency:       3661 MHz
    CPU socket(s):       2
    Core(s) per socket:  3
    Thread(s) per core:  2
    NUMA cell(s):        2
    Memory size:         31248692 KiB
    Copy to Clipboard Toggle word wrap
  • Vous avez l'intention de modifier une VM existante pour qu'elle ait 8 vCPU, ce qui signifie qu'elle ne tiendra pas dans un seul nœud NUMA.

    Par conséquent, vous devez distribuer 4 vCPU sur chaque nœud NUMA et faire en sorte que la topologie des vCPU ressemble le plus possible à la topologie de l'hôte. Cela signifie que les vCPU qui s'exécutent en tant que threads frères d'une unité centrale physique donnée doivent être rattachées à des threads hôtes sur le même cœur. Pour plus de détails, voir le site Solution ci-dessous :

Solution

  1. Obtenir des informations sur la topologie de l'hôte :

    # virsh capabilities
    Copy to Clipboard Toggle word wrap

    Le résultat doit comprendre une section qui ressemble à ce qui suit :

    <topology>
      <cells num="2">
        <cell id="0">
          <memory unit="KiB">15624346</memory>
          <pages unit="KiB" size="4">3906086</pages>
          <pages unit="KiB" size="2048">0</pages>
          <pages unit="KiB" size="1048576">0</pages>
          <distances>
            <sibling id="0" value="10" />
            <sibling id="1" value="21" />
          </distances>
          <cpus num="6">
            <cpu id="0" socket_id="0" core_id="0" siblings="0,3" />
            <cpu id="1" socket_id="0" core_id="1" siblings="1,4" />
            <cpu id="2" socket_id="0" core_id="2" siblings="2,5" />
            <cpu id="3" socket_id="0" core_id="0" siblings="0,3" />
            <cpu id="4" socket_id="0" core_id="1" siblings="1,4" />
            <cpu id="5" socket_id="0" core_id="2" siblings="2,5" />
          </cpus>
        </cell>
        <cell id="1">
          <memory unit="KiB">15624346</memory>
          <pages unit="KiB" size="4">3906086</pages>
          <pages unit="KiB" size="2048">0</pages>
          <pages unit="KiB" size="1048576">0</pages>
          <distances>
            <sibling id="0" value="21" />
            <sibling id="1" value="10" />
          </distances>
          <cpus num="6">
            <cpu id="6" socket_id="1" core_id="3" siblings="6,9" />
            <cpu id="7" socket_id="1" core_id="4" siblings="7,10" />
            <cpu id="8" socket_id="1" core_id="5" siblings="8,11" />
            <cpu id="9" socket_id="1" core_id="3" siblings="6,9" />
            <cpu id="10" socket_id="1" core_id="4" siblings="7,10" />
            <cpu id="11" socket_id="1" core_id="5" siblings="8,11" />
          </cpus>
        </cell>
      </cells>
    </topology>
    Copy to Clipboard Toggle word wrap
  2. Optional: Testez les performances de la VM en utilisant les outils et utilitaires appropriés.
  3. Mettre en place et monter des pages gigantesques de 1 GiB sur l'hôte :

    Note

    il se peut que certaines architectures et configurations, telles que les hôtes ARM 64, ne disposent pas d'énormes pages de 1 gigaoctet.

    1. Ajoutez la ligne suivante à la ligne de commande du noyau de l'hôte :

      default_hugepagesz=1G hugepagesz=1G
      Copy to Clipboard Toggle word wrap
    2. Créez le fichier /etc/systemd/system/hugetlb-gigantic-pages.service avec le contenu suivant :

      [Unit]
      Description=HugeTLB Gigantic Pages Reservation
      DefaultDependencies=no
      Before=dev-hugepages.mount
      ConditionPathExists=/sys/devices/system/node
      ConditionKernelCommandLine=hugepagesz=1G
      
      [Service]
      Type=oneshot
      RemainAfterExit=yes
      ExecStart=/etc/systemd/hugetlb-reserve-pages.sh
      
      [Install]
      WantedBy=sysinit.target
      Copy to Clipboard Toggle word wrap
    3. Créez le fichier /etc/systemd/hugetlb-reserve-pages.sh avec le contenu suivant :

      #!/bin/sh
      
      nodes_path=/sys/devices/system/node/
      if [ ! -d $nodes_path ]; then
      	echo "ERROR: $nodes_path does not exist"
      	exit 1
      fi
      
      reserve_pages()
      {
      	echo $1 > $nodes_path/$2/hugepages/hugepages-1048576kB/nr_hugepages
      }
      
      reserve_pages 4 node1
      reserve_pages 4 node2
      Copy to Clipboard Toggle word wrap

      Cela réserve quatre grandes pages de 1GiB de node1 et quatre grandes pages de 1GiB de node2.

    4. Rendez exécutable le script créé à l'étape précédente :

      # chmod x /etc/systemd/hugetlb-reserve-pages.sh
      Copy to Clipboard Toggle word wrap
    5. Activer la réservation d'une grande page au démarrage :

      # systemctl enable hugetlb-gigantic-pages
      Copy to Clipboard Toggle word wrap
  4. Utilisez la commande virsh edit pour éditer la configuration XML de la VM que vous souhaitez optimiser, dans cet exemple super-VM:

    # virsh edit super-vm
    Copy to Clipboard Toggle word wrap
  5. Ajustez la configuration XML de la VM de la manière suivante :

    1. Configurez la VM pour qu'elle utilise 8 vCPU statiques. Pour ce faire, utilisez l'élément <vcpu/>.
    2. Épinglez chacun des threads vCPU aux threads correspondants de l'unité centrale de l'hôte qu'il reflète dans la topologie. Pour ce faire, utilisez les éléments <vcpupin/> dans la section <cputune>.

      Notez que, comme le montre l'utilitaire virsh capabilities ci-dessus, les threads du processeur hôte ne sont pas ordonnés de manière séquentielle dans leurs cœurs respectifs. En outre, les threads vCPU doivent être rattachés à l'ensemble le plus élevé de cœurs hôtes disponibles sur le même nœud NUMA. Pour une illustration sous forme de tableau, voir la section Sample topology ci-dessous.

      La configuration XML pour les étapes a. et b. peut ressembler à ce qui suit :

      <cputune>
        <vcpupin vcpu='0' cpuset='1'/>
        <vcpupin vcpu='1' cpuset='4'/>
        <vcpupin vcpu='2' cpuset='2'/>
        <vcpupin vcpu='3' cpuset='5'/>
        <vcpupin vcpu='4' cpuset='7'/>
        <vcpupin vcpu='5' cpuset='10'/>
        <vcpupin vcpu='6' cpuset='8'/>
        <vcpupin vcpu='7' cpuset='11'/>
        <emulatorpin cpuset='6,9'/>
      </cputune>
      Copy to Clipboard Toggle word wrap
    3. Configurez la VM pour qu'elle utilise 1 GiB de pages énormes :

      <memoryBacking>
        <hugepages>
          <page size='1' unit='GiB'/>
        </hugepages>
      </memoryBacking>
      Copy to Clipboard Toggle word wrap
    4. Configurez les nœuds NUMA de la VM pour qu'ils utilisent la mémoire des nœuds NUMA correspondants de l'hôte. Pour ce faire, utilisez les éléments <memnode/> dans la section <numatune/>:

      <numatune>
        <memory mode="preferred" nodeset="1"/>
        <memnode cellid="0" mode="strict" nodeset="0"/>
        <memnode cellid="1" mode="strict" nodeset="1"/>
      </numatune>
      Copy to Clipboard Toggle word wrap
    5. Assurez-vous que le mode de l'unité centrale est réglé sur host-passthrough et que l'unité centrale utilise la mémoire cache en mode passthrough:

      <cpu mode="host-passthrough">
        <topology sockets="2" cores="2" threads="2"/>
        <cache mode="passthrough"/>
      Copy to Clipboard Toggle word wrap

      Sur un système ARM 64, omettre la ligne <cache mode="passthrough"/>.

Vérification

  1. Confirmez que la configuration XML résultante de la VM comprend une section similaire à la suivante :

    [...]
      <memoryBacking>
        <hugepages>
          <page size='1' unit='GiB'/>
        </hugepages>
      </memoryBacking>
      <vcpu placement='static'>8</vcpu>
      <cputune>
        <vcpupin vcpu='0' cpuset='1'/>
        <vcpupin vcpu='1' cpuset='4'/>
        <vcpupin vcpu='2' cpuset='2'/>
        <vcpupin vcpu='3' cpuset='5'/>
        <vcpupin vcpu='4' cpuset='7'/>
        <vcpupin vcpu='5' cpuset='10'/>
        <vcpupin vcpu='6' cpuset='8'/>
        <vcpupin vcpu='7' cpuset='11'/>
        <emulatorpin cpuset='6,9'/>
      </cputune>
      <numatune>
        <memory mode="preferred" nodeset="1"/>
        <memnode cellid="0" mode="strict" nodeset="0"/>
        <memnode cellid="1" mode="strict" nodeset="1"/>
      </numatune>
      <cpu mode="host-passthrough">
        <topology sockets="2" cores="2" threads="2"/>
        <cache mode="passthrough"/>
        <numa>
          <cell id="0" cpus="0-3" memory="2" unit="GiB">
            <distances>
              <sibling id="0" value="10"/>
              <sibling id="1" value="21"/>
            </distances>
          </cell>
          <cell id="1" cpus="4-7" memory="2" unit="GiB">
            <distances>
              <sibling id="0" value="21"/>
              <sibling id="1" value="10"/>
            </distances>
          </cell>
        </numa>
      </cpu>
    </domain>
    Copy to Clipboard Toggle word wrap
  2. Optional: Tester les performances de la VM en utilisant les outils et utilitaires applicables pour évaluer l'impact de l'optimisation de la VM.

Exemple de topologie

  • Les tableaux suivants illustrent les connexions entre les vCPU et les CPU hôtes auxquels ils doivent être rattachés :

    Expand
    Tableau 18.2. Topologie de l'hôte

    CPU threads

    0

    3

    1

    4

    2

    5

    6

    9

    7

    10

    8

    11

    Cores

    0

    1

    2

    3

    4

    5

    Sockets

    0

    1

    NUMA nodes

    0

    1

    Expand
    Tableau 18.3. Topologie de la VM

    vCPU threads

    0

    1

    2

    3

    4

    5

    6

    7

    Cores

    0

    1

    2

    3

    Sockets

    0

    1

    NUMA nodes

    0

    1

    Expand
    Tableau 18.4. Topologie combinée d'hôtes et de machines virtuelles

    vCPU threads

     

    0

    1

    2

    3

     

    4

    5

    6

    7

    Host CPU threads

    0

    3

    1

    4

    2

    5

    6

    9

    7

    10

    8

    11

    Cores

    0

    1

    2

    3

    4

    5

    Sockets

    0

    1

    NUMA nodes

    0

    1

    Dans ce scénario, il y a 2 nœuds NUMA et 8 vCPU. Par conséquent, 4 threads vCPU doivent être épinglés sur chaque nœud.

    De plus, Red Hat recommande de laisser au moins un thread de CPU disponible sur chaque nœud pour les opérations du système hôte.

    Étant donné que dans cet exemple, chaque nœud NUMA héberge 3 cœurs, chacun avec 2 threads de l'unité centrale, l'ensemble pour le nœud 0 se traduit comme suit :

    <vcpupin vcpu='0' cpuset='1'/>
    <vcpupin vcpu='1' cpuset='4'/>
    <vcpupin vcpu='2' cpuset='2'/>
    <vcpupin vcpu='3' cpuset='5'/>
    Copy to Clipboard Toggle word wrap

18.6.5. Gestion de la fusion de pages identiques dans le noyau

Le Kernel Same-Page Merging (KSM) améliore la densité de la mémoire en partageant des pages de mémoire identiques entre les machines virtuelles (VM). Cependant, l'activation de KSM augmente l'utilisation du processeur et peut nuire aux performances globales en fonction de la charge de travail.

En fonction de vos besoins, vous pouvez activer ou désactiver KSM pour une session unique ou de façon permanente.

Note

Dans RHEL 9 et les versions ultérieures, KSM est désactivé par défaut.

Conditions préalables

  • Accès à la racine de votre système hôte.

Procédure

  • Désactiver KSM :

    • Pour désactiver KSM pour une seule session, utilisez l'utilitaire systemctl pour arrêter les services ksm et ksmtuned.

      # systemctl stop ksm
      
      # systemctl stop ksmtuned
      Copy to Clipboard Toggle word wrap
    • Pour désactiver KSM de manière persistante, utilisez l'utilitaire systemctl pour désactiver les services ksm et ksmtuned.

      # systemctl disable ksm
      Removed /etc/systemd/system/multi-user.target.wants/ksm.service.
      # systemctl disable ksmtuned
      Removed /etc/systemd/system/multi-user.target.wants/ksmtuned.service.
      Copy to Clipboard Toggle word wrap
Note

Les pages de mémoire partagées entre les machines virtuelles avant la désactivation de KSM resteront partagées. Pour arrêter le partage, supprimez toutes les pages PageKSM dans le système à l'aide de la commande suivante :

# echo 2 > /sys/kernel/mm/ksm/run
Copy to Clipboard Toggle word wrap

Une fois que les pages anonymes ont remplacé les pages KSM, le service du noyau khugepaged reconstruit les hugepages transparentes sur la mémoire physique de la VM.

  • Activer KSM :
Avertissement

L'activation de KSM augmente l'utilisation de l'unité centrale et affecte les performances globales de l'unité centrale.

  1. Installer le service ksmtuned:

    # dnf install ksmtuned

  2. Démarrer le service :

    • Pour activer KSM pour une seule session, utilisez l'utilitaire systemctl pour démarrer les services ksm et ksmtuned.

      # systemctl start ksm
      # systemctl start ksmtuned
      Copy to Clipboard Toggle word wrap
    • Pour activer KSM de manière persistante, utilisez l'utilitaire systemctl pour activer les services ksm et ksmtuned.

      # systemctl enable ksm
      Created symlink /etc/systemd/system/multi-user.target.wants/ksm.service → /usr/lib/systemd/system/ksm.service
      
      # systemctl enable ksmtuned
      Created symlink /etc/systemd/system/multi-user.target.wants/ksmtuned.service → /usr/lib/systemd/system/ksmtuned.service
      Copy to Clipboard Toggle word wrap

En raison de la nature virtuelle de la carte d'interface réseau (NIC) d'une VM, cette dernière perd une partie de la bande passante du réseau hôte qui lui est allouée, ce qui peut réduire l'efficacité globale de la charge de travail de la VM. Les conseils suivants peuvent minimiser l'impact négatif de la virtualisation sur le débit de la carte d'interface réseau virtuelle (vNIC).

Procédure

Utilisez l'une des méthodes suivantes et observez si elle a un effet bénéfique sur les performances du réseau de votre VM :

Activer le module vhost_net

Sur l'hôte, vérifiez que la fonction vhost_net kernel est activée :

# lsmod | grep vhost
vhost_net              32768  1
vhost                  53248  1 vhost_net
tap                    24576  1 vhost_net
tun                    57344  6 vhost_net
Copy to Clipboard Toggle word wrap

Si la sortie de cette commande est vide, activez le module du noyau vhost_net:

# modprobe vhost_net
Copy to Clipboard Toggle word wrap
Mise en place d'un réseau virtio-net multi-queues

Pour configurer la fonction multi-queue virtio-net pour une VM, utilisez la commande virsh edit pour éditer la configuration XML de la VM. Dans le fichier XML, ajoutez ce qui suit à la section <devices> et remplacez N par le nombre de vCPU de la VM, jusqu'à 16 :

<interface type='network'>
      <source network='default'/>
      <model type='virtio'/>
      <driver name='vhost' queues='N'/>
</interface>
Copy to Clipboard Toggle word wrap

Si la VM est en cours d'exécution, redémarrez-la pour que les modifications soient prises en compte.

Mise en lots des paquets réseau

Dans les configurations de VM Linux avec un long chemin de transmission, la mise en lot des paquets avant de les soumettre au noyau peut améliorer l'utilisation du cache. Pour configurer la mise en lot des paquets, utilisez la commande suivante sur l'hôte et remplacez tap0 par le nom de l'interface réseau utilisée par les machines virtuelles :

# ethtool -C tap0 rx-frames 64
Copy to Clipboard Toggle word wrap
SR-IOV
Si votre carte réseau hôte prend en charge SR-IOV, utilisez l'affectation de périphériques SR-IOV pour vos cartes réseau virtuelles. Pour plus d'informations, voir Gestion des périphériques SR-IOV.

Pour identifier ce qui consomme le plus de ressources de la VM et quel aspect des performances de la VM doit être optimisé, il est possible d'utiliser des outils de diagnostic des performances, à la fois généraux et spécifiques à la VM.

Outils de contrôle des performances du système d'exploitation par défaut

Pour une évaluation standard des performances, vous pouvez utiliser les utilitaires fournis par défaut par vos systèmes d'exploitation hôte et invité :

  • Sur votre hôte RHEL 9, en tant que root, utilisez l'utilitaire top ou l'application system monitor, et recherchez qemu et virt dans les résultats. Cela indique la quantité de ressources du système hôte que vos machines virtuelles consomment.

    • Si l'outil de surveillance indique que l'un des processus qemu ou virt consomme une grande partie de l'unité centrale ou de la capacité de mémoire de l'hôte, utilisez l'utilitaire perf pour enquêter. Pour plus de détails, voir ci-dessous.
    • En outre, si un processus vhost_net, nommé par exemple vhost_net-1234, est affiché comme consommant une quantité excessive de capacité de l'unité centrale de l'hôte, envisagez d'utiliser des fonctions d'optimisation du réseau virtuel, telles que multi-queue virtio-net.
  • Sur le système d'exploitation invité, utilisez les utilitaires de performance et les applications disponibles sur le système pour évaluer les processus qui consomment le plus de ressources système.

    • Sur les systèmes Linux, vous pouvez utiliser l'utilitaire top.
    • Sur les systèmes Windows, vous pouvez utiliser l'application Task Manager.

perf kvm

Vous pouvez utiliser l'utilitaire perf pour collecter et analyser des statistiques spécifiques à la virtualisation sur les performances de votre hôte RHEL 9. Pour ce faire, procédez comme suit

  1. Sur l'hôte, installez le paquetage perf:

    # dnf install perf
    Copy to Clipboard Toggle word wrap
  2. Utilisez l'une des commandes perf kvm stat pour afficher les statistiques de perf de votre hôte de virtualisation :

    • Pour une surveillance en temps réel de votre hyperviseur, utilisez la commande perf kvm stat live.
    • Pour enregistrer les données de performance de votre hyperviseur sur une période donnée, activez l'enregistrement à l'aide de la commande perf kvm stat record. Après l'annulation ou l'interruption de la commande, les données sont enregistrées dans le fichier perf.data.guest, qui peut être analysé à l'aide de la commande perf kvm stat report.
  3. Analysez la sortie perf pour identifier les types d'événements VM-EXIT et leur distribution. Par exemple, les événements PAUSE_INSTRUCTION devraient être peu fréquents, mais dans la sortie suivante, l'occurrence élevée de cet événement suggère que les CPU de l'hôte ne gèrent pas bien les vCPU en cours d'exécution. Dans un tel scénario, envisagez d'arrêter certaines de vos machines virtuelles actives, de supprimer les vCPU de ces machines virtuelles ou de régler les performances des vCPU.

    # perf kvm stat report
    
    Analyze events for all VMs, all VCPUs:
    
    
                 VM-EXIT    Samples  Samples%     Time%    Min Time    Max Time         Avg time
    
      EXTERNAL_INTERRUPT     365634    31.59%    18.04%      0.42us  58780.59us    204.08us ( +-   0.99% )
               MSR_WRITE     293428    25.35%     0.13%      0.59us  17873.02us      1.80us ( +-   4.63% )
        PREEMPTION_TIMER     276162    23.86%     0.23%      0.51us  21396.03us      3.38us ( +-   5.19% )
       PAUSE_INSTRUCTION     189375    16.36%    11.75%      0.72us  29655.25us    256.77us ( +-   0.70% )
                     HLT      20440     1.77%    69.83%      0.62us  79319.41us  14134.56us ( +-   0.79% )
                  VMCALL      12426     1.07%     0.03%      1.02us   5416.25us      8.77us ( +-   7.36% )
           EXCEPTION_NMI         27     0.00%     0.00%      0.69us      1.34us      0.98us ( +-   3.50% )
           EPT_MISCONFIG          5     0.00%     0.00%      5.15us     10.85us      7.88us ( +-  11.67% )
    
    Total Samples:1157497, Total events handled time:413728274.66us.
    Copy to Clipboard Toggle word wrap

    D'autres types d'événements peuvent signaler des problèmes dans la sortie de perf kvm stat:

Pour plus d'informations sur l'utilisation de perf pour surveiller les performances de la virtualisation, voir la page de manuel perf-kvm.

numastat

Pour connaître la configuration NUMA actuelle de votre système, vous pouvez utiliser l'utilitaire numastat, qui est fourni en installant le paquetage numactl.

L'exemple suivant montre un hôte avec 4 VM en cours d'exécution, chacune obtenant de la mémoire à partir de plusieurs nœuds NUMA. Cette situation n'est pas optimale pour les performances des vCPU et mérite d'être corrigée:

# numastat -c qemu-kvm

Per-node process memory usage (in MBs)
PID              Node 0 Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Total
---------------  ------ ------ ------ ------ ------ ------ ------ ------ -----
51722 (qemu-kvm)     68     16    357   6936      2      3    147    598  8128
51747 (qemu-kvm)    245     11      5     18   5172   2532      1     92  8076
53736 (qemu-kvm)     62    432   1661    506   4851    136     22    445  8116
53773 (qemu-kvm)   1393      3      1      2     12      0      0   6702  8114
---------------  ------ ------ ------ ------ ------ ------ ------ ------ -----
Total              1769    463   2024   7462  10037   2672    169   7837 32434
Copy to Clipboard Toggle word wrap

En revanche, la figure suivante montre que la mémoire est fournie à chaque machine virtuelle par un seul nœud, ce qui est nettement plus efficace.

# numastat -c qemu-kvm

Per-node process memory usage (in MBs)
PID              Node 0 Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Total
---------------  ------ ------ ------ ------ ------ ------ ------ ------ -----
51747 (qemu-kvm)      0      0      7      0   8072      0      1      0  8080
53736 (qemu-kvm)      0      0      7      0      0      0   8113      0  8120
53773 (qemu-kvm)      0      0      7      0      0      0      1   8110  8118
59065 (qemu-kvm)      0      0   8050      0      0      0      0      0  8051
---------------  ------ ------ ------ ------ ------ ------ ------ ------ -----
Total                 0      0   8072      0   8072      0   8114   8110 32368
Copy to Clipboard Toggle word wrap

Chapitre 19. Sécuriser les machines virtuelles

En tant qu'administrateur d'un système RHEL 9 doté de machines virtuelles (VM), vous devez vous assurer que vos VM sont aussi sécurisées que possible afin de réduire considérablement le risque d'infection de vos systèmes d'exploitation invités et hôtes par des logiciels malveillants.

Ce document décrit les mécanismes de sécurisation des machines virtuelles sur un hôte RHEL 9 et fournit une liste de méthodes permettant d'améliorer la sécurité de vos machines virtuelles.

Lors de l'utilisation de machines virtuelles (VM), plusieurs systèmes d'exploitation peuvent être hébergés dans une seule machine hôte. Ces systèmes sont connectés à l'hôte par l'intermédiaire de l'hyperviseur et, en général, d'un réseau virtuel. Par conséquent, chaque VM peut être utilisée comme vecteur pour attaquer l'hôte avec des logiciels malveillants, et l'hôte peut être utilisé comme vecteur pour attaquer n'importe laquelle des VM.

Figure 19.1. Un vecteur potentiel d'attaque de logiciels malveillants sur un hôte de virtualisation

Étant donné que l'hyperviseur utilise le noyau de l'hôte pour gérer les machines virtuelles, les services fonctionnant sur le système d'exploitation de la machine virtuelle sont souvent utilisés pour injecter du code malveillant dans le système hôte. Cependant, vous pouvez protéger votre système contre de telles menaces de sécurité en utilisant un certain nombre de fonctions de sécurité sur votre système hôte et votre système invité.

Ces fonctionnalités, telles que SELinux ou QEMU sandboxing, fournissent diverses mesures qui rendent plus difficile l'attaque de l'hyperviseur par des codes malveillants et leur transfert entre votre hôte et vos machines virtuelles.

Figure 19.2. Prévention des attaques de logiciels malveillants sur un hôte de virtualisation

De nombreuses fonctionnalités fournies par RHEL 9 pour la sécurité des machines virtuelles sont toujours actives et n'ont pas besoin d'être activées ou configurées. Pour plus d'informations, voir Fonctionnalités automatiques pour la sécurité des machines virtuelles.

En outre, vous pouvez adhérer à une série de bonnes pratiques pour minimiser la vulnérabilité de vos machines virtuelles et de votre hyperviseur. Pour plus d'informations, voir Meilleures pratiques pour sécuriser les machines virtuelles.

Le respect des instructions ci-dessous réduit considérablement le risque que vos machines virtuelles soient infectées par un code malveillant et utilisées comme vecteurs d'attaque pour infecter votre système hôte.

On the guest side:

  • Sécuriser la machine virtuelle comme s'il s'agissait d'une machine physique. Les méthodes spécifiques disponibles pour renforcer la sécurité dépendent du système d'exploitation invité.

    Si votre VM exécute RHEL 9, voir Sécuriser Red Hat Enterprise Linux 9 pour des instructions détaillées sur l'amélioration de la sécurité de votre système invité.

On the host side:

  • Lorsque vous gérez des VM à distance, utilisez des utilitaires cryptographiques tels que SSH et des protocoles réseau tels que SSL pour vous connecter aux VM.
  • Assurez-vous que SELinux est en mode "Enforcing" :

    # getenforce
    Enforcing
    Copy to Clipboard Toggle word wrap

    Si SELinux est désactivé ou en mode Permissive, consultez le document Using SELinux pour savoir comment activer le mode Enforcing.

    Note

    Le mode SELinux Enforcing active également la fonction sVirt RHEL 9. Il s'agit d'un ensemble de booléens SELinux spécialisés dans la virtualisation, qui peuvent être ajustés manuellement pour une gestion fine de la sécurité des machines virtuelles.

  • Utiliser les VM avec SecureBoot:

    SecureBoot est une fonction qui garantit que votre VM exécute un système d'exploitation signé par un système de cryptographie. Cela empêche les machines virtuelles dont le système d'exploitation a été modifié par un logiciel malveillant de démarrer.

    SecureBoot ne peut être appliqué que lors de l'installation d'une VM Linux utilisant le micrologiciel OVMF sur un hôte AMD64 ou Intel 64. Pour plus d'informations, voir Création d'une machine virtuelle SecureBoot.

  • N'utilisez pas les commandes qemu-*, telles que qemu-kvm.

    QEMU est un composant essentiel de l'architecture de virtualisation dans RHEL 9, mais il est difficile à gérer manuellement, et des configurations QEMU incorrectes peuvent entraîner des vulnérabilités de sécurité. Par conséquent, l'utilisation de la plupart des commandes qemu-* n'est pas prise en charge par Red Hat. Utilisez plutôt les utilitaires libvirt, tels que virsh, virt-install, et virt-xml, car ils orchestrent QEMU selon les meilleures pratiques.

    Notez toutefois que l'utilitaire qemu-img est pris en charge pour la gestion des images de disques virtuels.

19.3. Création d'une machine virtuelle SecureBoot

Vous pouvez créer une machine virtuelle (VM) Linux qui utilise la fonctionnalité SecureBoot, qui garantit que votre VM exécute un système d'exploitation signé cryptographiquement. Cela peut s'avérer utile si le système d'exploitation invité d'une VM a été modifié par un logiciel malveillant. Dans ce cas, SecureBoot empêche la VM de démarrer, ce qui bloque la propagation potentielle du logiciel malveillant sur votre machine hôte.

Conditions préalables

  • La VM est le type de machine Q35.
  • Votre système hôte utilise l'architecture AMD64 ou Intel 64.
  • Le paquet edk2-OVMF est installé :

    # dnf install edk2-ovmf
    Copy to Clipboard Toggle word wrap
  • Une source d'installation du système d'exploitation (OS) est disponible localement ou sur un réseau. Il peut s'agir de l'un des formats suivants :

    • Une image ISO d'un support d'installation
    • Une image disque d'une installation VM existante

      Avertissement

      L'installation à partir d'un CD-ROM ou d'un DVD-ROM hôte n'est pas possible dans RHEL 9. Si vous sélectionnez un CD-ROM ou un DVD-ROM comme source d'installation lors de l'utilisation d'une méthode d'installation de VM disponible dans RHEL 9, l'installation échouera. Pour plus d'informations, consultez la base de connaissances de Red Hat.

  • Facultatif : Un fichier Kickstart peut être fourni pour faciliter et accélérer la configuration de l'installation.

Procédure

  1. Utilisez la commande virt-install pour créer une machine virtuelle, comme indiqué dans la section Création de machines virtuelles à l'aide de l'interface de ligne de commande. Pour l'option --boot, utilisez la valeur uefi,nvram_template=/usr/share/OVMF/OVMF_VARS.secboot.fd. Cette commande utilise les fichiers OVMF_VARS.secboot.fd et OVMF_CODE.secboot.fd comme modèles pour les paramètres de la mémoire vive non volatile (NVRAM) de la VM, ce qui permet d'activer la fonction SecureBoot.

    Par exemple :

    # virt-install --name rhel8sb --memory 4096 --vcpus 4 --os-variant rhel9.0 --boot uefi,nvram_template=/usr/share/OVMF/OVMF_VARS.secboot.fd --disk boot_order=2,size=10 --disk boot_order=1,device=cdrom,bus=scsi,path=/images/RHEL-9.0-installation.iso
    Copy to Clipboard Toggle word wrap
  2. Suivez la procédure d'installation du système d'exploitation conformément aux instructions affichées à l'écran.

Vérification

  1. Une fois le système d'exploitation invité installé, accédez à la ligne de commande de la VM en ouvrant le terminal dans la console graphique de l'invité ou en vous connectant au système d'exploitation invité à l'aide de SSH.
  2. Pour confirmer que SecureBoot a été activé sur la VM, utilisez la commande mokutil --sb-state:

    # mokutil --sb-state
    SecureBoot enabled
    Copy to Clipboard Toggle word wrap

Dans certains cas, les actions que les utilisateurs de machines virtuelles (VM) hébergées sur RHEL 9 peuvent effectuer par défaut peuvent présenter un risque pour la sécurité. Dans ce cas, vous pouvez limiter les actions disponibles pour les utilisateurs de VM en configurant les démons libvirt pour qu'ils utilisent la boîte à outils de stratégie polkit sur la machine hôte.

Procédure

  1. Optional: Assurez-vous que les politiques de contrôle de votre système polkit relatives à libvirt sont configurées selon vos préférences.

    1. Trouver tous les fichiers liés à libvirt dans les répertoires /usr/share/polkit-1/actions/ et /usr/share/polkit-1/rules.d/.

      # ls /usr/share/polkit-1/actions | grep libvirt
      # ls /usr/share/polkit-1/rules.d | grep libvirt
      Copy to Clipboard Toggle word wrap
    2. Ouvrez les fichiers et examinez les paramètres des règles.

      Pour obtenir des informations sur la lecture de la syntaxe des politiques de contrôle polkit, utilisez man polkit.

    3. Modifier les politiques de contrôle de libvirt. Pour ce faire, il faut

      1. Créez un nouveau fichier .rules dans le répertoire /etc/polkit-1/rules.d/.
      2. Ajoutez vos politiques personnalisées à ce fichier et enregistrez-le.

        Pour de plus amples informations et des exemples de politiques de contrôle libvirt, voir la documentation en amont libvirt .

  2. Configurez vos machines virtuelles pour qu'elles utilisent les politiques d'accès déterminées par polkit.

    Pour ce faire, recherchez tous les fichiers de configuration des pilotes de virtualisation dans le répertoire /etc/libvirt/ et décommentez la ligne access_drivers = [ "polkit" ] qui s'y trouve.

    # find /etc/libvirt/ -name virt*d.conf -exec sed -i 's/#access_drivers = \[ "polkit" \]/access_drivers = \[ "polkit" \]/g' {} 
    Copy to Clipboard Toggle word wrap
  3. Pour chaque fichier modifié à l'étape précédente, redémarrez le service correspondant.

    Par exemple, si vous avez modifié /etc/libvirt/virtqemud.conf, redémarrez le service virtqemud.

    # systemctl try-restart virtqemud
    Copy to Clipboard Toggle word wrap

Vérification

  • En tant qu'utilisateur dont vous souhaitez limiter les actions de la VM, effectuez l'une des actions restreintes.

    Par exemple, si les utilisateurs non privilégiés ne peuvent pas voir les machines virtuelles créées dans la session système :

    $ virsh -c qemu:///system list --all
    Id   Name           State
    -------------------------------
    Copy to Clipboard Toggle word wrap

    Si cette commande ne répertorie aucune VM alors qu'une ou plusieurs VM existent sur votre système, polkit restreint avec succès l'action pour les utilisateurs non privilégiés.

Résolution de problèmes

Outre les moyens manuels d'améliorer la sécurité de vos machines virtuelles énumérés dans la section Meilleures pratiques pour sécuriser les machines virtuelles, un certain nombre de fonctions de sécurité sont fournies par la suite logicielle libvirt et sont automatiquement activées lors de l'utilisation de la virtualisation dans RHEL 9. Ces fonctions incluent

Connexions au système et à la session

Pour accéder à tous les utilitaires disponibles pour la gestion des machines virtuelles dans RHEL 9, vous devez utiliser le site system connection de libvirt (qemu:///system). Pour ce faire, vous devez avoir les privilèges de root sur le système ou faire partie du groupe d'utilisateurs libvirt.

Les utilisateurs non root qui ne font pas partie du groupe libvirt ne peuvent accéder qu'à un session connection de libvirt (qemu:///session), qui doit respecter les droits d'accès de l'utilisateur local lorsqu'il accède aux ressources. Par exemple, en utilisant la connexion de session, vous ne pouvez pas détecter ou accéder aux machines virtuelles créées dans la connexion système ou par d'autres utilisateurs. En outre, les options de configuration de la mise en réseau des machines virtuelles sont considérablement limitées.

Note

La documentation de RHEL 9 suppose que vous disposez des privilèges de connexion au système.

Séparation des machines virtuelles
Les VM individuelles s'exécutent en tant que processus isolés sur l'hôte et s'appuient sur la sécurité mise en œuvre par le noyau de l'hôte. Par conséquent, une VM ne peut pas lire ou accéder à la mémoire ou au stockage d'autres VM sur le même hôte.
QEMU sandboxing
Fonctionnalité qui empêche le code QEMU d'exécuter des appels système susceptibles de compromettre la sécurité de l'hôte.
Randomisation de l'espace d'adressage du noyau (KASLR)
Permet de randomiser les adresses physiques et virtuelles auxquelles l'image du noyau est décompressée. Ainsi, KASLR empêche les exploits de sécurité de l'invité basés sur l'emplacement des objets du noyau.

19.6. Les booléens SELinux pour la virtualisation

RHEL 9 propose la fonctionnalité sVirt, qui est un ensemble de booléens SELinux spécialisés automatiquement activés sur un hôte avec SELinux en mode Enforcing.

Pour une configuration fine de la sécurité des machines virtuelles sur un système RHEL 9, vous pouvez configurer des booléens SELinux sur l'hôte afin que l'hyperviseur agisse d'une manière spécifique.

Pour dresser la liste de tous les booléens liés à la virtualisation et de leur état, utilisez la commande getsebool -a | grep virt:

$ getsebool -a | grep virt
[...]
virt_sandbox_use_netlink --> off
virt_sandbox_use_sys_admin --> off
virt_transition_userdomain --> off
virt_use_comm --> off
virt_use_execmem --> off
virt_use_fusefs --> off
[...]
Copy to Clipboard Toggle word wrap

Pour activer un booléen spécifique, utilisez la commande setsebool -P boolean_name on en tant que root. Pour désactiver un booléen, utilisez la commande setsebool -P boolean_name off.

Le tableau suivant répertorie les booléens relatifs à la virtualisation disponibles dans RHEL 9 et leur fonction lorsqu'ils sont activés :

Expand
Tableau 19.1. Booléens de virtualisation SELinux
SELinux booléenDescription

staff_use_svirt

Permet aux utilisateurs non root de créer et de transférer des machines virtuelles vers sVirt.

unprivuser_use_svirt

Permet aux utilisateurs non privilégiés de créer et de transférer des machines virtuelles vers sVirt.

virt_sandbox_use_audit

Permet aux conteneurs de bac à sable d'envoyer des messages d'audit.

virt_sandbox_use_netlink

Permet aux conteneurs de bac à sable d'utiliser les appels système netlink.

virt_sandbox_use_sys_admin

Permet aux conteneurs de bac à sable d'utiliser les appels système sys_admin, tels que mount.

virt_transition_userdomain

Permet aux processus virtuels de s'exécuter en tant que domaines d'utilisateurs.

virt_use_comm

Permet à virt d'utiliser des ports de communication série/parallèle.

virt_use_execmem

Permet aux invités virtuels confinés d'utiliser la mémoire et la pile exécutables.

virt_use_fusefs

Permet à virt de lire les fichiers montés sur FUSE.

virt_use_nfs

Permet à virt de gérer les fichiers montés sur NFS.

virt_use_rawip

Permet à virt d'interagir avec les sockets rawip.

virt_use_samba

Permet à virt de gérer les fichiers montés en CIFS.

virt_use_sanlock

Permet aux invités virtuels confinés d'interagir avec le sanlock.

virt_use_usb

Permet à virt d'utiliser des périphériques USB.

virt_use_xserver

Permet à la machine virtuelle d'interagir avec le système X Window.

19.7. Configuration d'IBM Secure Execution sur IBM Z

Lorsque vous utilisez du matériel IBM Z pour exécuter un hôte RHEL 9, vous pouvez améliorer la sécurité de vos machines virtuelles (VM) en configurant IBM Secure Execution pour les VM.

IBM Secure Execution, également connu sous le nom de Protected Virtualization, empêche le système hôte d'accéder à l'état et au contenu de la mémoire d'une VM. Par conséquent, même si l'hôte est compromis, il ne peut pas être utilisé comme vecteur d'attaque du système d'exploitation invité. En outre, Secure Execution peut être utilisé pour empêcher les hôtes non fiables d'obtenir des informations sensibles de la VM.

La procédure suivante décrit comment convertir une VM existante sur un hôte IBM Z en une VM sécurisée.

Conditions préalables

  • Le matériel du système est l'un des suivants :

    • IBM z15 ou ultérieur
    • IBM LinuxONE III ou version ultérieure
  • La fonction d'exécution sécurisée est activée pour votre système. Pour le vérifier, utilisez :

    # grep facilities /proc/cpuinfo | grep 158
    Copy to Clipboard Toggle word wrap

    Si cette commande affiche une sortie, votre unité centrale est compatible avec Secure Execution.

  • Le noyau prend en charge l'exécution sécurisée. Pour confirmer, utilisez :

    # ls /sys/firmware | grep uv
    Copy to Clipboard Toggle word wrap

    Si la commande génère une sortie, votre noyau prend en charge l'exécution sécurisée.

  • Le modèle de l'unité centrale hôte contient la fonction unpack. Pour confirmer, utilisez :

    # virsh domcapabilities | grep unpack
    <feature policy='require' name='unpack'/>
    Copy to Clipboard Toggle word wrap

    Si la commande génère le résultat ci-dessus, votre modèle d'hôte CPU est compatible avec Secure Execution.

  • Le mode CPU de la VM est défini sur host-model. Pour le confirmer, utilisez la procédure suivante et remplacez vm-name par le nom de votre VM.

    # virsh dumpxml vm-name | grep "<cpu mode='host-model'/>"
    Copy to Clipboard Toggle word wrap

    Si la commande génère une sortie, le mode CPU de la VM est correctement défini.

  • Le paquetage genprotimg doit être installé sur l'hôte.

    # dnf install genprotimg
    Copy to Clipboard Toggle word wrap
  • Vous avez obtenu et vérifié le document de la clé hôte IBM Z. Pour obtenir des instructions à ce sujet, reportez-vous à la section Vérification du document de clé hôte dans la documentation IBM.

Procédure

Effectuez les étapes suivantes on your host:

  1. Ajoutez le paramètre prot_virt=1 kernel à la configuration de démarrage de l'hôte.

    # grubby --update-kernel=ALL --args="prot_virt=1"
    Copy to Clipboard Toggle word wrap
  2. Mettre à jour le menu de démarrage :

    # zipl

  3. Utilisez virsh edit pour modifier la configuration XML de la VM que vous souhaitez sécuriser.
  4. Ajoutez <launchSecurity type="s390-pv"/> sous la ligne </devices>. Par exemple :

    [...]
        </memballoon>
      </devices>
      <launchSecurity type="s390-pv"/>
    </domain>
    Copy to Clipboard Toggle word wrap
  5. Si la section <devices> de la configuration comprend un dispositif virtio-rng (<rng model="virtio">), supprimez toutes les lignes du bloc <rng> </rng>.
  6. Optional: Si la VM que vous souhaitez sécuriser utilise 32 GiB de RAM ou plus, ajoutez la ligne <async-teardown enabled='yes'/> à la section <features></features> de sa configuration XML.

    Cela améliore la performance du redémarrage ou de l'arrêt de ces hôtes de Secure Execution.

Effectuez les étapes suivantes in the guest operating system de la VM que vous souhaitez sécuriser.

  1. Créer un fichier de paramètres. Par exemple :

    # touch ~/secure-parameters
    Copy to Clipboard Toggle word wrap
  2. Dans le répertoire /boot/loader/entries, identifiez l'entrée du chargeur de démarrage avec la dernière version :

    # ls /boot/loader/entries -l
    [...]
    -rw-r--r--. 1 root root  281 Oct  9 15:51 3ab27a195c2849429927b00679db15c1-4.18.0-240.el8.s390x.conf
    Copy to Clipboard Toggle word wrap
  3. Récupère la ligne d'options du noyau de l'entrée du chargeur de démarrage :

    # cat /boot/loader/entries/3ab27a195c2849429927b00679db15c1-4.18.0-240.el8.s390x.conf | grep options
    options root=/dev/mapper/rhel-root
    rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap
    Copy to Clipboard Toggle word wrap
  4. Ajoutez le contenu de la ligne d'options et swiotlb=262144 au fichier de paramètres créé.

    # echo "root=/dev/mapper/rhel-root rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap swiotlb=262144" > ~/secure-parameters
    Copy to Clipboard Toggle word wrap
  5. Générer une image IBM Secure Execution.

    Par exemple, la procédure suivante crée une image sécurisée /boot/secure-image basée sur l'image /boot/vmlinuz-4.18.0-240.el8.s390x, en utilisant le fichier secure-parameters, le fichier de disque RAM initial /boot/initramfs-4.18.0-240.el8.s390x.img et le document de clé d'hôte HKD-8651-000201C048.crt.

    # genprotimg -i /boot/vmlinuz-4.18.0-240.el8.s390x -r /boot/initramfs-4.18.0-240.el8.s390x.img -p ~/secure-parameters -k HKD-8651-00020089A8.crt -o /boot/secure-image
    Copy to Clipboard Toggle word wrap

    L'utilitaire genprotimg permet de créer l'image sécurisée, qui contient les paramètres du noyau, le disque RAM initial et l'image de démarrage.

  6. Mettez à jour le menu de démarrage de la VM pour démarrer à partir de l'image sécurisée. En outre, supprimez les lignes commençant par initrd et options, car elles ne sont pas nécessaires.

    Par exemple, dans une VM RHEL 8.3, le menu de démarrage peut être édité dans le répertoire /boot/loader/entries/:

    # cat /boot/loader/entries/3ab27a195c2849429927b00679db15c1-4.18.0-240.el8.s390x.conf
    title Red Hat Enterprise Linux 8.3
    version 4.18.0-240.el8.s390x
    linux /boot/secure-image
    [...]
    Copy to Clipboard Toggle word wrap
  7. Créer l'image disque amorçable :

    # zipl -V
    Copy to Clipboard Toggle word wrap
  8. Supprimer en toute sécurité les fichiers originaux non protégés. Par exemple :

    # shred /boot/vmlinuz-4.18.0-240.el8.s390x
    # shred /boot/initramfs-4.18.0-240.el8.s390x.img
    # shred secure-parameters
    Copy to Clipboard Toggle word wrap

    L'image de démarrage originale, l'image RAM initiale et le fichier de paramètres du noyau ne sont pas protégés et, s'ils ne sont pas supprimés, les machines virtuelles dont l'exécution sécurisée est activée peuvent toujours être vulnérables aux tentatives de piratage ou à l'extraction de données sensibles.

Vérification

  • Sur l'hôte, utilisez l'utilitaire virsh dumpxml pour confirmer la configuration XML de la VM sécurisée. La configuration doit inclure l'élément <launchSecurity type="s390-pv"/> et aucune ligne <rng model="virtio">.

    # virsh dumpxml vm-name
    [...]
      <cpu mode='host-model'/>
      <devices>
        <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2' cache='none' io='native'>
          <source file='/var/lib/libvirt/images/secure-guest.qcow2'/>
          <target dev='vda' bus='virtio'/>
        </disk>
        <interface type='network'>
          <source network='default'/>
          <model type='virtio'/>
        </interface>
        <console type='pty'/>
        <memballoon model='none'/>
      </devices>
      <launchSecurity type="s390-pv"/>
    </domain>
    Copy to Clipboard Toggle word wrap

Pour utiliser le chiffrement matériel dans votre machine virtuelle (VM) sur un hôte IBM Z, créez des périphériques médiatisés à partir d'un coprocesseur cryptographique et affectez-les aux VM concernées. Pour des instructions détaillées, voir ci-dessous.

Conditions préalables

  • Votre hôte fonctionne sur du matériel IBM Z.
  • Le coprocesseur cryptographique est compatible avec l'affectation des dispositifs. Pour le confirmer, assurez-vous que le site type de votre coprocesseur est répertorié comme CEX4 ou plus récent.

    # lszcrypt -V
    
    CARD.DOMAIN TYPE  MODE        STATUS  REQUESTS  PENDING HWTYPE QDEPTH FUNCTIONS  DRIVER
    --------------------------------------------------------------------------------------------
    05         CEX5C CCA-Coproc  online         1        0     11     08 S--D--N--  cex4card
    05.0004    CEX5C CCA-Coproc  online         1        0     11     08 S--D--N--  cex4queue
    05.00ab    CEX5C CCA-Coproc  online         1        0     11     08 S--D--N--  cex4queue
    Copy to Clipboard Toggle word wrap
  • Le module du noyau vfio_ap est chargé. Pour le vérifier, utilisez :

    # lsmod | grep vfio_ap
    vfio_ap         24576  0
    [...]
    Copy to Clipboard Toggle word wrap

    Pour charger le module, utilisez :

    # modprobe vfio_ap
    Copy to Clipboard Toggle word wrap
  • La version s390utils prend en charge la manipulation de ap:

    # lszdev --list-types
    ...
    ap           Cryptographic Adjunct Processor (AP) device
    ...
    Copy to Clipboard Toggle word wrap

Procédure

  1. Obtenez les valeurs décimales des périphériques que vous souhaitez attribuer à la VM. Par exemple, pour les périphériques 05.0004 et 05.00ab:

    # echo "obase=10; ibase=16; 04" | bc
    4
    # echo "obase=10; ibase=16; AB" | bc
    171
    Copy to Clipboard Toggle word wrap
  2. Sur l'hôte, réaffectez les périphériques aux pilotes vfio-ap:

    # chzdev -t ap apmask=-5 aqmask=-4,-171
    Copy to Clipboard Toggle word wrap
    Note

    Pour affecter les appareils de manière permanente, utilisez l'option -p.

  3. Vérifiez que les dispositifs cryptographiques ont été réaffectés correctement.

    # lszcrypt -V
    
    CARD.DOMAIN TYPE  MODE        STATUS  REQUESTS  PENDING HWTYPE QDEPTH FUNCTIONS  DRIVER
    --------------------------------------------------------------------------------------------
    05          CEX5C CCA-Coproc  -              1        0     11     08 S--D--N--  cex4card
    05.0004     CEX5C CCA-Coproc  -              1        0     11     08 S--D--N--  vfio_ap
    05.00ab     CEX5C CCA-Coproc  -              1        0     11     08 S--D--N--  vfio_ap
    Copy to Clipboard Toggle word wrap

    Si les valeurs DRIVER des files d'attente du domaine sont passées à vfio_ap, la réaffectation a réussi.

  4. Créer un extrait XML qui définit un nouveau dispositif médiatisé.

    L'exemple suivant montre la définition d'un dispositif persistant à médiation et l'affectation de files d'attente à ce dispositif. Plus précisément, l'extrait XML vfio_ap.xml de cet exemple attribue un adaptateur de domaine 0x05, des files d'attente de domaine 0x0004 et 0x00ab et un domaine de contrôle 0x00ab au dispositif à médiation.

    # vim vfio_ap.xml
    
    <device>
      <parent>ap_matrix</parent>
      <capability type="mdev">
        <type id="vfio_ap-passthrough"/>
        <attr name='assign_adapter' value='0x05'/>
        <attr name='assign_domain' value='0x0004'/>
        <attr name='assign_domain' value='0x00ab'/>
        <attr name='assign_control_domain' value='0x00ab'/>
      </capability>
    </device>
    Copy to Clipboard Toggle word wrap
  5. Créer un nouveau dispositif médiatisé à partir de l'extrait XML vfio_ap.xml.

    # virsh nodedev-define vfio_ap.xml
    Node device 'mdev_8f9c4a73_1411_48d2_895d_34db9ac18f85_matrix' defined from 'vfio_ap.xml'
    Copy to Clipboard Toggle word wrap
  6. Démarrez le dispositif de médiation que vous avez créé à l'étape précédente, dans ce cas mdev_8f9c4a73_1411_48d2_895d_34db9ac18f85_matrix.

    # virsh nodedev-start mdev_8f9c4a73_1411_48d2_895d_34db9ac18f85_matrix
    Device mdev_8f9c4a73_1411_48d2_895d_34db9ac18f85_matrix started
    Copy to Clipboard Toggle word wrap
  7. Vérifier que la configuration a été appliquée correctement

    # cat /sys/devices/vfio_ap/matrix/mdev_supported_types/vfio_ap-passthrough/devices/669d9b23-fe1b-4ecb-be08-a2fabca99b71/matrix
    05.0004
    05.00ab
    Copy to Clipboard Toggle word wrap

    Si la sortie contient les valeurs numériques des files d'attente que vous avez précédemment affectées à vfio-ap, le processus a réussi.

  8. Attachez le périphérique médiatisé à la VM.

    1. Affichez l'UUID du dispositif médiatisé que vous avez créé et enregistrez-le pour l'étape suivante.

      # virsh nodedev-dumpxml mdev_8f9c4a73_1411_48d2_895d_34db9ac18f85_matrix
      
      <device>
        <name>mdev_8f9c4a73_1411_48d2_895d_34db9ac18f85_matrix</name>
        <parent>ap_matrix</parent>
        <capability type='mdev'>
          <type id='vfio_ap-passthrough'/>
          <uuid>8f9c4a73-1411-48d2-895d-34db9ac18f85</uuid>
          <iommuGroup number='0'/>
          <attr name='assign_adapter' value='0x05'/>
          <attr name='assign_domain' value='0x0004'/>
          <attr name='assign_domain' value='0x00ab'/>
          <attr name='assign_control_domain' value='0x00ab'/>
        </capability>
      </device>
      Copy to Clipboard Toggle word wrap
    2. Créez et ouvrez un fichier XML pour le dispositif à carte cryptographique. Par exemple :

      # vim crypto-dev.xml
      Copy to Clipboard Toggle word wrap
    3. Ajoutez les lignes suivantes au fichier et enregistrez-le. Remplacez la valeur uuid par l'UUID que vous avez obtenu à l'étape a.

      <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-ap'>
        <source>
          <address uuid='8f9c4a73-1411-48d2-895d-34db9ac18f85'/>
        </source>
      </hostdev>
      Copy to Clipboard Toggle word wrap
    4. Utilisez le fichier XML pour attacher le dispositif médiatisé à la VM. Par exemple, pour attacher de façon permanente un dispositif défini dans le fichier crypto-dev.xml à la VM testguest1 en cours d'exécution :

      # virsh attach-device testguest1 crypto-dev.xml --live --config
      Copy to Clipboard Toggle word wrap

      L'option --live attache le périphérique à une VM en cours d'exécution uniquement, sans persistance entre les démarrages. L'option --config rend les modifications de configuration persistantes. Vous pouvez utiliser l'option --config seule pour attacher le périphérique à une VM arrêtée.

      Notez que chaque UUID ne peut être attribué qu'à une seule VM à la fois.

Vérification

  1. Assurez-vous que le système d'exploitation invité détecte les dispositifs cryptographiques assignés.

    # lszcrypt -V
    
    CARD.DOMAIN TYPE  MODE        STATUS  REQUESTS  PENDING HWTYPE QDEPTH FUNCTIONS  DRIVER
    --------------------------------------------------------------------------------------------
    05          CEX5C CCA-Coproc  online         1        0     11     08 S--D--N--  cex4card
    05.0004     CEX5C CCA-Coproc  online         1        0     11     08 S--D--N--  cex4queue
    05.00ab     CEX5C CCA-Coproc  online         1        0     11     08 S--D--N--  cex4queue
    Copy to Clipboard Toggle word wrap

    La sortie de cette commande dans le système d'exploitation invité sera identique à celle d'une partition logique hôte avec les mêmes coprocesseurs cryptographiques disponibles.

  2. Dans le système d'exploitation invité, confirmez qu'un domaine de contrôle a bien été attribué aux dispositifs cryptographiques.

    # lszcrypt -d C
    
    DOMAIN 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
    ------------------------------------------------------
        00  .  .  .  .  U  .  .  .  .  .  .  .  .  .  .  .
        10  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        20  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        30  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        40  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        50  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        60  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        70  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        80  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        90  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        a0  .  .  .  .  .  .  .  .  .  .  .  B  .  .  .  .
        b0  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        c0  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        d0  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        e0  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        f0  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
    ------------------------------------------------------
    C: Control domain
    U: Usage domain
    B: Both (Control + Usage domain)
    Copy to Clipboard Toggle word wrap

    Si lszcrypt -d C affiche les intersections U et B dans la matrice du dispositif cryptographique, l'attribution du domaine de contrôle a réussi.

Pour sécuriser les machines virtuelles (VM) Windows, vous pouvez activer une sécurité de base en utilisant les capacités matérielles standard de l'appareil Windows.

Conditions préalables

  • Assurez-vous d'avoir installé les derniers pilotes VirtIO certifiés WHQL.
  • Assurez-vous que le firmware de la VM prend en charge le démarrage UEFI.
  • Installez le paquetage edk2-OVMF sur votre machine hôte.

    # {PackageManagerCommand} install edk2-ovmf
    Copy to Clipboard Toggle word wrap
  • Installez les paquets vTPM sur votre machine hôte.

    # {PackageManagerCommand} install swtpm libtpms
    Copy to Clipboard Toggle word wrap
  • Assurez-vous que la VM utilise l'architecture de machine Q35.
  • Assurez-vous que vous disposez du support d'installation de Windows.

Procédure

  1. Activez TPM 2.0 en ajoutant les paramètres suivants à la section <devices> de la configuration XML de la VM.

    <devices>
    [...]
      <tpm model='tpm-crb'>
        <backend type='emulator' version='2.0'/>
      </tpm>
    [...]
    </devices>
    Copy to Clipboard Toggle word wrap
  2. Installez Windows en mode UEFI. Pour plus d'informations sur la procédure à suivre, voir Création d'une machine virtuelle SecureBoot.
  3. Installer les pilotes VirtIO sur la VM Windows. Pour plus d'informations sur la procédure à suivre, voir Installation des pilotes VirtIO sur un invité Windows.
  4. Dans l'UEFI, activez le démarrage sécurisé. Pour plus d'informations sur la procédure à suivre, voir Secure Boot.

Vérification

  • Assurez-vous que la page Device Security de votre machine Windows affiche le message suivant :

    Settings > Update & Security > Windows Security > Device Security

    Your device meets the requirements for standard hardware security.
    Copy to Clipboard Toggle word wrap

Pour sécuriser davantage les machines virtuelles Windows (VM), vous pouvez activer la protection de l'intégrité du code basée sur la virtualisation, également connue sous le nom d'intégrité du code protégée par l'hyperviseur (HVCI).

Conditions préalables

Procédure

  1. Ouvrez la configuration XML de la VM Windows. L'exemple suivant ouvre la configuration de la VM Example-L1:

    # virsh edit Example-L1
    Copy to Clipboard Toggle word wrap
  2. Dans la section <cpu>, spécifiez le mode CPU et ajoutez l'indicateur de politique.

    Important
    • Pour les processeurs Intel, activez l'indicateur de politique vmx.
    • Pour les processeurs AMD, activez l'indicateur de politique svm.
    • Si vous ne souhaitez pas spécifier une unité centrale personnalisée, vous pouvez définir l'adresse <cpu mode> comme host-passthrough.
    <cpu mode='custom' match='exact' check='partial'>
        <model fallback='allow'>Skylake-Client-IBRS</model>
        <topology sockets='1' dies='1' cores='4' threads='1'/>
        <feature policy='require' name='vmx'/>
    </cpu>
    Copy to Clipboard Toggle word wrap
  3. Enregistrez la configuration XML et redémarrez la VM.
  4. Sur le système d'exploitation des VM, accédez à la page Core isolation details:

    Settings > Update & Security > Windows Security > Device Security > Core isolation details

  5. Basculer l'interrupteur pour activer Memory Integrity.
  6. Redémarrez la VM.
Note

Pour d'autres méthodes d'activation de HVCI, voir la documentation Microsoft correspondante.

Vérification

  • Assurez-vous que la page Device Security de votre VM Windows affiche le message suivant :

    Settings > Update & Security > Windows Security > Device Security

    Your device meets the requirements for enhanced hardware security.
    Copy to Clipboard Toggle word wrap
  • Vous pouvez également consulter les informations système relatives à la VM Windows :

    1. Exécutez msinfo32.exe dans une invite de commande.
    2. Vérifiez si Credential Guard, Hypervisor enforced Code Integrity figure sous Virtualization-based security Services Running.

Il se peut que vous ayez souvent besoin de partager des données entre votre système hôte et les machines virtuelles (VM) qu'il exécute. Pour le faire rapidement et efficacement, vous pouvez configurer des partages de fichiers NFS sur votre système. Vous pouvez également utiliser le site virtiofs pour partager des données avec vos machines virtuelles Linux et Windows.

Pour un partage efficace des fichiers entre le système hôte RHEL 9 et les machines virtuelles (VM), vous pouvez exporter un partage NFS que les VM peuvent monter et auquel elles peuvent accéder.

Cependant, avec les VM Linux, il est généralement plus pratique d'utiliser la fonction virtiofs fonctionnalité.

Conditions préalables

  • Le paquetage nfs-utils est installé sur l'hôte.

    # dnf install nfs-utils -y
    Copy to Clipboard Toggle word wrap
  • Un réseau virtuel de type NAT ou bridge est configuré pour connecter un hôte aux machines virtuelles.
  • Optional: Pour une meilleure sécurité, assurez-vous que vos machines virtuelles sont compatibles avec la version 4 ou ultérieure de NFS.

Procédure

  1. Sur l'hôte, exportez un répertoire contenant les fichiers que vous souhaitez partager en tant que système de fichiers réseau (NFS) :

    1. Partager un répertoire existant avec les machines virtuelles. Si vous ne souhaitez partager aucun des répertoires existants, créez-en un nouveau :

      # mkdir shared-files
      Copy to Clipboard Toggle word wrap
    2. Obtenez l'adresse IP de chaque VM pour partager des fichiers à partir de l'hôte, par exemple, testguest1 et testguest2:

      # virsh domifaddr testguest1
      Name       MAC address          Protocol     Address
      ----------------------------------------------------------------
      vnet0      52:53:00:84:57:90    ipv4         192.0.2.2/24
      
      # virsh domifaddr testguest2
      Name       MAC address          Protocol     Address
      ----------------------------------------------------------------
      vnet1      52:53:00:65:29:21    ipv4         192.0.2.3/24
      Copy to Clipboard Toggle word wrap
    3. Modifiez le fichier /etc/exports sur l'hôte et ajoutez une ligne indiquant le répertoire que vous souhaitez partager, les adresses IP des machines virtuelles à partager et des options supplémentaires :

      /home/<username>/Downloads/<shared_directory>/ <VM1-IP(options)> <VM2-IP(options)>
      ...
      Copy to Clipboard Toggle word wrap

      L'exemple suivant partage le répertoire /usr/local/shared-files sur l'hôte avec testguest1 et testguest2, et permet aux machines virtuelles de modifier le contenu du répertoire :

      /usr/local/shared-files/ 192.0.2.2(rw,sync) 192.0.2.3(rw,sync)
      Copy to Clipboard Toggle word wrap
      Note

      Pour partager un répertoire avec une VM Windows, vous devez vous assurer que le client NFS Windows dispose des droits d'écriture sur le répertoire partagé. Vous pouvez utiliser les options all_squash, anonuid, et anongid dans le fichier /etc/exports.

      /usr/local/shared-files/ 192.0.2.2(rw,sync,all_squash,anonuid=<directory-owner-UID>,anongid=<directory-owner-GID>)

      <directory-owner-UID> et <directory-owner-GID> sont l'UID et le GID de l'utilisateur local qui possède le répertoire partagé sur l'hôte.

      Pour d'autres options de gestion des autorisations des clients NFS, consultez le guide Sécuriser le service NFS.

    4. Exporter le système de fichiers mis à jour :

      # exportfs -a
      Copy to Clipboard Toggle word wrap
    5. Démarrez le service nfs-server:

      # systemctl start nfs-server
      Copy to Clipboard Toggle word wrap
    6. Obtenez l'adresse IP du système hôte pour monter le répertoire partagé sur les machines virtuelles :

      # ip addr
      ...
      5: virbr0: [BROADCAST,MULTICAST,UP,LOWER_UP] mtu 1500 qdisc noqueue state UP group default qlen 1000
      link/ether 52:54:00:32:ff:a5 brd ff:ff:ff:ff:ff:ff
      inet 192.0.2.1/24 brd 192.0.2.255 scope global virbr0
      valid_lft forever preferred_lft forever
      ...
      Copy to Clipboard Toggle word wrap

      Notez que le réseau concerné relie l'hôte aux machines virtuelles pour le partage des fichiers. En général, il s'agit de virbr0.

  2. Monter le répertoire partagé sur une VM Linux spécifiée dans le fichier /etc/exports:

    # mount 192.0.2.1:/usr/local/shared-files /mnt/host-share
    Copy to Clipboard Toggle word wrap
    • 192.0.2.1: L'adresse IP de l'hôte.
    • /usr/local/shared-files: Chemin d'accès du système de fichiers au répertoire exporté sur l'hôte.
    • /mnt/host-share: Un point de montage sur la VM

      Note

      Le point de montage doit être un répertoire vide.

  3. Pour monter le répertoire partagé sur une VM Windows comme indiqué dans le fichier /etc/exports:

    1. Ouvrez une invite PowerShell en tant qu'administrateur.
    2. Installez le paquet NFS-Client sur Windows.

      1. Pour l'installation sur une version serveur, entrez :

        # Install-WindowsFeature NFS-Client
        Copy to Clipboard Toggle word wrap
      2. Pour l'installer sur une version de bureau, entrez :

        # Enable-WindowsOptionalFeature -FeatureName ServicesForNFS-ClientOnly, ClientForNFS-Infrastructure -Online -NoRestart
        Copy to Clipboard Toggle word wrap
    3. Monter le répertoire exporté par l'hôte sur une VM Windows :

      # C:\Windows\system32\mount.exe -o anon \\192.0.2.1\usr\local\shared-files Z:
      Copy to Clipboard Toggle word wrap

      Dans cet exemple :

      • 192.0.2.1: L'adresse IP de l'hôte.
      • /usr/local/shared-files: Chemin d'accès au système de fichiers vers le répertoire exporté sur l'hôte.
      • Z:: La lettre du lecteur pour un point de montage.

        Note

        Vous devez choisir une lettre de lecteur qui n'est pas utilisée sur le système.

Vérification

  • Répertoriez le contenu du répertoire partagé sur la VM afin de pouvoir partager des fichiers entre l'hôte et la VM :

    $ ls <mount_point>
    shared-file1  shared-file2  shared-file3
    Copy to Clipboard Toggle word wrap

    Dans cet exemple, remplacez <mount_point> par un chemin d'accès au répertoire partagé monté.

Avec virtiofs, vous pouvez partager des fichiers entre votre hôte et vos machines virtuelles (VM) sous la forme d'une arborescence de répertoires qui fonctionne de la même manière que la structure du système de fichiers local. Vous pouvez utiliser virtiofs pour effectuer les tâches suivantes :

Lorsque vous utilisez RHEL 9 comme hyperviseur, vous pouvez partager efficacement des fichiers entre votre système hôte et ses machines virtuelles (VM) à l'aide de la fonctionnalité virtiofs.

Conditions préalables

  • La virtualisation est installée et activée sur votre hôte RHEL 9.
  • Un répertoire que vous souhaitez partager avec vos machines virtuelles. Si vous ne souhaitez partager aucun de vos répertoires existants, créez-en un nouveau, par exemple nommé shared-files.

    # mkdir /root/shared-files
    Copy to Clipboard Toggle word wrap
  • La VM avec laquelle vous souhaitez partager des données utilise une distribution Linux comme système d'exploitation invité.

Procédure

  1. Pour chaque répertoire de l'hôte que vous souhaitez partager avec votre VM, définissez-le comme système de fichiers virtiofs dans la configuration XML de la VM.

    1. Ouvrez la configuration XML de la VM visée.

      # virsh edit vm-name
      Copy to Clipboard Toggle word wrap
    2. Ajoutez une entrée similaire à la suivante à la section <devices> de la configuration XML de la VM.

      <filesystem type='mount' accessmode='passthrough'>
        <driver type='virtiofs'/>
        <binary path='/usr/libexec/virtiofsd' xattr='on'/>
        <source dir='/root/shared-files'/>
        <target dir='host-file-share'/>
      </filesystem>
      Copy to Clipboard Toggle word wrap

      Cet exemple définit le répertoire /root/shared-files sur l'hôte pour qu'il soit visible en tant que host-file-share par la VM.

  2. Configurez la mémoire partagée pour la VM. Pour ce faire, ajoutez la mémoire partagée à la section <domain> de la configuration XML :

    <domain>
     [...]
     <memoryBacking>
       <access mode='shared'/>
     </memoryBacking>
     [...]
    </domain>
    Copy to Clipboard Toggle word wrap
  3. Démarrer la VM.

    # virsh start vm-name
    Copy to Clipboard Toggle word wrap
  4. Monter le système de fichiers dans le système d'exploitation invité. L'exemple suivant monte le répertoire host-file-share précédemment configuré avec un système d'exploitation invité Linux.

    # mount -t virtiofs host-file-share /mnt
    Copy to Clipboard Toggle word wrap

Vérification

  • Assurez-vous que le répertoire partagé est devenu accessible sur la VM et que vous pouvez maintenant ouvrir les fichiers stockés dans le répertoire.

Problèmes et limites connus

  • Les options de montage du système de fichiers liées au temps d'accès, telles que noatime et strictatime, ne sont pas susceptibles de fonctionner avec les virtiofs, et Red Hat déconseille leur utilisation.

Résolution de problèmes

  • Si virtiofs n'est pas optimal pour votre cas d'utilisation ou n'est pas pris en charge par votre système, vous pouvez utiliser NFS à la place.

Lorsque vous utilisez RHEL 9 comme hyperviseur, vous pouvez partager efficacement des fichiers entre votre système hôte et les machines virtuelles (VM) Windows à l'aide de la fonctionnalité virtiofs et du paquetage virtio-win.

Note

Vous pouvez exécuter le service virtiofs en mode insensible à la casse sur une VM Windows à l'aide de la commande virtiofs.exe et du paramètre -i.

Conditions préalables

Procédure

  1. Sur votre VM Windows, installez WinFsp. Pour ce faire, montez l'image ISO virtio-win, lancez le programme d'installation MSI winfsp et suivez les instructions.

    Dans la fenêtre Custom Setup de l'assistant d'installation, sélectionnez les fonctionnalités que vous souhaitez installer sur la VM.

  2. Démarrer le service virtiofs :

    # sc start VirtioFsSvc
    Copy to Clipboard Toggle word wrap
  3. Naviguez jusqu'à This PC:

    File Explorer → This PC

    Virtiofs doit être disponible sur la VM Windows en tant que première lettre de lecteur disponible, en commençant par z: et en remontant. Par exemple, my_viofs (Z:).

    Important

    Vous devez redémarrer le service virtiofs après chaque redémarrage de la VM pour accéder au répertoire partagé.

  4. Optional: Pour mettre en place des instances virtiofs supplémentaires :

    1. Arrêter le service virtiofs :

      # sc stop VirtioFsSvc
      # sc config VirtioFsSvc start=demand
      Copy to Clipboard Toggle word wrap
    2. Configurer le service WinFSP.Launcher pour mettre en place plusieurs instances virtiofs :

      # "C:\Program Files (x86)\WinFsp\bin\fsreg.bat" virtiofs "<path to the binary>\virtiofs.exe" "-t %1 -m %2"
      Copy to Clipboard Toggle word wrap
    3. Monter les instances virtiofs sur les lecteurs.

      Par exemple, pour monter virtiofs avec l'étiquette mount_tag0 sur le lecteur Y::

      "C:\Program Files (x86)\WinFsp\bin\launchctl-x64.exe" start virtiofs viofsY mount_tag0 Y:
      Copy to Clipboard Toggle word wrap
    4. Répétez l'étape précédente pour monter toutes vos instances virtiofs.
    5. Pour démonter l'instance virtiofs :

      "C:\Program Files (x86)\WinFsp\bin\launchctl-x64.exe" stop virtiofs viofsY
      Copy to Clipboard Toggle word wrap

Vérification

  1. Sur votre VM Windows, accédez à This PC:

    File Explorer → This PC

    • Si vous n'avez pas spécifié de point de montage lors de la configuration du service virtiofs, celui-ci utilisera la première lettre de lecteur disponible, en commençant par z: et en remontant.
    • Si vous avez configuré plusieurs instances virtiofs, elles apparaîtront comme des lecteurs avec les lettres que vous avez attribuées aux instances.

Vous pouvez utiliser la console web RHEL pour partager efficacement des fichiers entre votre système hôte et ses machines virtuelles (VM) à l'aide de la fonctionnalité virtiofs.

Conditions préalables

  • Le plug-in VM de la console web est installé sur votre système.
  • Un répertoire que vous souhaitez partager avec vos machines virtuelles. Si vous ne souhaitez partager aucun de vos répertoires existants, créez-en un nouveau, par exemple nommé centurion.

    # mkdir /home/centurion
    Copy to Clipboard Toggle word wrap
  • La VM avec laquelle vous souhaitez partager des données utilise une distribution Linux comme système d'exploitation invité.

Procédure

  1. Dans l'interface Machines virtuelles, cliquez sur la VM avec laquelle vous souhaitez partager des fichiers.

    Une nouvelle page s'ouvre avec une section Overview contenant des informations de base sur la VM sélectionnée et une section Console.

  2. Faites défiler jusqu'à Répertoires partagés.

    La section Shared directories affiche des informations sur les fichiers et les répertoires de l'hôte partagés avec cette VM et des options pour Add ou Remove un répertoire partagé.

  3. Cliquez sur Ajouter un répertoire partagé.

    La boîte de dialogue Share a host directory with the guest apparaît.

  4. Saisissez les informations suivantes :

    • Source path - Le chemin d'accès au répertoire hôte que vous souhaitez partager.
    • Mount tag - La balise que la VM utilise pour monter le répertoire.
  5. Définir des options supplémentaires :

    • Extended attributes - Permet d'activer ou non les attributs étendus, xattr, sur les fichiers et répertoires partagés.
  6. Cliquez sur Partager.

    Le répertoire sélectionné est partagé avec la VM.

Vérification

  • Assurez-vous que le répertoire partagé est accessible sur la VM et vous pouvez maintenant ouvrir les fichiers stockés dans ce répertoire.

Vous pouvez utiliser la console web RHEL pour supprimer les fichiers partagés entre votre système hôte et ses machines virtuelles (VM) à l'aide de la fonctionnalité virtiofs.

Conditions préalables

Procédure

  1. Dans l'interface Machines virtuelles, cliquez sur la VM dont vous souhaitez supprimer les fichiers partagés.

    Une nouvelle page s'ouvre avec une section Overview contenant des informations de base sur la VM sélectionnée et une section Console.

  2. Faites défiler jusqu'à Répertoires partagés.

    La section Shared directories affiche des informations sur les fichiers et les répertoires de l'hôte partagés avec cette VM et des options pour Add ou Remove un répertoire partagé.

  3. Cliquez sur Supprimer en regard du répertoire que vous souhaitez annuler le partage avec la VM.

    La boîte de dialogue Remove filesystem apparaît.

  4. Cliquez sur Supprimer.

    Le répertoire sélectionné n'est pas partagé avec la VM.

Vérification

  • Le répertoire partagé n'est plus disponible et accessible sur la VM.

Pour utiliser Microsoft Windows comme système d'exploitation invité dans vos machines virtuelles (VM) sur un hôte RHEL 9, Red Hat recommande de prendre des mesures supplémentaires pour s'assurer que ces VM fonctionnent correctement.

À cette fin, les sections suivantes fournissent des informations sur l'installation et l'optimisation des VM Windows sur l'hôte, ainsi que sur l'installation et la configuration des pilotes dans ces VM.

21.1. Installation de machines virtuelles Windows

Vous pouvez créer une machine Windows entièrement virtualisée sur un hôte RHEL 9, lancer le programme d'installation graphique de Windows dans la machine virtuelle (VM) et optimiser le système d'exploitation invité (OS) Windows installé.

Pour créer la VM et installer le système d'exploitation invité Windows, utilisez la commande virt-install ou la console web RHEL 9.

Conditions préalables

  • Une source d'installation du système d'exploitation Windows, qui peut être l'une des suivantes et être disponible localement ou sur un réseau :

    • Une image ISO d'un support d'installation
    • Une image disque d'une installation VM existante
  • Un support de stockage contenant les pilotes KVM virtio.

    Pour créer ce support, voir Préparation du support d'installation du pilote virtio sur une machine hôte.

  • Si vous installez Windows 11, les paquets edk2-ovmf, swtpm et libtpms doivent être installés sur l'hôte.

Procédure

  1. Créez la machine virtuelle. Pour plus d'informations, voir Création de machines virtuelles, mais gardez à l'esprit les spécificités suivantes.

    • Si vous utilisez l'utilitaire virt-install pour créer la VM, ajoutez les options suivantes à la commande :

      • Le support de stockage contenant les pilotes KVM virtio. Par exemple :

        --disk path=/usr/share/virtio-win/virtio-win.iso,device=cdrom
        Copy to Clipboard Toggle word wrap
      • La version de Windows que vous allez installer. Par exemple, pour Windows 10 et 11 :

        --os-variant win10
        Copy to Clipboard Toggle word wrap

        Pour obtenir la liste des versions de Windows disponibles et l'option appropriée, utilisez la commande suivante :

        # osinfo-query os
        Copy to Clipboard Toggle word wrap
      • Si vous installez Windows 11, activez Unified Extensible Firmware Interface (UEFI) et virtual Trusted Platform Module (vTPM) :

        --boot uefi
        Copy to Clipboard Toggle word wrap
    • Si vous utilisez la console web pour créer la VM, indiquez votre version de Windows dans le champ Operating system de la fenêtre Create new virtual machine.

      • Si vous installez des versions de Windows antérieures à Windows 11 et Windows Server 2022, démarrez l'installation en cliquant sur Créer et exécuter.
      • Si vous installez Windows 11 ou si vous souhaitez utiliser d'autres fonctionnalités de Windows Server 2022, confirmez en cliquant sur Créer et modifier et activer UEFI et vTPM à l'aide de la CLI :

        1. Ouvrez la configuration XML de la VM :

          # virsh edit windows-vm
          Copy to Clipboard Toggle word wrap
        2. Ajouter l'option firmware='efi' à l'élément os:

          <os firmware='efi'>
            <type arch='x86_64' machine='pc-q35-6.2'>hvm</type>
            <boot dev='hd'/>
          </os>
          Copy to Clipboard Toggle word wrap
        3. Ajoutez le dispositif tpm à l'intérieur de l'élément devices:

          <devices>
            <tpm model='tpm-crb'>
              <backend type='emulator' version='2.0'/>
            </tpm>
          </devices>
          Copy to Clipboard Toggle word wrap
        4. Lancez l'installation de Windows en cliquant sur Installer dans le tableau Virtual machines.
  2. Installer le système d'exploitation Windows dans la VM.

    Pour plus d'informations sur l'installation d'un système d'exploitation Windows, reportez-vous à la documentation d'installation Microsoft correspondante.

  3. Si vous utilisez la console Web pour créer la VM, attachez le support de stockage avec les pilotes virtio à la VM en utilisant l'interface Disks. Pour plus d'instructions, voir Attacher des disques existants à des machines virtuelles en utilisant la console web.
  4. Configurez les pilotes KVM virtio dans le système d'exploitation invité de Windows. Pour plus d'informations, voir Installation des pilotes KVM paravirtualisés pour les machines virtuelles Windows.

21.2. Optimisation des machines virtuelles Windows

Lors de l'utilisation de Microsoft Windows en tant que système d'exploitation invité dans une machine virtuelle (VM) hébergée dans RHEL 9, les performances de l'invité peuvent être affectées négativement.

Par conséquent, Red Hat recommande d'optimiser vos VM Windows en effectuant une combinaison des actions suivantes :

La principale méthode pour améliorer les performances de vos machines virtuelles (VM) Windows consiste à installer des pilotes KVM paravirtualisés (virtio) pour Windows sur le système d'exploitation invité.

Note

Les pilotes virtio-win sont certifiés (WHQL) pour les dernières versions de Windows 10 et 11, disponibles au moment de la publication de virtio-win. Cependant, les pilotes virtio-win sont généralement testés et devraient fonctionner correctement sur les versions précédentes de Windows 10 et 11.

Pour installer les pilotes sur une VM Windows, effectuez les opérations suivantes :

  1. Préparez le support d'installation sur la machine hôte. Pour plus d'informations, voir Préparation du support d'installation du pilote virtio sur une machine hôte.
  2. Attachez le support d'installation à une VM Windows existante ou attachez-le lors de la création d'une nouvelle VM Windows. Pour plus d'informations, voir Installation de machines virtuelles Windows sur RHEL.
  3. Installez les pilotes virtio sur le système d'exploitation invité Windows. Pour plus d'informations, voir Installation des pilotes virtio sur un invité Windows.
  4. Installez le site QEMU Guest Agent sur le système d'exploitation invité Windows. Pour plus d'informations, voir Installation de l'agent invité QEMU sur un invité Windows.
21.2.1.1. Fonctionnement des pilotes Windows virtio

Les pilotes paravirtualisés améliorent les performances des machines virtuelles (VM) en réduisant la latence des E/S et en augmentant le débit à des niveaux proches de ceux d'une machine nue. Red Hat vous recommande d'utiliser des pilotes paravirtualisés pour les machines virtuelles qui exécutent des tâches et des applications à forte charge d'E/S.

virtio sont des pilotes de périphériques paravirtualisés de KVM, disponibles pour les machines virtuelles Windows fonctionnant sur des hôtes KVM. Ces pilotes sont fournis par le paquetage virtio-win, qui comprend des pilotes pour :

  • Dispositifs de bloc (stockage)
  • Contrôleurs d'interface réseau
  • Contrôleurs vidéo
  • Dispositif de gonflage de la mémoire
  • Dispositif de port série paravirtuel
  • Dispositif de source d'entropie
  • Dispositif de panique paravirtuel
  • Dispositifs d'entrée, tels que souris, claviers ou tablettes
  • Un petit ensemble de dispositifs émulés
Note

Pour plus d'informations sur les périphériques émulés, virtio et attribués, reportez-vous à la section Gestion des périphériques virtuels.

En utilisant les pilotes KVM virtio, les versions suivantes de Microsoft Windows devraient fonctionner de la même manière que les systèmes physiques :

Pour installer ou mettre à jour les pilotes KVM virtio sur une machine virtuelle (VM) Windows, vous devez d'abord préparer le support d'installation du pilote virtio sur la machine hôte. Pour ce faire, attachez le fichier .iso, fourni par le paquet virtio-win, en tant que périphérique de stockage à la VM Windows.

Conditions préalables

  • Assurez-vous que la virtualisation est activée dans votre système hôte RHEL 9. Pour plus d'informations, voir Activation de la virtualisation.
  • Assurez-vous que vous disposez des privilèges d'accès root à la VM.

Procédure

  1. Actualisez vos données d'abonnement :

    # subscription-manager refresh
    All local data refreshed
    Copy to Clipboard Toggle word wrap
  2. Obtenir la dernière version du paquet virtio-win.

    • Si virtio-win n'est pas installé :

      # dnf install -y virtio-win
      Copy to Clipboard Toggle word wrap
    • Si virtio-win est installé :

      # dnf upgrade -y virtio-win
      Copy to Clipboard Toggle word wrap

      Si l'installation réussit, les fichiers du pilote virtio-win sont disponibles dans le répertoire /usr/share/virtio-win/. Ceux-ci comprennent les fichiers ISO et un répertoire drivers contenant les fichiers des pilotes dans des répertoires, un pour chaque architecture et chaque version de Windows prise en charge.

      # ls /usr/share/virtio-win/
      drivers/  guest-agent/  virtio-win-1.9.9.iso  virtio-win.iso
      Copy to Clipboard Toggle word wrap
  3. Attachez le fichier virtio-win.iso comme périphérique de stockage à la VM Windows.

    • Lors de la création d'une nouvelle VM Windows, joignez le fichier en utilisant les options de la commande virt-install.
    • Lors de l'installation des pilotes sur une VM Windows existante, attachez le fichier en tant que CD-ROM en utilisant l'utilitaire virt-xml:

      # virt-xml WindowsVM --add-device --disk virtio-win.iso,device=cdrom
      Domain 'WindowsVM' defined successfully.
      Copy to Clipboard Toggle word wrap

Pour installer les pilotes KVM virtio sur un système d'exploitation invité Windows, vous devez ajouter une unité de stockage contenant les pilotes (soit lors de la création de la machine virtuelle (VM), soit ultérieurement) et installer les pilotes dans le système d'exploitation invité Windows.

Cette procédure fournit des instructions pour installer les pilotes à l'aide de l'interface graphique. Vous pouvez également utiliser l'interface de ligne de commande Microsoft Windows Installer (MSI).

Conditions préalables

Procédure

  1. Dans le système d'exploitation invité Windows, ouvrez l'application File Explorer.
  2. Cliquez sur This PC.
  3. Dans le volet Devices and drives, ouvrez le support virtio-win.
  4. En fonction du système d'exploitation installé sur la VM, exécutez l'un des programmes d'installation :

    • Si vous utilisez un système d'exploitation 32 bits, exécutez le programme d'installation virtio-win-gt-x86.msi.
    • Si vous utilisez un système d'exploitation 64 bits, exécutez le programme d'installation virtio-win-gt-x64.msi.
  5. Dans l'assistant de configuration Virtio-win-driver-installer qui s'ouvre, suivez les instructions affichées jusqu'à l'étape Custom Setup.

  6. Dans la fenêtre Installation personnalisée, sélectionnez les pilotes de périphériques que vous souhaitez installer. Le jeu de pilotes recommandé est sélectionné automatiquement et les descriptions des pilotes sont affichées à droite de la liste.
  7. Cliquez sur suivant, puis sur Installer.
  8. Une fois l'installation terminée, cliquez sur Terminer.
  9. Redémarrez la VM pour terminer l'installation du pilote.

Vérification

  1. Sur votre VM Windows, accédez à l'adresse Device Manager:

    1. Cliquez sur Démarrer
    2. Rechercher Device Manager
  2. Assurez-vous que les périphériques utilisent les bons pilotes :

    1. Cliquez sur un appareil pour ouvrir la fenêtre Driver Properties.
    2. Naviguez jusqu'à l'onglet Driver.
    3. Cliquez sur Driver Details.

Prochaines étapes

Pour mettre à jour les pilotes KVM virtio sur un système d'exploitation invité (SE) Windows, vous pouvez utiliser le service Windows Update, si la version du SE Windows le prend en charge. Si ce n'est pas le cas, réinstallez les pilotes à partir du support d'installation virtio joint à la machine virtuelle (VM) Windows.

Conditions préalables

Procédure 1 : Mise à jour des pilotes à l'aide de Windows Update

Sur Windows 10, Windows Server 2016 et les systèmes d'exploitation ultérieurs, vérifiez si les mises à jour des pilotes sont disponibles en utilisant l'interface graphique Windows Update:

  1. Démarrez la VM Windows et connectez-vous à son système d'exploitation invité.
  2. Naviguez jusqu'à la page Optional updates:

    Settings → Windows Update → Advanced options → Optional updates

  3. Installer toutes les mises à jour à partir de Red Hat, Inc.

Procédure 2 : Mise à jour des pilotes en les réinstallant

Sur les systèmes d'exploitation antérieurs à Windows 10 et Windows Server 2016, ou si le système d'exploitation n'a pas accès à Windows Update, réinstallez les pilotes. Cette opération permet de restaurer la configuration réseau du système d'exploitation invité Windows par défaut (DHCP). Si vous souhaitez préserver une configuration réseau personnalisée, vous devez également créer une sauvegarde et la restaurer à l'aide de l'utilitaire netsh:

  1. Démarrez la VM Windows et connectez-vous à son système d'exploitation invité.
  2. Ouvrez l'invite de commande Windows :

    1. Utiliser le Super+R pour le raccourci clavier.
    2. Dans la fenêtre qui apparaît, tapez cmd et appuyez sur Ctrl+Shift+Entrée pour être exécuté en tant qu'administrateur.
  3. Sauvegardez la configuration réseau du système d'exploitation à l'aide de l'invite de commande Windows :

    C:\WINDOWS\system32\netsh dump > backup.txt
    Copy to Clipboard Toggle word wrap
  4. Réinstallez les pilotes KVM virtio à partir du support d'installation joint. Effectuez l'une des opérations suivantes :

    • Réinstallez les pilotes à l'aide de l'invite de commande Windows, où X est la lettre du lecteur du support d'installation. Les commandes suivantes installent tous les pilotes virtio.

      • Si vous utilisez une vCPU 64 bits :

        C:\WINDOWS\system32\msiexec.exe /i X:\virtio-win-gt-x64.msi /passive /norestart
        Copy to Clipboard Toggle word wrap
      • Si vous utilisez une vCPU 32 bits :

        C:\WINDOWS\system32\msiexec.exe /i X:\virtio-win-gt-x86.msi /passive /norestart
        Copy to Clipboard Toggle word wrap
    • Réinstallez les pilotes à l'aide de l'interface graphique sans redémarrer la VM.
  5. Restaurer la configuration réseau du système d'exploitation à l'aide de l'invite de commande Windows :

    C:\WINDOWS\system32\netsh -f backup.txt
    Copy to Clipboard Toggle word wrap
  6. Redémarrez la VM pour terminer l'installation du pilote.

Pour permettre à un hôte RHEL d'effectuer un certain sous-ensemble d'opérations sur une machine virtuelle (VM) Windows, vous devez activer l'agent invité QEMU (GA). Pour ce faire, ajoutez un périphérique de stockage contenant le programme d'installation de l'agent invité QEMU à une machine virtuelle existante ou lors de la création d'une nouvelle machine virtuelle, et installez les pilotes sur le système d'exploitation invité Windows.

Pour installer l'agent invité (GA) à l'aide de l'interface graphique, voir la procédure ci-dessous. Pour installer l'AG dans une interface de ligne de commande, utilisez le programme d'installation Microsoft Windows (MSI).

Conditions préalables

Procédure

  1. Dans le système d'exploitation invité Windows, ouvrez l'application File Explorer.
  2. Cliquez sur This PC.
  3. Dans le volet Devices and drives, ouvrez le support virtio-win.
  4. Ouvrez le dossier guest-agent.
  5. En fonction du système d'exploitation installé sur la VM, exécutez l'un des programmes d'installation suivants :

    • Si vous utilisez un système d'exploitation 32 bits, exécutez le programme d'installation qemu-ga-i386.msi.
    • Si vous utilisez un système d'exploitation 64 bits, exécutez le programme d'installation qemu-ga-x86_64.msi.
  6. Optional: Si vous souhaitez utiliser le pilote série para-virtualisé (virtio-serial) comme interface de communication entre l'hôte et l'invité Windows, vérifiez que le pilote virtio-serial est installé sur l'invité Windows. Pour plus d'informations sur l'installation des pilotes virtio, voir : Installation des pilotes virtio sur un invité Windows.

Vérification

  1. Sur votre VM Windows, accédez à la fenêtre Services.

    Computer Management > Services

  2. Assurez-vous que l'état du service QEMU Guest Agent est Running.

21.2.2. Activation des éclairages Hyper-V

Les améliorations apportées à Hyper-V permettent à KVM d'émuler l'hyperviseur Hyper-V de Microsoft. Cela permet d'améliorer les performances des machines virtuelles Windows.

Les sections suivantes fournissent des informations sur les améliorations Hyper-V prises en charge et sur la manière de les activer.

Les améliorations Hyper-V permettent d'améliorer les performances d'une machine virtuelle (VM) Windows exécutée sur un hôte RHEL 9. Pour savoir comment les activer, voir ce qui suit.

Procédure

  1. Utilisez la commande virsh edit pour ouvrir la configuration XML de la VM. Par exemple :

    # virsh edit windows-vm
    Copy to Clipboard Toggle word wrap
  2. Ajouter la sous-section <hyperv> suivante à la section <features> du XML :

    <features>
      [...]
      <hyperv>
        <relaxed state='on'/>
        <vapic state='on'/>
        <spinlocks state='on' retries='8191'/>
        <vpindex state='on'/>
        <runtime state='on' />
        <synic state='on'/>
        <stimer state='on'>
          <direct state='on'/>
        </stimer>
        <frequencies state='on'/>
        <reset state='on'/>
        <relaxed state='on'/>
        <time state='on'/>
        <tlbflush state='on'/>
        <reenlightenment state='on'/>
        <stimer state='on'>
          <direct state='on'/>
        </stimer>
        <ipi state='on'/>
        <crash state='on'/>
        <evmcs state='on'/>
      </hyperv>
      [...]
    </features>
    Copy to Clipboard Toggle word wrap

    Si le XML contient déjà une sous-section <hyperv>, modifiez-la comme indiqué ci-dessus.

  3. Modifiez la section clock de la configuration comme suit :

    <clock offset='localtime'>
      ...
      <timer name='hypervclock' present='yes'/>
    </clock>
    Copy to Clipboard Toggle word wrap
  4. Sauvegarder et quitter la configuration XML.
  5. Si la VM est en cours d'exécution, redémarrez-la.

Vérification

  • Utilisez la commande virsh dumpxml pour afficher la configuration XML de la VM en cours d'exécution. Si elle comprend les segments suivants, les améliorations Hyper-V sont activées sur la VM.

    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
      <vpindex state='on'/>
      <runtime state='on' />
      <synic state='on'/>
      <stimer state='on'/>
      <frequencies state='on'/>
      <reset state='on'/>
      <relaxed state='on'/>
      <time state='on'/>
      <tlbflush state='on'/>
      <reenlightenment state='on'/>
      <stimer state='on'>
        <direct state='on'/>
      </stimer>
      <ipi state='on'/>
      <crash state='on'/>
      <evmcs state='on'/>
    </hyperv>
    
    <clock offset='localtime'>
      ...
      <timer name='hypervclock' present='yes'/>
    </clock>
    Copy to Clipboard Toggle word wrap
21.2.2.2. Éclairages configurables pour Hyper-V

Vous pouvez configurer certaines fonctions Hyper-V pour optimiser les machines virtuelles Windows. Le tableau suivant fournit des informations sur ces fonctionnalités configurables d'Hyper-V et leurs valeurs.

Expand
Tableau 21.1. Fonctionnalités configurables d'Hyper-V
L'illuminationDescriptionValeurs

accident

Fournit des MSR aux VM qui peuvent être utilisés pour stocker des informations et des journaux si une VM tombe en panne. Les informations sont disponibles dans le journal QEMU.

Note

Si l'option hv_crash est activée, les données de crash de Windows ne sont pas créées.

marche, arrêt

evmcs

Implémente un protocole paravirtualisé entre les hyperviseurs L0 (KVM) et L1 (Hyper-V), ce qui permet des sorties L2 plus rapides vers l'hyperviseur.

Note

Cette fonction est exclusive aux processeurs Intel.

marche, arrêt

fréquences

Active les registres spécifiques à la machine (MSR) de la fréquence Hyper-V.

marche, arrêt

ipi

Active la prise en charge des interruptions interprocesseurs (IPI) paravirtualisées.

marche, arrêt

partage des cœurs sans hiérarchisation

Notifie au système d'exploitation invité que les processeurs virtuels ne partageront jamais un cœur physique à moins qu'ils ne soient signalés comme des threads SMT frères. Cette information est requise par les invités Windows et Hyper-V pour atténuer correctement les vulnérabilités liées au multithreading simultané (SMT) du processeur.

marche, arrêt, auto

ré-éclaircissement

Notifie le changement de fréquence du compteur d'horodatage (TSC), qui ne se produit que lors de la migration. Il permet également à l'invité de continuer à utiliser l'ancienne fréquence jusqu'à ce qu'il soit prêt à passer à la nouvelle.

marche, arrêt

détendu

Désactive un contrôle d'intégrité de Windows qui provoque souvent un BSOD lorsque la VM s'exécute sur un hôte très chargé. Cette option est similaire à l'option no_timer_check du noyau Linux, qui est automatiquement activée lorsque Linux est exécuté sur KVM.

marche, arrêt

durée d'exécution

Définit le temps que le processeur consacre à l'exécution du code invité et au nom du code invité.

marche, arrêt

spinlocks

  • Utilisé par le système d'exploitation d'une VM pour notifier à Hyper-V que le processeur virtuel appelant tente d'acquérir une ressource potentiellement détenue par un autre processeur virtuel au sein de la même partition.
  • Utilisé par Hyper-V pour indiquer au système d'exploitation de la machine virtuelle le nombre de tentatives d'acquisition d'un spinlock avant d'indiquer à Hyper-V une situation de spin excessif.

marche, arrêt

stimer

Active les temporisateurs synthétiques pour les processeurs virtuels. Notez que certaines versions de Windows reviennent à l'utilisation de HPET (ou même de RTC lorsque HPET n'est pas disponible) lorsque cet éclaircissement n'est pas fourni, ce qui peut entraîner une consommation importante du CPU, même lorsque le CPU virtuel est inactif.

marche, arrêt

stimer-direct

Active les temporisateurs synthétiques lorsqu'un événement d'expiration est délivré par une interruption normale.

on, off.

synique

Avec stimer, active la minuterie synthétique. Windows 8 utilise cette fonction en mode périodique.

marche, arrêt

temps

Active les sources d'horloge suivantes, spécifiques à Hyper-V, disponibles pour la VM,

  • Source d'horloge Hyper-V basée sur MSR 82 (HV_X64_MSR_TIME_REF_COUNT, 0x40000020)
  • Page de référence TSC 83 activée par MSR (HV_X64_MSR_REFERENCE_TSC, 0x40000021)

marche, arrêt

tlbflush

Vide la TLB des processeurs virtuels.

marche, arrêt

vapic

Active l'APIC virtuel, qui fournit un accès MSR accéléré aux registres du contrôleur d'interruption programmable avancé (APIC) à forte utilisation et à mémoire mappée.

marche, arrêt

iD_vendeur

Définit l'identifiant du fournisseur Hyper-V.

  • marche, arrêt
  • Valeur de l'identifiant - chaîne de 12 caractères maximum

vpindex

Active l'index des processeurs virtuels.

marche, arrêt

21.2.3. Configuration des paramètres du pilote NetKVM

Une fois le pilote NetKVM installé, vous pouvez le configurer pour mieux l'adapter à votre environnement. Les paramètres énumérés dans la procédure suivante peuvent être configurés à l'aide du gestionnaire de périphériques de Windows (devmgmt.msc).

Important

La modification des paramètres du pilote oblige Windows à recharger ce pilote. Cela interrompt l'activité du réseau en cours.

Conditions préalables

Procédure

  1. Ouvrez le gestionnaire de périphériques de Windows.

    Pour plus d'informations sur l'ouverture du Gestionnaire de périphériques, reportez-vous à la documentation de Windows.

  2. Localisez le site Red Hat VirtIO Ethernet Adapter.

    1. Dans la fenêtre Gestionnaire de périphériques, cliquez sur en regard de Adaptateurs réseau.
    2. Sous la liste des adaptateurs réseau, double-cliquez sur Red Hat VirtIO Ethernet Adapter.

      La fenêtre Properties de l'appareil s'ouvre.

  3. Visualiser les paramètres de l'appareil.

    Dans la fenêtre Properties, cliquez sur l'onglet Advanced.

  4. Modifier les paramètres de l'appareil.

    1. Cliquez sur le paramètre que vous souhaitez modifier.

      Les options relatives à ce paramètre s'affichent.

    2. Modifiez les options si nécessaire.

      Pour plus d'informations sur les options des paramètres NetKVM, reportez-vous à la section Paramètres du pilote NetKVM.

    3. Cliquez sur OK pour enregistrer les modifications.

21.2.4. Paramètres du pilote NetKVM

Le tableau suivant fournit des informations sur les paramètres de journalisation configurables du pilote NetKVM.

Expand
Tableau 21.2. Paramètres d'enregistrement
ParamètresDescription 2

Logging.Enable

Valeur booléenne qui détermine si la journalisation est activée. La valeur par défaut est Enabled.

Niveau de journalisation

Un nombre entier qui définit le niveau de journalisation. Plus l'entier augmente, plus la verbosité du journal augmente.

  • La valeur par défaut est 0 (erreurs uniquement).
  • 1-2 ajoute des messages de configuration.
  • 3-4 ajoute des informations sur le flux de paquets.
  • 5-6 ajoute des informations de trace au niveau des interruptions et des DPC.
Note

Des niveaux de journalisation élevés ralentiront votre machine virtuelle.

Le tableau suivant fournit des informations sur les paramètres initiaux configurables du pilote NetKVM.

Expand
Tableau 21.3. Paramètres initiaux
ParamètresDescription

Attribuer un MAC

Chaîne définissant l'adresse MAC administrée localement pour le NIC paravirtualisé. Cette adresse n'est pas définie par défaut.

Init.Do802.1PQ

Valeur booléenne qui active la prise en charge de la population et de la suppression des balises Priority/VLAN. La valeur par défaut est Enabled.

Init.MaxTxBuffers

Un entier qui représente le nombre de descripteurs d'anneau TX qui seront alloués. La valeur est limitée par la taille de la file d'attente Tx de QEMU.

La valeur par défaut est 1024.

Les valeurs valides sont : 16, 32, 64, 128, 256, 512 et 1024.

Init.MaxRxBuffers

Un entier qui représente le nombre de descripteurs d'anneaux RX qui seront alloués. La valeur est limitée par la taille de la file d'attente Tx de QEMU.

La valeur par défaut est 1024.

Les valeurs valides sont : 16, 32, 64, 128, 256, 512, 1024, 2048 et 4096.

Somme de contrôle offload.Tx.Tx

Spécifie la capacité de délestage de la somme de contrôle TX.

Dans Red Hat Enterprise Linux 9, les valeurs valides pour ce paramètre sont les suivantes :

  • Tous (par défaut), qui permet de décharger les sommes de contrôle IP, TCP et UDP pour IPv4 et IPv6
  • TCP/UDP(v4,v6) qui permet de décharger les sommes de contrôle TCP et UDP pour IPv4 et IPv6
  • TCP/UDP(v4) qui permet de décharger les sommes de contrôle TCP et UDP pour IPv4 uniquement
  • TCP(v4) qui n'active que le déchargement de la somme de contrôle TCP pour IPv4 uniquement

Somme de contrôle Offload.Rx

Spécifie la capacité de délestage de la somme de contrôle RX.

Dans Red Hat Enterprise Linux 9, les valeurs valides pour ce paramètre sont les suivantes :

  • Tous (par défaut), qui permet de décharger les sommes de contrôle IP, TCP et UDP pour IPv4 et IPv6
  • TCP/UDP(v4,v6) qui permet de décharger les sommes de contrôle TCP et UDP pour IPv4 et IPv6
  • TCP/UDP(v4) qui permet de décharger les sommes de contrôle TCP et UDP pour IPv4 uniquement
  • TCP(v4) qui n'active que le déchargement de la somme de contrôle TCP pour IPv4 uniquement

Offload.Tx.LSO

Spécifie la capacité de délestage des grands segments (LSO) du TX.

Dans Red Hat Enterprise Linux 9, les valeurs valides pour ce paramètre sont les suivantes :

  • Maximal (par défaut) qui permet le délestage LSO pour TCPv4 et TCPv6
  • IPv4 qui permet le délestage LSO pour TCPv4 uniquement
  • Disable qui désactive le délestage LSO

MinRxBufferPercent

Spécifie la quantité minimale de tampons disponibles dans la file d'attente RX en pourcentage de la quantité totale de tampons RX. Si le nombre réel de tampons disponibles est inférieur à cette valeur, le pilote NetKVM indique au système d'exploitation que les ressources sont faibles (en lui demandant de renvoyer les tampons RX dès que possible)

Valeur minimale (par défaut) - 0, ce qui signifie que le conducteur n'indique jamais de condition de ressources faibles.

Valeur maximale - 100, ce qui signifie que le conducteur indique en permanence que ses ressources sont faibles.

Pour optimiser les performances d'une machine virtuelle (VM) exécutant un système d'exploitation Windows, vous pouvez configurer ou désactiver divers processus Windows.

Avertissement

Certains processus peuvent ne pas fonctionner comme prévu si vous modifiez leur configuration.

Procédure

Vous pouvez optimiser vos machines virtuelles Windows en effectuant une combinaison des opérations suivantes :

  • Retirez les périphériques inutilisés, tels que les USB ou les CD-ROM, et désactivez les ports.
  • Désactiver les services d'arrière-plan, tels que SuperFetch et Windows Search. Pour plus d'informations sur l'arrêt des services, voir Désactivation des services système ou Stop-Service.
  • Désactiver useplatformclock. Pour ce faire, exécutez la commande suivante,

    # bcdedit /set useplatformclock No
    Copy to Clipboard Toggle word wrap
  • Examinez et désactivez les tâches planifiées inutiles, telles que la défragmentation planifiée du disque. Pour plus d'informations sur la procédure à suivre, voir Désactiver les tâches planifiées.
  • Assurez-vous que les disques ne sont pas cryptés.
  • Réduire l'activité périodique des applications serveur. Vous pouvez le faire en modifiant les minuteries correspondantes. Pour plus d'informations, voir Minuteries multimédias.
  • Fermez l'application Gestionnaire de serveur sur la VM.
  • Désactivez le logiciel antivirus. Notez que la désactivation de l'antivirus peut compromettre la sécurité de la VM.
  • Désactive l'économiseur d'écran.
  • Laissez le système d'exploitation Windows sur l'écran d'ouverture de session lorsqu'il n'est pas utilisé.

Pour sécuriser les machines virtuelles (VM) Windows, vous pouvez activer une sécurité de base en utilisant les capacités matérielles standard de l'appareil Windows.

Conditions préalables

  • Assurez-vous d'avoir installé les derniers pilotes VirtIO certifiés WHQL.
  • Assurez-vous que le firmware de la VM prend en charge le démarrage UEFI.
  • Installez le paquetage edk2-OVMF sur votre machine hôte.

    # {PackageManagerCommand} install edk2-ovmf
    Copy to Clipboard Toggle word wrap
  • Installez les paquets vTPM sur votre machine hôte.

    # {PackageManagerCommand} install swtpm libtpms
    Copy to Clipboard Toggle word wrap
  • Assurez-vous que la VM utilise l'architecture de machine Q35.
  • Assurez-vous que vous disposez du support d'installation de Windows.

Procédure

  1. Activez TPM 2.0 en ajoutant les paramètres suivants à la section <devices> de la configuration XML de la VM.

    <devices>
    [...]
      <tpm model='tpm-crb'>
        <backend type='emulator' version='2.0'/>
      </tpm>
    [...]
    </devices>
    Copy to Clipboard Toggle word wrap
  2. Installez Windows en mode UEFI. Pour plus d'informations sur la procédure à suivre, voir Création d'une machine virtuelle SecureBoot.
  3. Installer les pilotes VirtIO sur la VM Windows. Pour plus d'informations sur la procédure à suivre, voir Installation des pilotes VirtIO sur un invité Windows.
  4. Dans l'UEFI, activez le démarrage sécurisé. Pour plus d'informations sur la procédure à suivre, voir Secure Boot.

Vérification

  • Assurez-vous que la page Device Security de votre machine Windows affiche le message suivant :

    Settings > Update & Security > Windows Security > Device Security

    Your device meets the requirements for standard hardware security.
    Copy to Clipboard Toggle word wrap

Pour sécuriser davantage les machines virtuelles Windows (VM), vous pouvez activer la protection de l'intégrité du code basée sur la virtualisation, également connue sous le nom d'intégrité du code protégée par l'hyperviseur (HVCI).

Conditions préalables

Procédure

  1. Ouvrez la configuration XML de la VM Windows. L'exemple suivant ouvre la configuration de la VM Example-L1:

    # virsh edit Example-L1
    Copy to Clipboard Toggle word wrap
  2. Dans la section <cpu>, spécifiez le mode CPU et ajoutez l'indicateur de politique.

    Important
    • Pour les processeurs Intel, activez l'indicateur de politique vmx.
    • Pour les processeurs AMD, activez l'indicateur de politique svm.
    • Si vous ne souhaitez pas spécifier une unité centrale personnalisée, vous pouvez définir l'adresse <cpu mode> comme host-passthrough.
    <cpu mode='custom' match='exact' check='partial'>
        <model fallback='allow'>Skylake-Client-IBRS</model>
        <topology sockets='1' dies='1' cores='4' threads='1'/>
        <feature policy='require' name='vmx'/>
    </cpu>
    Copy to Clipboard Toggle word wrap
  3. Enregistrez la configuration XML et redémarrez la VM.
  4. Sur le système d'exploitation des VM, accédez à la page Core isolation details:

    Settings > Update & Security > Windows Security > Device Security > Core isolation details

  5. Basculer l'interrupteur pour activer Memory Integrity.
  6. Redémarrez la VM.
Note

Pour d'autres méthodes d'activation de HVCI, voir la documentation Microsoft correspondante.

Vérification

  • Assurez-vous que la page Device Security de votre VM Windows affiche le message suivant :

    Settings > Update & Security > Windows Security > Device Security

    Your device meets the requirements for enhanced hardware security.
    Copy to Clipboard Toggle word wrap
  • Vous pouvez également consulter les informations système relatives à la VM Windows :

    1. Exécutez msinfo32.exe dans une invite de commande.
    2. Vérifiez si Credential Guard, Hypervisor enforced Code Integrity figure sous Virtualization-based security Services Running.

21.5. Prochaines étapes

  • Pour utiliser les utilitaires permettant d'accéder, de modifier et de créer des disques de machines virtuelles ou d'autres images de disque pour une VM Windows, installez les paquets libguestfs-tools et libguestfs-winsupport sur la machine hôte :

    $ sudo dnf install libguestfs-tools libguestfs-winsupport
    Copy to Clipboard Toggle word wrap
  • Pour utiliser les utilitaires permettant d'accéder, de modifier et de créer des disques de machines virtuelles ou d'autres images de disque pour une VM Windows, installez les paquets guestfs-tools et guestfs-winsupport sur la machine hôte :

    $ sudo dnf install guestfs-tools guestfs-winsupport
    Copy to Clipboard Toggle word wrap
  • Pour partager des fichiers entre votre hôte RHEL 9 et ses machines virtuelles Windows, vous pouvez utiliser virtiofs ou NFS.

Chapitre 22. Création de machines virtuelles imbriquées

Vous pouvez utiliser des machines virtuelles imbriquées (VM) si vous avez besoin d'un système d'exploitation différent de celui de votre hôte local. Il n'est alors plus nécessaire d'utiliser du matériel physique supplémentaire.

Avertissement

Dans la majorité des environnements, la virtualisation imbriquée n'est disponible qu'en tant qu'aperçu technologique dans RHEL 9.

Pour une description détaillée des environnements pris en charge et non pris en charge, voir Limitations de la prise en charge de la virtualisation imbriquée.

22.1. Qu'est-ce que la virtualisation imbriquée ?

La virtualisation imbriquée permet d'exécuter des machines virtuelles (VM) à l'intérieur d'autres VM. Une VM standard qui s'exécute sur un hôte physique peut également agir comme un second hyperviseur et créer ses propres VM.

Terminologie de la virtualisation imbriquée

Niveau 0 (L0)
Un hôte physique, une machine nue.
Niveau 1 (L1)
Une VM standard, fonctionnant sur un hôte physique L0, qui peut agir en tant qu'hôte virtuel supplémentaire.
Niveau 2 (L2)

Une VM imbriquée s'exécutant sur un hôte virtuel L1.

Important: Le deuxième niveau de virtualisation limite considérablement les performances d'une VM L2. C'est pourquoi la virtualisation imbriquée est principalement destinée aux scénarios de développement et de test, tels que :

  • Débogage des hyperviseurs dans un environnement contraint
  • Tester des déploiements virtuels plus importants sur un nombre limité de ressources physiques
Avertissement

Dans la majorité des environnements, la virtualisation imbriquée n'est disponible qu'en tant qu'aperçu technologique dans RHEL 9.

Pour une description détaillée des environnements pris en charge et non pris en charge, voir Limitations de la prise en charge de la virtualisation imbriquée.

Dans la plupart des environnements, la virtualisation imbriquée n'est disponible qu'en tant qu'aperçu technologique dans RHEL 9.

Cependant, vous pouvez utiliser une machine virtuelle (VM) Windows avec le sous-système Windows pour Linux (WSL2) pour créer un environnement Linux virtuel dans la VM Windows. Ce cas d'utilisation est entièrement pris en charge sur RHEL 9 dans des conditions spécifiques.

Pour en savoir plus sur la terminologie relative à la virtualisation imbriquée, voir Qu'est-ce que la virtualisation imbriquée ?

Environnements pris en charge

Pour créer un déploiement pris en charge de la virtualisation imbriquée, créez une VM Windows L1 sur un hôte RHEL 9 L0 et utilisez WSL2 pour créer un environnement Linux virtuel à l'intérieur de la VM Windows L1. Actuellement, il s'agit du seul environnement imbriqué pris en charge.

Important

L'hôte L0 doit être un système Intel ou AMD. D'autres architectures, telles que ARM ou IBM Z, ne sont actuellement pas prises en charge.

Vous ne devez utiliser que les versions suivantes du système d'exploitation :

Expand
On the L0 host:On the L1 VMs:

RHEL 9.2 et versions ultérieures

Windows Server 2019 avec WSL2

 

Windows Server 2022 avec WSL2

 

Windows 10 avec WSL2

 

Windows 11 avec WSL2

Voir la documentation Microsoft pour des instructions sur l'installation de WSL2 et le choix des distributions Linux prises en charge.

Pour créer un environnement imbriqué pris en charge, utilisez l'une des procédures suivantes :

Technologie Environnements de prévisualisation

Ces environnements imbriqués ne sont disponibles qu'en tant qu'aperçu technologique et ne sont pas pris en charge.

Important

L'hôte L0 doit être un système Intel, AMD ou IBM Z. La virtualisation imbriquée ne fonctionne pas actuellement sur d'autres architectures, telles que ARM.

Vous ne devez utiliser que les versions suivantes du système d'exploitation :

Expand
On the L0 host:On the L1 VMs:On the L2 VMs:

RHEL 9.2 et versions ultérieures

RHEL 8.8 et versions ultérieures

RHEL 8.8 et versions ultérieures

 

RHEL 9.2 et versions ultérieures

RHEL 9.2 et versions ultérieures

 

Windows Server 2016 avec Hyper-V

Windows Server 2019

 

Windows Server 2019 avec Hyper-V

Serveur Windows 2022

 

Windows Server 2022 avec Hyper-V

 
 

Windows 10 avec Hyper-V

 
 

Windows 11 avec Hyper-V

 
Note

La création de VM RHEL L1 n'est pas testée lorsqu'elle est utilisée dans d'autres offres de virtualisation Red Hat. Il s'agit notamment de

  • Red Hat Virtualisation
  • Plateforme Red Hat OpenStack
  • Virtualisation OpenShift

Pour créer un environnement imbriqué d'aperçu technologique, utilisez l'une des procédures suivantes :

Hypervisor limitations

  • Actuellement, Red Hat teste l'imbrication uniquement sur RHEL-KVM. Lorsque RHEL est utilisé comme hyperviseur L0, vous pouvez utiliser RHEL ou Windows comme hyperviseur L1.
  • Lors de l'utilisation d'une VM RHEL L1 sur un hyperviseur L0 non KVM, tel que VMware ESXi ou Amazon Web Services (AWS), la création de VM L2 dans le système d'exploitation invité RHEL n'a pas été testée et pourrait ne pas fonctionner.

Feature limitations

  • L'utilisation des VM L2 comme hyperviseurs et la création d'invités L3 n'ont pas été correctement testées et ne devraient pas fonctionner.
  • La migration des VM ne fonctionne actuellement pas sur les systèmes AMD si la virtualisation imbriquée a été activée sur l'hôte L0.
  • Sur un système IBM Z, il n'est pas possible d'utiliser en même temps le stockage de sauvegarde à grande pagination et la virtualisation imbriquée.

    # modprobe kvm hpage=1 nested=1
    modprobe: ERROR: could not insert 'kvm': Invalid argument
    # dmesg |tail -1
    [90226.508366] kvm-s390: A KVM host that supports nesting cannot back its KVM guests with huge pages
    Copy to Clipboard Toggle word wrap
  • Certaines fonctionnalités disponibles sur l'hôte L0 peuvent ne pas être disponibles pour l'hyperviseur L1.

22.3. Création d'une machine virtuelle imbriquée sur Intel

Suivez les étapes ci-dessous pour activer et configurer la virtualisation imbriquée sur un hôte Intel.

Avertissement

Dans la majorité des environnements, la virtualisation imbriquée n'est disponible qu'en tant qu'aperçu technologique dans RHEL 9.

Pour une description détaillée des environnements pris en charge et non pris en charge, voir Limitations de la prise en charge de la virtualisation imbriquée.

Conditions préalables

  • Un hôte RHEL 9 L0 exécutant une machine virtuelle (VM) L1.
  • Le processeur de l'hyperviseur doit prendre en charge la virtualisation imbriquée. Pour le vérifier, utilisez la commande cat /proc/cpuinfo sur l'hyperviseur L0. Si la sortie de la commande inclut les drapeaux vmx et ept, la création de VM L2 est possible. C'est généralement le cas sur les processeurs Intel Xeon v3 et ultérieurs.
  • Assurez-vous que la virtualisation imbriquée est activée sur l'hôte L0 :

    # cat /sys/module/kvm_intel/parameters/nested
    Copy to Clipboard Toggle word wrap
    • Si la commande renvoie 1 ou Y, la fonctionnalité est activée. Sautez les autres étapes préalables et passez à la section Procédure.
    • Si la commande renvoie 0 ou N mais que votre système prend en charge la virtualisation imbriquée, procédez comme suit pour activer la fonctionnalité.

      1. Déchargez le module kvm_intel:

        # modprobe -r kvm_intel
        Copy to Clipboard Toggle word wrap
      2. Activer la fonction d'imbrication :

        # modprobe kvm_intel nested=1
        Copy to Clipboard Toggle word wrap
      3. La fonction d'imbrication est maintenant activée, mais seulement jusqu'au prochain redémarrage de l'hôte L0. Pour l'activer de façon permanente, ajoutez la ligne suivante au fichier /etc/modprobe.d/kvm.conf:

        options kvm_intel nested=1
        Copy to Clipboard Toggle word wrap

Procédure

  1. Configurez votre VM L1 pour la virtualisation imbriquée.

    1. Ouvrez la configuration XML de la VM. L'exemple suivant ouvre la configuration de la VM Intel-L1:

      # virsh edit Intel-L1
      Copy to Clipboard Toggle word wrap
    2. Configurez la VM pour qu'elle utilise le mode CPU host-passthrough en modifiant l'élément <cpu>:

      <cpu mode='host-passthrough'/>
      Copy to Clipboard Toggle word wrap

      Si vous souhaitez que la VM utilise un modèle de processeur spécifique, configurez-la pour qu'elle utilise le mode de processeur custom. À l'intérieur de l'élément <cpu>, ajoutez un élément <feature policy='require' name='vmx'/> et un élément <model> avec le modèle de CPU spécifié à l'intérieur. Par exemple :

      <cpu mode ='custom' match ='exact' check='partial'>
        <model fallback='allow'>Haswell-noTSX</model>
        <feature policy='require' name='vmx'/>
        ...
      </cpu>
      Copy to Clipboard Toggle word wrap
  2. Créez une VM L2 à l'intérieur de la VM L1. Pour ce faire, suivez la même procédure que pour la création de la L1 VM.

22.4. Création d'une machine virtuelle imbriquée sur AMD

Suivez les étapes ci-dessous pour activer et configurer la virtualisation imbriquée sur un hôte AMD.

Avertissement

Dans la majorité des environnements, la virtualisation imbriquée n'est disponible qu'en tant qu'aperçu technologique dans RHEL 9.

Pour une description détaillée des environnements pris en charge et non pris en charge, voir Limitations de la prise en charge de la virtualisation imbriquée.

Conditions préalables

  • Un hôte RHEL 9 L0 exécutant une machine virtuelle (VM) L1.
  • Le processeur de l'hyperviseur doit prendre en charge la virtualisation imbriquée. Pour le vérifier, utilisez la commande cat /proc/cpuinfo sur l'hyperviseur L0. Si la sortie de la commande inclut les drapeaux svm et npt, la création de VM L2 est possible. C'est généralement le cas sur les cœurs AMD EPYC et les versions ultérieures.
  • Assurez-vous que la virtualisation imbriquée est activée sur l'hôte L0 :

    # cat /sys/module/kvm_amd/parameters/nested
    Copy to Clipboard Toggle word wrap
    • Si la commande renvoie 1 ou Y, la fonctionnalité est activée. Sautez les autres étapes préalables et passez à la section Procédure.
    • Si la commande renvoie 0 ou N, procédez comme suit pour activer la fonction.

      1. Arrêtez toutes les machines virtuelles en cours d'exécution sur l'hôte L0.
      2. Déchargez le module kvm_amd:

        # modprobe -r kvm_amd
        Copy to Clipboard Toggle word wrap
      3. Activer la fonction d'imbrication :

        # modprobe kvm_amd nested=1
        Copy to Clipboard Toggle word wrap
      4. La fonction d'imbrication est maintenant activée, mais seulement jusqu'au prochain redémarrage de l'hôte L0. Pour l'activer de façon permanente, ajoutez ce qui suit au fichier /etc/modprobe.d/kvm.conf:

        options kvm_amd nested=1
        Copy to Clipboard Toggle word wrap

Procédure

  1. Configurez votre VM L1 pour la virtualisation imbriquée.

    1. Ouvrez la configuration XML de la VM. L'exemple suivant ouvre la configuration de la VM AMD-L1:

      # virsh edit AMD-L1
      Copy to Clipboard Toggle word wrap
    2. Configurez la VM pour qu'elle utilise le mode CPU host-passthrough en modifiant l'élément <cpu>:

      <cpu mode='host-passthrough'/>
      Copy to Clipboard Toggle word wrap

      Si vous souhaitez que la VM utilise un modèle de CPU spécifique, configurez-la pour qu'elle utilise le mode CPU custom. À l'intérieur de l'élément <cpu>, ajoutez un élément <feature policy='require' name='svm'/> et un élément <model> avec le modèle de CPU spécifié à l'intérieur. Par exemple :

      <cpu mode="custom" match="exact" check="none">
        <model fallback="allow">EPYC-IBPB</model>
        <feature policy="require" name="svm"/>
        ...
      </cpu>
      Copy to Clipboard Toggle word wrap
  2. Créez une VM L2 à l'intérieur de la VM L1. Pour ce faire, suivez la même procédure que pour la création de la L1 VM.

22.5. Création d'une machine virtuelle imbriquée sur IBM Z

Suivez les étapes ci-dessous pour activer et configurer la virtualisation imbriquée sur un hôte IBM Z.

Note

IBM Z ne fournit pas vraiment d'hôte L0 à l'état brut. Au lieu de cela, les systèmes utilisateurs sont configurés sur une partition logique (LPAR), qui est déjà un système virtualisé, c'est pourquoi elle est souvent appelée L1. Cependant, pour un meilleur alignement avec les autres architectures de ce guide, les étapes suivantes se réfèrent à IBM Z comme s'il fournissait un hôte L0.

Pour en savoir plus sur la virtualisation imbriquée, voir : Qu'est-ce que la virtualisation imbriquée ?

Avertissement

Dans la majorité des environnements, la virtualisation imbriquée n'est disponible qu'en tant qu'aperçu technologique dans RHEL 9.

Pour une description détaillée des environnements pris en charge et non pris en charge, voir Limitations de la prise en charge de la virtualisation imbriquée.

Conditions préalables

  • Un hôte RHEL 9 L0 exécutant une machine virtuelle (VM) L1.
  • Le processeur de l'hyperviseur doit prendre en charge la virtualisation imbriquée. Pour vérifier que c'est le cas, utilisez la commande cat /proc/cpuinfo sur l'hyperviseur L0. Si la sortie de la commande inclut le drapeau sie, la création de VM L2 est possible.
  • Assurez-vous que la virtualisation imbriquée est activée sur l'hôte L0 :

    # cat /sys/module/kvm/parameters/nested
    Copy to Clipboard Toggle word wrap
    • Si la commande renvoie 1 ou Y, la fonctionnalité est activée. Sautez les autres étapes préalables et passez à la section Procédure.
    • Si la commande renvoie 0 ou N, procédez comme suit pour activer la fonction.

      1. Arrêtez toutes les machines virtuelles en cours d'exécution sur l'hôte L0.
      2. Déchargez le module kvm:

        # modprobe -r kvm
        Copy to Clipboard Toggle word wrap
      3. Activer la fonction d'imbrication :

        # modprobe kvm nested=1
        Copy to Clipboard Toggle word wrap
      4. La fonction d'imbrication est maintenant activée, mais seulement jusqu'au prochain redémarrage de l'hôte L0. Pour l'activer de façon permanente, ajoutez la ligne suivante au fichier /etc/modprobe.d/kvm.conf:

        options kvm nested=1
        Copy to Clipboard Toggle word wrap

Procédure

  • Créez une VM L2 à l'intérieur de la VM L1. Pour ce faire, suivez la même procédure que pour la création de la L1 VM.

Lorsque vous travaillez avec des machines virtuelles (VM), vous pouvez rencontrer des problèmes plus ou moins graves. Certains problèmes peuvent être résolus rapidement et facilement, tandis que pour d'autres, vous devrez peut-être capturer des données et des journaux liés aux machines virtuelles afin de signaler ou de diagnostiquer les problèmes.

Les sections suivantes fournissent des informations détaillées sur la génération de journaux et le diagnostic de certains problèmes courants liés aux machines virtuelles, ainsi que sur le signalement de ces problèmes.

23.1. Générer les journaux de débogage de libvirt

Pour diagnostiquer les problèmes des machines virtuelles (VM), il est utile de générer et d'examiner les journaux de débogage de libvirt. Il est également utile de joindre les journaux de débogage lorsque vous demandez de l'aide pour résoudre des problèmes liés aux machines virtuelles.

Les sections suivantes expliquent ce que sont les journaux de débogage, comment les rendre persistants, les activer pendant l'exécution et les joindre lorsque vous signalez des problèmes.

23.1.1. Comprendre les journaux de débogage de libvirt

Les journaux de débogage sont des fichiers texte qui contiennent des données sur les événements qui se produisent pendant l'exécution de la machine virtuelle (VM). Les journaux fournissent des informations sur les fonctionnalités fondamentales côté serveur, telles que les bibliothèques hôtes et le démon libvirt. Les fichiers journaux contiennent également la sortie d'erreur standard (stderr) de toutes les machines virtuelles en cours d'exécution.

La journalisation de débogage n'est pas activée par défaut et doit l'être au démarrage de libvirt. Vous pouvez activer la journalisation pour une session unique ou de manière persistante. Vous pouvez également activer la journalisation lorsqu'une session du démon libvirt est déjà en cours d'exécution en modifiant les paramètres d'exécution du démon.

Il est également utile de joindre les journaux de débogage de libvirt lorsque l'on demande de l'aide pour un problème de VM.

Vous pouvez configurer la journalisation de débogage de libvirt pour qu'elle soit automatiquement activée à chaque démarrage de libvirt. Par défaut, virtqemud est le démon principal de libvirt dans RHEL 9. Pour apporter des modifications persistantes à la configuration de libvirt, vous devez éditer le fichier virtqemud.conf, situé dans le répertoire /etc/libvirt.

Note

Dans certains cas, par exemple lors d'une mise à niveau à partir de RHEL 8, libvirtd peut encore être le démon libvirt activé. Dans ce cas, vous devez éditer le fichier libvirtd.conf à la place.

Procédure

  1. Ouvrez le fichier virtqemud.conf dans un éditeur.
  2. Remplacez ou réglez les filtres en fonction de vos besoins.

    Expand
    Tableau 23.1. Débogage des valeurs des filtres

    1

    enregistre tous les messages générés par libvirt.

    2

    enregistre toutes les informations non déboguées.

    3

    enregistre tous les messages d'avertissement et d'erreur. Il s'agit de la valeur par défaut.

    4

    n'enregistre que les messages d'erreur.

    Exemple 23.1. Exemple de paramètres de démon pour les filtres de journalisation

    Les paramètres suivants :

    • Enregistrer tous les messages d'erreur et d'avertissement provenant des couches remote, util.json et rpc
    • Ne consigner que les messages d'erreur provenant de la couche event.
    • Enregistrer les journaux filtrés dans /var/log/libvirt/libvirt.log
    log_filters="3:remote 4:event 3:util.json 3:rpc"
    log_outputs="1:file:/var/log/libvirt/libvirt.log"
    Copy to Clipboard Toggle word wrap
  3. Sauvegarder et quitter.
  4. Redémarrer le démon libvirt.

    $ systemctl restart virtqemud.service
    Copy to Clipboard Toggle word wrap

Vous pouvez modifier les paramètres d'exécution du démon libvirt pour activer les journaux de débogage et les enregistrer dans un fichier de sortie.

Ceci est utile lorsque le redémarrage du démon libvirt n'est pas possible parce que le redémarrage résout le problème, ou parce qu'un autre processus, tel que la migration ou la sauvegarde, s'exécute en même temps. La modification des paramètres d'exécution est également utile si vous souhaitez essayer une commande sans éditer les fichiers de configuration ou redémarrer le démon.

Conditions préalables

  • Assurez-vous que le paquet libvirt-admin est installé.

Procédure

  1. Optional: Sauvegarder l'ensemble actif des filtres de journalisation.

    # virt-admin -c virtqemud:///system daemon-log-filters >> virt-filters-backup
    Copy to Clipboard Toggle word wrap
    Note

    Il est recommandé de sauvegarder l'ensemble des filtres actifs afin de pouvoir les restaurer après la génération des journaux. Si vous ne restaurez pas les filtres, les messages continueront à être enregistrés, ce qui peut affecter les performances du système.

  2. Utilisez l'utilitaire virt-admin pour activer le débogage et définir les filtres en fonction de vos besoins.

    Expand
    Tableau 23.2. Débogage des valeurs des filtres

    1

    enregistre tous les messages générés par libvirt.

    2

    enregistre toutes les informations non déboguées.

    3

    enregistre tous les messages d'avertissement et d'erreur. Il s'agit de la valeur par défaut.

    4

    n'enregistre que les messages d'erreur.

    Exemple 23.2. Exemple de paramètres virt-admin pour les filtres de journalisation

    La commande suivante :

    • Enregistre tous les messages d'erreur et d'avertissement provenant des couches remote, util.json et rpc
    • Ne consigne que les messages d'erreur provenant de la couche event.
    # virt-admin -c virtqemud:///system daemon-log-filters "3:remote 4:event 3:util.json 3:rpc"
    Copy to Clipboard Toggle word wrap
  3. Utilisez l'utilitaire virt-admin pour enregistrer les journaux dans un fichier ou un répertoire spécifique.

    Par exemple, la commande suivante enregistre la sortie du journal dans le fichier libvirt.log du répertoire /var/log/libvirt/.

    # virt-admin -c virtqemud:///system daemon-log-outputs "1:file:/var/log/libvirt/libvirt.log"
    Copy to Clipboard Toggle word wrap
  4. Optional: Vous pouvez également supprimer les filtres pour générer un fichier journal contenant toutes les informations relatives aux machines virtuelles. Cependant, cela n'est pas recommandé car ce fichier peut contenir une grande quantité d'informations redondantes produites par les modules de libvirt.

    • Utilisez l'utilitaire virt-admin pour spécifier un ensemble vide de filtres.

      # virt-admin -c virtqemud:///system daemon-log-filters
        Logging filters:
      Copy to Clipboard Toggle word wrap
  5. Optional: Restaurer les filtres dans leur état d'origine à l'aide du fichier de sauvegarde.
    Effectuez la deuxième étape avec les valeurs sauvegardées pour restaurer les filtres.

Il se peut que vous deviez demander une assistance supplémentaire pour diagnostiquer et résoudre les problèmes liés aux machines virtuelles (VM). Il est fortement recommandé de joindre les journaux de débogage à la demande d'assistance afin que l'équipe d'assistance ait accès à toutes les informations dont elle a besoin pour résoudre rapidement le problème lié à la machine virtuelle.

Procédure

  • Pour signaler un problème et demander de l'aide, ouvrez un dossier d'assistance.
  • En fonction des problèmes rencontrés, joignez les journaux suivants à votre rapport :

    • En cas de problème avec le service libvirt, joignez le fichier /var/log/libvirt/libvirt.log de l'hôte.
    • Pour les problèmes liés à une VM spécifique, joignez le fichier journal correspondant.

      Par exemple, pour la VM testguest1, joignez le fichier testguest1.log, qui se trouve à l'adresse /var/log/libvirt/qemu/testguest1.log.

23.2. Vider le cœur d'une machine virtuelle

Pour analyser les raisons d'un crash ou d'un dysfonctionnement d'une machine virtuelle (VM), vous pouvez enregistrer le noyau de la VM dans un fichier sur le disque pour une analyse et un diagnostic ultérieurs.

Cette section présente brièvement le core dumping et explique comment vous pouvez effectuer le dumping d'un core de VM dans un fichier spécifique.

Une machine virtuelle (VM) nécessite de nombreux processus en cours d'exécution pour fonctionner de manière précise et efficace. Dans certains cas, une VM en cours d'exécution peut s'arrêter de manière inattendue ou présenter des dysfonctionnements pendant que vous l'utilisez. Le redémarrage de la VM peut entraîner la réinitialisation ou la perte des données, ce qui complique le diagnostic du problème exact à l'origine de la panne de la VM.

Dans ce cas, vous pouvez utiliser l'utilitaire virsh dump pour enregistrer (ou dump) le noyau d'une VM dans un fichier avant de redémarrer la VM. Le fichier core dump contient une image brute de la mémoire physique de la VM qui contient des informations détaillées sur la VM. Ces informations peuvent être utilisées pour diagnostiquer les problèmes de la VM, soit manuellement, soit à l'aide d'un outil tel que l'utilitaire crash.

Le core dump d'une machine virtuelle (VM) contient des informations détaillées sur l'état d'une VM à un moment donné. Ces informations, qui s'apparentent à un instantané de la VM, peuvent vous aider à détecter des problèmes en cas de dysfonctionnement ou d'arrêt soudain d'une VM.

Conditions préalables

  • Assurez-vous que vous disposez d'un espace disque suffisant pour enregistrer le fichier. Notez que l'espace occupé par la VM dépend de la quantité de RAM allouée à la VM.

Procédure

  • Utilisez l'utilitaire virsh dump.

    Par exemple, la commande suivante extrait les cœurs de la VM lander1, sa mémoire et le fichier de registre commun du processeur vers gargantua.file dans le répertoire /core/file.

    # virsh dump lander1 /core/file/gargantua.file --memory-only
    Domain 'lander1' dumped to /core/file/gargantua.file
    Copy to Clipboard Toggle word wrap
Important

L'utilitaire crash ne prend plus en charge le format de fichier par défaut de la commande virsh dump. Pour analyser un fichier core dump à l'aide de crash, vous devez créer le fichier avec l'option --memory-only.

De plus, vous devez utiliser l'option --memory-only lors de la création d'un fichier core dump à joindre à un cas d'assistance Red Hat.

Résolution de problèmes

Si la commande virsh dump échoue avec une erreur System is deadlocked on memory, assurez-vous que vous attribuez suffisamment de mémoire au fichier core dump. Pour ce faire, utilisez la valeur de l'option crashkernel suivante. Sinon, n'utilisez pas du tout la commande crashkernel, qui attribue automatiquement de la mémoire au fichier core dump.

crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M
Copy to Clipboard Toggle word wrap

23.3. Retracer les processus des machines virtuelles

Lorsqu'un processus lié à une machine virtuelle (VM) fonctionne mal, vous pouvez utiliser la commande gstack avec l'identifiant du processus (PID) pour générer une trace de la pile d'exécution du processus défaillant. Si le processus fait partie d'un groupe de threads, tous les threads sont également tracés.

Conditions préalables

  • Assurez-vous que le paquetage GDB est installé.

    Pour plus de détails sur l'installation de GDB et des composants disponibles, voir Installation du débogueur GNU.

  • Assurez-vous de connaître le PID des processus que vous souhaitez retracer.

    Vous pouvez trouver le PID en utilisant la commande pgrep suivie du nom du processus. Par exemple :

    # pgrep libvirt
    22014
    22025
    Copy to Clipboard Toggle word wrap

Procédure

  • Utilisez l'utilitaire gstack suivi du PID du processus que vous souhaitez retracer.

    Par exemple, la commande suivante retrace le processus libvirt avec le PID 22014.

    # gstack 22014
    Thread 3 (Thread 0x7f33edaf7700 (LWP 22017)):
    #0  0x00007f33f81aef21 in poll () from /lib64/libc.so.6
    #1  0x00007f33f89059b6 in g_main_context_iterate.isra () from /lib64/libglib-2.0.so.0
    #2  0x00007f33f8905d72 in g_main_loop_run () from /lib64/libglib-2.0.so.0
    ...
    Copy to Clipboard Toggle word wrap

Ressources supplémentaires pour signaler les problèmes des machines virtuelles et fournir des journaux

Vous pouvez demander une aide et un soutien supplémentaires :

Ce document fournit des informations sur la prise en charge des fonctionnalités et les restrictions dans la virtualisation de Red Hat Enterprise Linux 9 (RHEL 9).

Un ensemble de limitations de support s'applique à la virtualisation dans Red Hat Enterprise Linux 9 (RHEL 9). Cela signifie que lorsque vous utilisez certaines fonctionnalités ou que vous dépassez une certaine quantité de ressources allouées lors de l'utilisation de machines virtuelles dans RHEL 9, Red Hat ne prendra pas en charge ces invités à moins que vous ne disposiez d'un plan d'abonnement spécifique.

Les fonctionnalités listées dans Fonctionnalités recommandées dans la virtualisation RHEL 9 ont été testées et certifiées par Red Hat pour fonctionner avec l'hyperviseur KVM sur un système RHEL 9. Par conséquent, elles sont entièrement prises en charge et recommandées pour une utilisation dans la virtualisation sous RHEL 9.

Les fonctionnalités listées dans Fonctionnalités non prises en charge dans la virtualisation RHEL 9 peuvent fonctionner, mais ne sont pas prises en charge et ne sont pas destinées à être utilisées dans RHEL 9. Par conséquent, Red Hat recommande fortement de ne pas utiliser ces fonctionnalités dans RHEL 9 avec KVM.

Les limites d'allocation de ressources dans la virtualisation RHEL 9 listent la quantité maximale de ressources spécifiques prises en charge sur un invité KVM dans RHEL 9. Les invités qui dépassent ces limites ne sont pas pris en charge par Red Hat.

En outre, sauf indication contraire, toutes les fonctionnalités et solutions utilisées dans la documentation pour la virtualisation de RHEL 9 sont prises en charge. Toutefois, certaines d'entre elles n'ont pas été entièrement testées et peuvent donc ne pas être totalement optimisées.

Important

Nombre de ces limitations ne s'appliquent pas à d'autres solutions de virtualisation fournies par Red Hat, telles que OpenShift Virtualization ou Red Hat OpenStack Platform (RHOSP).

Les fonctionnalités suivantes ne sont pas prises en charge par l'hyperviseur KVM inclus dans Red Hat Enterprise Linux 9 (RHEL 9) :

Important

Nombre de ces limitations peuvent ne pas s'appliquer à d'autres solutions de virtualisation fournies par Red Hat, telles que OpenShift Virtualization ou Red Hat OpenStack Platform (RHOSP).

Les fonctionnalités prises en charge par d'autres solutions de virtualisation sont décrites comme telles dans les paragraphes suivants.

Architectures des systèmes hôtes

RHEL 9 avec KVM n'est pas pris en charge sur les architectures hôtes qui ne figurent pas dans la liste des fonctionnalités recommandées pour la virtualisation de RHEL 9.

Systèmes d'exploitation invités

Les machines virtuelles KVM qui utilisent les systèmes d'exploitation invités suivants ne sont pas prises en charge sur un hôte RHEL 9 :

  • Windows 8.1 et versions antérieures
  • Windows Server 2012 R2 et versions antérieures
  • macOS
  • Solaris pour les systèmes x86
  • Tout système d'exploitation publié avant 2009

Pour obtenir une liste des systèmes d'exploitation invités pris en charge sur les hôtes RHEL et d'autres solutions de virtualisation, voir Systèmes d'exploitation invités certifiés dans Red Hat OpenStack Platform, Red Hat Virtualization, OpenShift Virtualization et Red Hat Enterprise Linux avec KVM.

Création de machines virtuelles dans des conteneurs

Red Hat ne prend pas en charge la création de machines virtuelles KVM dans tout type de conteneur qui inclut les éléments de l'hyperviseur RHEL 9 (tels que l'émulateur QEMU ou le paquetage libvirt ).

Pour créer des VM dans des conteneurs, Red Hat recommande d'utiliser l'offre de virtualisation OpenShift.

Commandes et options virsh spécifiques

Tous les paramètres que vous pouvez utiliser avec l'utilitaire virsh n'ont pas été testés et certifiés comme étant prêts pour la production par Red Hat. Par conséquent, toutes les commandes et options de virsh qui ne sont pas explicitement recommandées par la documentation de Red Hat peuvent ne pas fonctionner correctement et Red Hat recommande de ne pas les utiliser dans votre environnement de production.

Les commandes virsh non prises en charge sont notamment les suivantes :

  • virsh iface-* les commandes telles que virsh iface-start et virsh iface-destroy
  • virsh blkdeviotune
  • virsh snapshot-* les commandes telles que virsh snapshot-create et virsh snapshot-revert

La ligne de commande QEMU

QEMU est un composant essentiel de l'architecture de virtualisation dans RHEL 9, mais il est difficile à gérer manuellement, et des configurations QEMU incorrectes peuvent entraîner des vulnérabilités de sécurité. Par conséquent, l'utilisation des utilitaires de ligne de commande qemu-*, tels que qemu-kvm, n'est pas prise en charge par Red Hat. Utilisez plutôt les utilitaires libvirt, tels que virt-install, virt-xml, et les commandes virsh prises en charge, car ils orchestrent QEMU conformément aux meilleures pratiques. Cependant, l'utilitaire qemu-img est pris en charge pour la gestion des images de disques virtuels.

débranchement à chaud du vCPU

La suppression d'un processeur virtuel (vCPU) d'une VM en cours d'exécution, également appelée débranchement à chaud d'un vCPU, n'est pas prise en charge dans RHEL 9.

Débranchement à chaud de la mémoire

La suppression d'un périphérique de mémoire attaché à une VM en cours d'exécution, également appelée débranchement à chaud de la mémoire, n'est pas prise en charge dans RHEL 9.

Restriction des entrées/sorties du côté de QEMU

L'utilisation de l'utilitaire virsh blkdeviotune pour configurer les niveaux d'entrée et de sortie maximaux pour les opérations sur les disques virtuels, également connu sous le nom de QEMU-side I/O throttling, n'est pas pris en charge dans RHEL 9.

Pour configurer l'étranglement des E/S dans RHEL 9, utilisez virsh blkiotune. Ce système est également connu sous le nom de "libvirt-side I/O throttling" (étranglement des E/S côté libvirt). Pour plus d'informations, consultez la section Limitation des E/S sur disque dans les machines virtuelles.

Autres solutions :

  • La limitation des E/S côté QEMU est également prise en charge dans RHOSP. Pour plus de détails, voir la section Setting Resource Limitation on Disk et la section Use Quality-of-Service Specifications dans le Guide de stockage RHOSP.
  • En outre, OpenShift Virtualizaton prend également en charge l'étranglement des E/S côté QEMU.

Migration en direct du stockage

La migration d'une image disque d'une VM en cours d'exécution entre des hôtes n'est pas prise en charge dans RHEL 9.

Autres solutions :

  • La migration en direct du stockage est prise en charge dans RHOSP, mais avec certaines limitations. Pour plus de détails, voir Migrer un volume.

Instantanés internes

La création et l'utilisation d'instantanés internes pour les machines virtuelles sont obsolètes dans RHEL 9 et fortement déconseillées dans un environnement de production. Utilisez plutôt des instantanés externes. Pour plus d'informations, voir Support-limitations-for-virtual-machine-snapshots_creating-virtual-machine-snapshots.

Autres solutions :

accélération du chemin de données vHost

Sur les hôtes RHEL 9, il est possible de configurer vHost Data Path Acceleration (vDPA) pour les périphériques virtio, mais Red Hat ne prend actuellement pas en charge cette fonctionnalité et déconseille fortement son utilisation dans les environnements de production.

vhost-user

RHEL 9 ne prend pas en charge la mise en œuvre d'une interface vHost en espace utilisateur.

Autres solutions :

États d'alimentation des systèmes S3 et S4

La suspension d'une VM aux états d'alimentation du système Suspend to RAM (S3) ou Suspend to disk (S4) n'est pas prise en charge. Notez que ces fonctionnalités sont désactivées par défaut et que leur activation rendra votre VM non supportable par Red Hat.

Notez que les états S3 et S4 ne sont actuellement pris en charge par aucune autre solution de virtualisation fournie par Red Hat.

S3-PR sur un vDisk multipatched

La réservation persistante SCSI3 (S3-PR) sur un vDisk multipatché n'est pas prise en charge dans RHEL 9. Par conséquent, Windows Cluster n'est pas pris en charge dans RHEL 9.

virtio-crypto

L'utilisation du périphérique virtio-crypto dans RHEL 9 n'est pas prise en charge et RHEL déconseille fortement son utilisation.

Notez que les périphériques virtio-crypto ne sont pris en charge dans aucune autre solution de virtualisation fournie par Red Hat.

virtio-multitouch-device, virtio-multitouch-pci

L'utilisation des périphériques virtio-multitouch-device et virtio-multitouch-pci dans RHEL 9 n'est pas prise en charge et RHEL déconseille fortement leur utilisation.

Sauvegarde incrémentale en direct

La configuration d'une sauvegarde de VM qui n'enregistre que les modifications apportées à la VM depuis la dernière sauvegarde, également connue sous le nom de sauvegarde incrémentielle en direct, n'est pas prise en charge dans RHEL 9, et Red Hat en déconseille fortement l'utilisation.

net_failover

L'utilisation du pilote net_failover pour mettre en place un mécanisme de basculement automatique des périphériques réseau n'est pas prise en charge dans RHEL 9.

Notez que net_failover n'est actuellement pris en charge par aucune autre solution de virtualisation fournie par Red Hat.

TCG

QEMU et libvirt incluent un mode de traduction dynamique utilisant le Tiny Code Generator (TCG) de QEMU. Ce mode ne nécessite pas la prise en charge de la virtualisation matérielle. Cependant, TCG n'est pas pris en charge par Red Hat.

Les hôtes basés sur le TCG peuvent être reconnus en examinant leur configuration XML, par exemple à l'aide de la commande virsh dumpxml.

  • Le fichier de configuration d'un invité TCG contient la ligne suivante :

    <domain type='qemu'>
    Copy to Clipboard Toggle word wrap
  • Le fichier de configuration d'un invité KVM contient la ligne suivante :

    <domain type='kvm'>
    Copy to Clipboard Toggle word wrap

SR-IOV Dispositifs de mise en réseau InfiniBand

L'attachement de périphériques réseau InfiniBand à des machines virtuelles utilisant la virtualisation d'E/S à racine unique (SR-IOV) n'est pas pris en charge.

Les limites suivantes s'appliquent aux ressources virtualisées qui peuvent être allouées à une seule machine virtuelle KVM (VM) sur un hôte Red Hat Enterprise Linux 9 (RHEL 9).

Important

Nombre de ces limitations ne s'appliquent pas à d'autres solutions de virtualisation fournies par Red Hat, telles que OpenShift Virtualization ou Red Hat OpenStack Platform (RHOSP).

Nombre maximal de vCPU par VM

Pour connaître le nombre maximum de vCPUs et de mémoire pris en charge par une seule VM s'exécutant sur un hôte RHEL 9, voir : Limites de virtualisation pour Red Hat Enterprise Linux avec KVM

Périphériques PCI par VM

RHEL 9 prend en charge 32 emplacements de périphériques PCI par bus VM et 8 fonctions PCI par emplacement de périphérique. Cela donne un maximum théorique de 256 fonctions PCI par bus lorsque les capacités multifonctions sont activées dans la VM et qu'aucun pont PCI n'est utilisé.

Chaque pont PCI ajoute un nouveau bus, permettant potentiellement 256 adresses de périphériques supplémentaires. Toutefois, certains bus ne mettent pas les 256 adresses de périphériques à la disposition de l'utilisateur ; par exemple, le bus racine a plusieurs périphériques intégrés qui occupent des emplacements.

Périphériques IDE virtualisés

KVM est limité à un maximum de 4 périphériques IDE virtualisés par VM.

La virtualisation KVM dans RHEL 9 sur les systèmes IBM Z diffère de KVM sur les systèmes AMD64 et Intel 64 pour les raisons suivantes :

Dispositifs PCI et USB

Les périphériques virtuels PCI et USB ne sont pas pris en charge sur IBM Z. Cela signifie également que les périphériques PCI et USB ne sont pas pris en charge et que les périphériques USB ne sont pas pris en charge virtio-*-pci ne sont pas pris en charge et que les périphériques virtio-*-ccw doivent être utilisés à la place. Par exemple, utilisez virtio-net-ccw au lieu de virtio-net-pci.

Notez que la connexion directe de périphériques PCI, également connue sous le nom de PCI passthrough, est prise en charge.

Système d'exploitation invité pris en charge
Red Hat ne prend en charge les VM hébergées sur IBM Z que si elles utilisent RHEL 7, 8 ou 9 comme système d'exploitation invité.
Ordre de démarrage du dispositif

IBM Z ne prend pas en charge l'élément de configuration <boot dev='device'> XML. Pour définir l'ordre de démarrage du périphérique, utilisez l'élément <boot order='number'> dans la section <devices> du XML.

En outre, vous pouvez sélectionner l'entrée d'amorçage requise en utilisant l'attribut loadparm spécifique à l'architecture dans l'élément <boot>. Par exemple, l'exemple suivant détermine que le disque doit être utilisé en premier dans la séquence de démarrage et que si une distribution Linux est disponible sur ce disque, il sélectionnera la deuxième entrée de démarrage :

<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2'/>
  <source file='/path/to/qcow2'/>
  <target dev='vda' bus='virtio'/>
  <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0000'/>
  <boot order='1' loadparm='2'/>
</disk>
Copy to Clipboard Toggle word wrap
Note

L'utilisation de <boot order='number'> pour la gestion de l'ordre de démarrage est également préférable sur les hôtes AMD64 et Intel 64.

Mémoire hot plug
L'ajout de mémoire à une VM en cours d'exécution n'est pas possible sur IBM Z. Notez que la suppression de la mémoire d'une VM en cours d'exécution (memory hot unplug) n'est pas non plus possible sur IBM Z, ainsi que sur AMD64 et Intel 64.
Topologie NUMA
La topologie NUMA (Non-Uniform Memory Access) pour les CPU n'est pas prise en charge par libvirt sur IBM Z. Par conséquent, il n'est pas possible de régler les performances des vCPU en utilisant NUMA sur ces systèmes.
Dispositifs GPU
L'attribution de périphériques GPU n'est pas prise en charge sur les systèmes IBM Z.
vfio-ap
Les machines virtuelles sur un hôte IBM Z peuvent utiliser le dispositif cryptographique vfio-ap, qui n'est pris en charge sur aucune autre architecture.
vfio-ccw
Les machines virtuelles sur un hôte IBM Z peuvent utiliser le périphérique de disque vfio-ccw, qui n'est pris en charge sur aucune autre architecture.
SMBIOS
La configuration SMBIOS n'est pas disponible sur IBM Z.
Dispositifs de surveillance

Si vous utilisez des périphériques de surveillance dans votre VM sur un hôte IBM Z, utilisez le modèle diag288. Par exemple :

<devices>
  <watchdog model='diag288' action='poweroff'/>
</devices>
Copy to Clipboard Toggle word wrap
horloge kvm
Le service kvm-clock est spécifique aux systèmes AMD64 et Intel 64, et ne doit pas être configuré pour la gestion du temps des VM sur IBM Z.
v2v et p2v
Les utilitaires virt-v2v et virt-p2v ne sont pris en charge que sur les architectures AMD64 et Intel 64, et ne sont pas fournis sur IBM Z.
Migrations

Pour migrer avec succès vers un modèle d'hôte plus récent (par exemple d'IBM z14 à z15) ou pour mettre à jour l'hyperviseur, utilisez le mode d'unité centrale host-model. Les modes CPU host-passthrough et maximum ne sont pas recommandés, car ils ne sont généralement pas sûrs pour la migration.

Si vous souhaitez spécifier un modèle de CPU explicite dans le mode CPU custom, suivez les instructions suivantes :

  • N'utilisez pas les modèles de CPU qui se terminent par -base.
  • Ne pas utiliser le modèle de CPU qemu, max ou host.

Pour migrer avec succès vers un modèle d'hôte plus ancien (par exemple de z15 à z14), ou vers une version antérieure de QEMU, KVM ou du noyau RHEL, utilisez le type de CPU du plus ancien modèle d'hôte disponible sans -base à la fin.

Installation et démarrage PXE

Lorsque vous utilisez PXE pour exécuter une VM sur IBM Z, une configuration spécifique est requise pour le fichier pxelinux.cfg/default. Par exemple :

# pxelinux
default linux
label linux
kernel kernel.img
initrd initrd.img
append ip=dhcp inst.repo=example.com/redhat/BaseOS/s390x/os/
Copy to Clipboard Toggle word wrap
Exécution sécurisée
Vous pouvez démarrer une VM avec une image d'invité sécurisée préparée en définissant <launchSecurity type="s390-pv"/> dans la configuration XML de la VM. Cela permet de crypter la mémoire de la VM afin de la protéger contre tout accès indésirable de l'hyperviseur.

Notez que les fonctionnalités suivantes ne sont pas prises en charge lors de l'exécution d'une VM en mode sécurisé :

  • Passage d'un dispositif à l'autre en utilisant vfio
  • Obtenir des informations sur la mémoire en utilisant virsh domstats et virsh memstat
  • Les dispositifs virtuels memballoon et virtio-rng
  • Sauvegarde de la mémoire par l'utilisation de grandes pages
  • Migrations de machines virtuelles en direct et en différé
  • Sauvegarde et restauration des machines virtuelles
  • Les instantanés de VM, y compris les instantanés de mémoire (à l'aide de l'option --memspec )
  • Vidages complets de la mémoire. Au lieu de cela, spécifiez l'option --memory-only pour la commande virsh dump.
  • 248 vCPUs ou plus. La limite de vCPU pour les invités sécurisés est de 247.

La virtualisation KVM dans RHEL 9 sur les systèmes ARM 64 (également appelée AArch64) est différente de KVM sur les systèmes AMD64 et Intel 64 sur un certain nombre d'aspects. Il s'agit notamment des aspects suivants :

Systèmes d'exploitation invités
Le seul système d'exploitation invité actuellement pris en charge sur les machines virtuelles (VM) ARM 64 est RHEL 9.
Gestion de la console web
Certaines fonctionnalités de gestion des machines virtuelles dans la console web RHEL 9 peuvent ne pas fonctionner correctement sur du matériel ARM 64.
vCPU hot plug et hot unplug
L'attachement d'un processeur virtuel (vCPU) à une VM en cours d'exécution, également appelé hot plug vCPU, n'est pas pris en charge sur les hôtes ARM 64. En outre, comme pour les hôtes AMD64 et Intel 64, la suppression d'un vCPU d'une VM en cours d'exécution (vCPU hot unplug) n'est pas prise en charge sur ARM 64.
SecureBoot
La fonction SecureBoot n'est pas disponible sur les systèmes ARM 64.
Migration
La migration des machines virtuelles entre des hôtes ARM 64 n'est actuellement pas prise en charge.
Taille des pages de mémoire

ARM 64 ne prend actuellement en charge l'exécution de VM qu'avec une taille de page mémoire de 64 Ko et uniquement sur des hôtes avec une taille de page mémoire de 64 Ko. les pages de 4 Ko dans l'hôte ou dans l'invité ne sont actuellement pas prises en charge.

Pour créer avec succès des VM sur ARM 64, votre hôte doit utiliser un noyau avec une taille de page mémoire de 64 Ko et, lors de la création de la VM, vous devez l'installer avec kernel-64k package, par exemple en incluant le paramètre suivant dans le fichier kickstart :

%packages
-kernel
kernel-64k
%end
Copy to Clipboard Toggle word wrap
Grandes pages

Les hôtes ARM 64 avec une taille de page mémoire de 64 Ko prennent en charge des pages mémoire de grande taille avec les tailles suivantes :

  • 2 MB
  • 512 MO
  • 16 GB

    Lorsque vous utilisez le système de fichiers THP (transparent huge pages) sur un hôte ARM 64, il ne prend en charge que des pages de 512 Mo.

SVE

L'architecture ARM 64 offre la fonction Scalable Vector Expansion (SVE). Si l'hôte prend en charge cette fonctionnalité, l'utilisation de SVE dans vos machines virtuelles améliore la vitesse des calculs mathématiques vectoriels et des opérations sur les chaînes de caractères dans ces machines virtuelles.

Le niveau de base de SVE est activé par défaut sur les processeurs hôtes qui le prennent en charge. Cependant, Red Hat recommande de configurer explicitement chaque longueur de vecteur. Cela garantit que la VM ne peut être lancée que sur des hôtes compatibles. Pour ce faire, procédez comme suit

  1. Vérifiez que votre unité centrale dispose de la fonction SVE :

    # grep -m 1 Features /proc/cpuinfo | grep -w sve
    
    Features: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm fcma dcpop sve
    Copy to Clipboard Toggle word wrap

    Si la sortie de cette commande comprend sve ou si son code de sortie est 0, votre CPU supporte SVE.

  2. Ouvrez la configuration XML de la VM que vous souhaitez modifier :

    # virsh edit vm-name
    Copy to Clipboard Toggle word wrap
  3. Modifiez l'élément <cpu> de la manière suivante :

    <cpu mode='host-passthrough' check='none'>
    <feature policy='require' name='sve'/>
    <feature policy='require' name='sve128'/>
    <feature policy='require' name='sve256'/>
    <feature policy='disable' name='sve384'/>
    <feature policy='require' name='sve512'/>
    </cpu>
    Copy to Clipboard Toggle word wrap

    Cet exemple active explicitement les vecteurs SVE de longueur 128, 256 et 512, et désactive explicitement le vecteur de longueur 384.

Modèles de CPU
Les VM sur ARM 64 ne prennent actuellement en charge que le modèle de CPU host.
Sauvegarde et restauration des machines virtuelles
L'enregistrement et la restauration d' une VM ne sont actuellement pas pris en charge sur un hôte ARM 64.
PXE

Démarrage dans l'environnement d'exécution avant le démarrage (PXE) fonctionnel mais non pris en charge, Red Hat déconseille fortement son utilisation dans les environnements de production.

Si vous avez besoin d'un démarrage PXE, il n'est possible qu'avec le contrôleur d'interface réseau (NIC) virtio-net-pci. En outre, le pilote VirtioNetDxe intégré au microprogramme UEFI de la machine virtuelle (installé avec le paquet edk2-aarch64 ) doit être utilisé pour le démarrage PXE. Notez que les ROMs d'option iPXE ne sont pas prises en charge.

Mémoire des appareils
Les fonctions de mémoire des périphériques, telles que le module de mémoire double en ligne (DIMM) et le module DIMM non volatil (NVDIMM), ne fonctionnent pas sur ARM 64.
pvpanic
Le périphérique pvpanic n'est actuellement pas pris en charge sur ARM 64. Veillez à supprimer l'élément <panic> de la section <devices> de la configuration XML de l'invité sur ARM 64, car sa présence peut entraîner un échec du démarrage de la VM.
OVMF

Les VM sur un hôte ARM 64 ne peuvent pas utiliser le micrologiciel OVMF UEFI utilisé sur AMD64 et Intel 64, inclus dans le paquetage edk2-ovmf. À la place, ces machines virtuelles utilisent le micrologiciel UEFI inclus dans le paquetage edk2-aarch64, qui fournit une interface similaire et met en œuvre un ensemble de fonctionnalités similaires.

Plus précisément, edk2-aarch64 fournit un shell UEFI intégré, mais ne prend pas en charge les fonctionnalités suivantes :

  • SecureBoot
  • Mode de gestion
horloge kvm
Le service kvm-clock ne doit pas être configuré pour la gestion du temps dans les VM sur ARM 64.
Dispositifs périphériques

Les systèmes ARM 64 prennent en charge un ensemble de périphériques partiellement différent de celui des systèmes AMD64 et Intel 64.

  • Seules les topologies PCIe sont prises en charge.
  • Les systèmes ARM 64 prennent en charge les dispositifs virtio en utilisant les pilotes virtio-*-pci. En outre, les périphériques virtio-iommu et virtio-input ne sont pas pris en charge.
  • Cette fonction n'est fournie qu'à titre d'aperçu technologique et n'est donc pas supportée virtiofs n'est fournie qu'à titre d'aperçu technologique et n'est donc pas prise en charge.
  • Le pilote virtio-gpu n'est pris en charge que pour les installations graphiques.
  • Les systèmes ARM 64 prennent en charge les périphériques usb-mouse et usb-tablet pour les installations graphiques uniquement. Les autres périphériques USB, USB passthrough ou USB redirect ne sont pas pris en charge.
  • L'attribution de périphériques utilisant des E/S de fonctions virtuelles (VFIO) n'est prise en charge que pour les cartes d'interface réseau (fonctions physiques et virtuelles).
Dispositifs émulés

Les dispositifs suivants ne sont pas pris en charge sur ARM 64 :

  • Dispositifs sonores émulés, tels que ICH9, ICH6 ou AC97.
  • Cartes graphiques émulées, telles que les cartes VGA.
  • Périphériques de réseau émulés, tels que rtl8139.
Dispositifs GPU
L'attribution de périphériques GPU n'est pas prise en charge sur les systèmes ARM 64.
Configuration de la console série
Lors de la configuration d'une console série sur une VM, utilisez l'option de noyau console=ttyAMA0 au lieu de console=ttyS0 avec l'utilitaire grubby.
Interruptions non masquables
L'envoi d'interruptions non masquables (NMI) à une VM ARM 64 n'est actuellement pas possible.
Virtualisation imbriquée
La création de VM imbriquées n'est actuellement pas possible sur les hôtes ARM 64.
v2v et p2v
Les utilitaires virt-v2v et virt-p2v ne sont pris en charge que sur les architectures AMD64 et Intel 64 et ne sont donc pas fournis sur ARM 64.

Les tableaux suivants fournissent des informations comparatives sur l'état de la prise en charge de certaines fonctionnalités de virtualisation dans RHEL 9 sur les architectures système disponibles.

Expand
Tableau 24.1. Soutien général
Intel 64 et AMD64IBM ZARM 64

Soutenu

Soutenu

Soutenu

Expand
Tableau 24.2. Branchement et débranchement à chaud de l'appareil
 Intel 64 et AMD64IBM ZARM 64

CPU hot plug

Soutenu

Soutenu

UNSUPPORTED

CPU hot unplug

UNSUPPORTED

UNSUPPORTED

UNSUPPORTED

Memory hot plug

Soutenu

UNSUPPORTED

UNSUPPORTED

Memory hot unplug

UNSUPPORTED

UNSUPPORTED

UNSUPPORTED

Peripheral device hot plug

Soutenu

Pris en charge [a]

Soutenu

Peripheral device hot unplug

Soutenu

Pris en charge [b]

Soutenu

[a] Nécessite l'utilisation de virtio-*-ccw au lieu de virtio-*-pci
[b] Nécessite l'utilisation de virtio-*-ccw au lieu de virtio-*-pci
Expand
Tableau 24.3. Autres caractéristiques sélectionnées
 Intel 64 et AMD64IBM ZARM 64

NUMA tuning

Soutenu

UNSUPPORTED

Soutenu

SR-IOV devices

Soutenu

UNSUPPORTED

Soutenu

virt-v2v and p2v

Soutenu

UNSUPPORTED

UNAVAILABLE

Notez que certaines des fonctionnalités non prises en charge sont prises en charge par d'autres produits Red Hat, tels que Red Hat Virtualization et la plate-forme Red Hat OpenStack. Pour plus d'informations, voir Fonctionnalités non prises en charge dans la virtualisation RHEL 9.

Note légale

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Retour au début
Red Hat logoGithubredditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance. Découvrez nos récentes mises à jour.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez le Blog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

Theme

© 2025 Red Hat