Linux : Détecter la plateforme de virtualisation utilisée
Table des matières
Il peut être utile de savoir si le système fonctionne sur une machine virtuelle ou non.
Dans le cas de scripts, cela peut être utile pour optimiser les performances du système, en installant par exemple des outils invité.
Dans cet article, nous allons voir comment utiliser les outils de systemd et/ou virt-what qui répondent à ce besoin.
Ces outils sont tout en un.
On le sait tous, systemd fait beaucoup de choses et il sait détecter aussi si le système est installé sur une machine physique ou dans une machine virtuelle !
Il sait détecter l'hyperviseur dans le second cas.
Vu que c'est inclus dans systemd, il n'est pas nécessaire d'installer d'outils supplémentaires. Le seul prérequis est que votre système utilise systemd.
C'est donc le cas pour :
- Red Hat Enterprise Linux 7 et plus et ses dérivées
- Fedora depuis de nombreuses années
- Ubuntu depuis 16.04 LTS et dérivées
- Debian depuis 8 et dérivées
La commande à invoquer est la suivante :
Si on est dans une machine physique, l'outil renvoie :
Si on est dans un conteneur LXC, l'outil renvoie :
Si on est dans une machine virtuelle, le script nous renvoie la platrforme virtuelle utilisée.
VMware (ESXi, VxRail) :
Xen (XCP-ng) :
Proxmox, Libvirt :
Microsoft Hyper-V :
Virtualbox :
Plus de valeurs indiquées dans la page de manuel de systemd-detect-virt :
Voici un petit bout de code utilisable par exemple pour Fedora ou Red Hat Enterprise Linux pour installer par exemple les additions-invité en fonction de la plateforme de virtualisation utilisée:
Si notre système n'utilise pas systemd, on pourra utiliser virt-what qui est un script shell permettant la détection de la plateforme virtuelle sur laquelle on est.
Avant de pouvoir l'utiliser, il suffit de l'installer.
Fedora, Red Hat et dérivées :
Debian, Ubuntu et dérivées :
Gentoo et dérivées :
La commande à invoquer est la suivante :
Si la commande ne retourne rien : on est sur une machine physique.
Si on est dans un conteneur LXC, l'outil renvoie :
Si on est dans une machine virtuelle, le script nous renvoie la platrforme virtuelle utilisée.
VMware (ESXi, VxRail) :
Xen (XCP-ng) :
Proxmox, Libvirt :
Microsoft Hyper-V :
Virtualbox :
Plus de valeurs indiquées dans la page de manuel de virt-what :
Voici un petit bout de code utilisable par exemple pour Fedora ou Red Hat Enterprise Linux pour installer par exemple les additions-invité en fonction de la plateforme de virtualisation utilisée:
Introduction
Il peut être utile de savoir si le système fonctionne sur une machine virtuelle ou non.
Dans le cas de scripts, cela peut être utile pour optimiser les performances du système, en installant par exemple des outils invité.
Dans cet article, nous allons voir comment utiliser les outils de systemd et/ou virt-what qui répondent à ce besoin.
Ces outils sont tout en un.
Méthode avec systemd via systemd-detect-virt
On le sait tous, systemd fait beaucoup de choses et il sait détecter aussi si le système est installé sur une machine physique ou dans une machine virtuelle !
Il sait détecter l'hyperviseur dans le second cas.
Vu que c'est inclus dans systemd, il n'est pas nécessaire d'installer d'outils supplémentaires. Le seul prérequis est que votre système utilise systemd.
C'est donc le cas pour :
- Red Hat Enterprise Linux 7 et plus et ses dérivées
- Fedora depuis de nombreuses années
- Ubuntu depuis 16.04 LTS et dérivées
- Debian depuis 8 et dérivées
La commande à invoquer est la suivante :
Code BASH :
systemd-detect-virt
Si on est dans une machine physique, l'outil renvoie :
Code TEXT :
none
Si on est dans un conteneur LXC, l'outil renvoie :
Code TEXT :
lxc
Si on est dans une machine virtuelle, le script nous renvoie la platrforme virtuelle utilisée.
VMware (ESXi, VxRail) :
Code TEXT :
vmware
Xen (XCP-ng) :
Code TEXT :
xen
Proxmox, Libvirt :
Code TEXT :
kvm
Microsoft Hyper-V :
Code TEXT :
microsoft
Virtualbox :
Code TEXT :
oracle
Plus de valeurs indiquées dans la page de manuel de systemd-detect-virt :
Code BASH :
man systemd-detect-virt
Voici un petit bout de code utilisable par exemple pour Fedora ou Red Hat Enterprise Linux pour installer par exemple les additions-invité en fonction de la plateforme de virtualisation utilisée:
Code BASH :
VMTYPE=$(systemd-detect-virt) if [[ "$VMTYPE" = "kvm" ]] then dnf install qemu-guest-agent -y > /dev/null systemctl enable --now qemu-guest-agent.service > /dev/null fi if [[ "$VMTYPE" = "vmware" ]] then dnf install open-vm-tools -y > /dev/null systemctl enable --now vmtoolsd.service > /dev/null fi
Méthode avec virt-what
Si notre système n'utilise pas systemd, on pourra utiliser virt-what qui est un script shell permettant la détection de la plateforme virtuelle sur laquelle on est.
Avant de pouvoir l'utiliser, il suffit de l'installer.
Fedora, Red Hat et dérivées :
Code BASH :
dnf install virt-what
Debian, Ubuntu et dérivées :
Code BASH :
apt install virt-what
Gentoo et dérivées :
Code BASH :
emerge -av app-emulation/virt-what
La commande à invoquer est la suivante :
Code BASH :
virt-what
Si la commande ne retourne rien : on est sur une machine physique.
Si on est dans un conteneur LXC, l'outil renvoie :
Code TEXT :
lxc
Si on est dans une machine virtuelle, le script nous renvoie la platrforme virtuelle utilisée.
VMware (ESXi, VxRail) :
Code TEXT :
vmware
Xen (XCP-ng) :
Code TEXT :
xen
Proxmox, Libvirt :
Code TEXT :
kvm
Microsoft Hyper-V :
Code TEXT :
hyperv
Virtualbox :
Code TEXT :
virtualbox
Plus de valeurs indiquées dans la page de manuel de virt-what :
Code BASH :
man virt-what
Voici un petit bout de code utilisable par exemple pour Fedora ou Red Hat Enterprise Linux pour installer par exemple les additions-invité en fonction de la plateforme de virtualisation utilisée:
Code BASH :
VMTYPE=$(virt-what) if [[ "$VMTYPE" = "kvm" ]] then dnf install qemu-guest-agent -y > /dev/null systemctl enable --now qemu-guest-agent.service > /dev/null fi if [[ "$VMTYPE" = "vmware" ]] then dnf install open-vm-tools -y > /dev/null systemctl enable --now vmtoolsd.service > /dev/null fi