Matériel, Hardware

Linux : Détecter la plateforme de virtualisation utilisée

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières

virtualisation-logo



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 virt-what



Installation de virt-what



virt-what est un script shell qui va détecter 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


Et c'est tout !

Utilisation de virt-what



Pour utiliser l'outil, il n'y a pas d'options particulières.
Il suffit de lancer la commande :

Code BASH :
virt-what


Il est nécessaire d'être root pour lancer le script.

Si la commande ne retourne rien : vous êtes 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



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


Contrairement à virt-what, il n'est pas nécessaire d'être root pour lancer le script.

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