Comment vérifier si l'environnement est une machine virtuelle sous Linux

LinuxLinuxBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous apprendrez à déterminer si votre environnement Linux s'exécute sur une machine virtuelle. Nous allons explorer trois méthodes différentes pour y parvenir : utiliser la commande dmidecode pour inspecter les informations système, utiliser l'outil virt-what spécialement conçu pour la détection de virtualisation, et examiner les indicateurs CPU dans le fichier /proc/cpuinfo. À la fin de ce laboratoire, vous disposerez de techniques pratiques pour identifier les environnements virtualisés sous Linux.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux(("Linux")) -.-> linux/PackagesandSoftwaresGroup(["Packages and Softwares"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/BasicSystemCommandsGroup -.-> linux/man("Manual Access") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") linux/UserandGroupManagementGroup -.-> linux/sudo("Privilege Granting") linux/PackagesandSoftwaresGroup -.-> linux/apt("Package Handling") subgraph Lab Skills linux/man -.-> lab-558808{{"Comment vérifier si l'environnement est une machine virtuelle sous Linux"}} linux/cat -.-> lab-558808{{"Comment vérifier si l'environnement est une machine virtuelle sous Linux"}} linux/grep -.-> lab-558808{{"Comment vérifier si l'environnement est une machine virtuelle sous Linux"}} linux/sudo -.-> lab-558808{{"Comment vérifier si l'environnement est une machine virtuelle sous Linux"}} linux/apt -.-> lab-558808{{"Comment vérifier si l'environnement est une machine virtuelle sous Linux"}} end

Vérifier les informations système avec dmidecode

Dans cette étape, vous apprendrez à utiliser la commande dmidecode pour récupérer des informations détaillées sur le matériel de votre système. dmidecode lit les données de la table DMI/SMBIOS (Desktop Management Interface / System Management BIOS), qui contient des descriptions des composants du système.

Cette commande est incroyablement utile pour comprendre les spécificités du matériel sur lequel votre système Linux s'exécute, comme la carte mère, le processeur, la mémoire, etc.

Étant donné que l'accès à la table DMI nécessite des privilèges root, vous devrez utiliser sudo avec dmidecode.

Ouvrez votre terminal s'il n'est pas déjà ouvert. N'oubliez pas que vous pouvez trouver l'icône Xfce Terminal sur le côté gauche de votre bureau.

Maintenant, tapez la commande suivante et appuyez sur Entrée :

sudo dmidecode

Cette commande affichera une grande quantité d'informations sur le matériel de votre système. Faites défiler la sortie pour voir les différentes sections, telles que "BIOS Information", "System Information", "Base Board Information", "Processor Information", "Memory Device", etc.

La sortie peut ressembler à ceci (des parties de la sortie ont été omises pour plus de concision) :

## dmidecode 3.3
Getting SMBIOS data from sysfs.
SMBIOS 3.3.0 present.

Handle 0x0000, DMI type 0, 26 bytes
BIOS Information
        Vendor: SeaBIOS
        Version: 1.16.0-1.fc36
        Release Date: 07/07/2022
        Address: 0xE0000
        Runtime Size: 128 kB
        ROM Size: 64 kB
        Characteristics:
                PCI is supported
                BIOS is upgradeable
                BIOS shadowing is allowed
                Boot from CD is supported
                Selectable boot is supported
                BIOS ROM is socketed
                EDD is supported
                5.25" / 1.2 MB floppy services are supported (int 13h)
                3.5" / 720 kB floppy services are supported (int 13h)
                3.5" / 1.44 MB floppy services are supported (int 13h)
                8042 keyboard services are supported (int 9h)
                CGA/mono video services are supported (int 10h)
                AT/XT compatible keyboard services are supported (int 16h)
                Printer services are supported (int 17h)
                CGA/mono video is supported (int 10h)
                ACPI is supported
                USB legacy is supported
                BIOS boot specification is supported
                Targeted content distribution is supported
                UEFI is supported
        BIOS Revision: 1.16

Handle 0x0001, DMI type 1, 27 bytes
System Information
        Manufacturer: QEMU
        ProductName: Standard PC (Q35 + ICH9, 2009)
        Version: pc-q35-7.0
        Serial Number: <filtered>
        UUID: <filtered>
        Wake-up Type: Power Switch
        SKU Number: <filtered>
        Family: Virtual Machine

Handle 0x0002, DMI type 2, 17 bytes
Base Board Information
        Manufacturer: QEMU
        ProductName: Standard PC (Q35 + ICH9, 2009)
        Version: pc-q35-7.0
        Serial Number: <filtered>
        Asset Tag: <filtered>
        Features:
                Board is a hosting board
                Board is replaceable
        Location In Chassis: <filtered>
        Chassis Handle: 0x0003
        Type: Motherboard
        Contained Object Handles: 0

... (output continues)

Vous pouvez également filtrer la sortie pour voir les informations sur un type de matériel spécifique en utilisant l'option -t suivie du numéro de type ou du mot-clé. Par exemple, pour voir uniquement les informations sur le processeur, vous pouvez utiliser :

sudo dmidecode -t processor

Ou, pour voir les informations sur les dispositifs de mémoire :

sudo dmidecode -t memory

Expérimentez avec différents types comme bios, system, baseboard, chassis, etc., pour voir les détails spécifiques de chaque composant.

L'utilisation de dmidecode est une compétence fondamentale pour les administrateurs système et toute personne qui a besoin de résoudre des problèmes matériels ou simplement de comprendre la configuration du système sous-jacent.

Cliquez sur Continuer pour passer à l'étape suivante.

Détecter la virtualisation avec virt-what

Dans cette étape, vous apprendrez à déterminer si votre système Linux s'exécute dans une machine virtuelle ou sur un matériel physique (bare metal). Cela est souvent important pour la configuration du système, l'ajustement des performances ou la gestion des licences.

Nous allons utiliser la commande virt-what, qui est spécialement conçue à cet effet. Elle vérifie les signes de virtualisation et affiche les noms des hyperviseurs qu'elle détecte.

Tout d'abord, vous devez installer le paquet virt-what. Utilisez apt comme vous l'avez fait pour htop dans le laboratoire précédent.

Ouvrez votre terminal et exécutez la commande suivante pour installer virt-what :

sudo apt update
sudo apt install virt-what -y

Le drapeau -y répond automatiquement "oui" à toutes les invitations pendant l'installation, rendant le processus non interactif.

Une fois l'installation terminée, vous pouvez exécuter la commande virt-what :

virt-what

La sortie de cette commande vous indiquera si le système est virtualisé et, le cas échéant, quelle technologie de virtualisation est utilisée.

Dans l'environnement LabEx, qui s'exécute dans un environnement virtualisé, vous devriez voir une sortie similaire à ceci :

qemu
kvm

Cela indique que le système s'exécute dans une machine virtuelle QEMU/KVM. Si le système s'exécutait sur du matériel physique, virt-what ne produirait généralement aucune sortie.

Comprendre si votre système est virtualisé est une information cruciale pour de nombreuses tâches d'administration système. virt-what offre un moyen simple et fiable d'obtenir cette information.

Cliquez sur Continuer pour passer à l'étape suivante.

Inspecter les indicateurs CPU dans /proc/cpuinfo

Dans cette étape, vous allez explorer le fichier /proc/cpuinfo, qui est un fichier virtuel fourni par le noyau Linux et qui contient des informations sur le ou les processeurs de votre système. Ce fichier est une excellente source de détails sur votre processeur, notamment son modèle, sa vitesse, la taille de son cache et les fonctionnalités prises en charge (indicateurs).

Le système de fichiers /proc est un pseudo-système de fichiers qui fournit une interface aux structures de données du noyau. Les fichiers dans /proc ne sont pas stockés sur le disque, mais sont générés à la volée par le noyau lorsque vous y accédez.

Pour afficher le contenu de /proc/cpuinfo, vous pouvez utiliser un utilitaire en ligne de commande comme cat ou less. cat affichera tout le contenu dans le terminal, tandis que less vous permettra de parcourir le contenu page par page. Étant donné que /proc/cpuinfo peut être assez long, less est souvent plus pratique.

Ouvrez votre terminal et tapez la commande suivante pour afficher les informations sur le processeur en utilisant cat :

cat /proc/cpuinfo

Vous verrez des informations détaillées pour chaque cœur de processeur de votre système. La sortie inclura des lignes telles que processor, vendor_id, model name, cpu MHz, cache size et flags.

Voici un exemple de ce que vous pourriez voir (des parties de la sortie ont été omises pour plus de concision) :

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 158
model name      : Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz
stepping        : 13
microcode       : 0xffffffff
cpu MHz         : 2904.000
cache size      : 16384 KB
physical id     : 0
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 22
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves arch_capabilities
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds mmio_stale_data retbleed
bogomips        : 5808.00
clflush size    : 64
cache_alignment : 64
address sizes   : 43 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 158
model name      : Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz
stepping        : 13
microcode       : 0xffffffff
cpu MHz         : 2904.000
cache size      : 16384 KB
physical id     : 0
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 22
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves arch_capabilities
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds mmio_stale_data retbleed
bogomips        : 5808.00
clflush size    : 64
cache_alignment : 64
address sizes   : 43 bits physical, 48 bits virtual
power management:

La ligne flags est particulièrement intéressante car elle répertorie les diverses fonctionnalités et extensions prises en charge par votre processeur. Ces indicateurs indiquent des capacités telles que la prise en charge de la virtualisation (vmx ou svm), des ensembles d'instructions spécifiques (comme sse, avx) et des fonctionnalités de sécurité.

Vous pouvez également utiliser grep pour rechercher des informations spécifiques dans /proc/cpuinfo. Par exemple, pour trouver le nom du modèle :

grep "model name" /proc/cpuinfo

Cela affichera le nom du modèle pour chaque cœur de processeur :

model name      : Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz
model name      : Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz

Ou, pour vérifier la présence d'un indicateur spécifique, comme vmx (prise en charge de la virtualisation Intel VT-x) :

grep "vmx" /proc/cpuinfo

Si vmx est présent dans la sortie, votre processeur prend en charge la virtualisation Intel VT-x.

Explorer /proc/cpuinfo est un moyen fondamental de comprendre les capacités du processeur de votre système directement du point de vue du noyau.

Cliquez sur Continuer pour terminer ce laboratoire.

Résumé

Dans ce laboratoire, vous avez appris à vérifier si un environnement Linux est une machine virtuelle en utilisant plusieurs méthodes. Vous avez commencé par utiliser la commande dmidecode avec sudo pour accéder à la table DMI/SMBIOS et récupérer des informations détaillées sur le matériel du système, telles que les détails sur le BIOS, le système et le processeur. Cette commande fournit un aperçu complet des composants matériels sous-jacents.

Ensuite, vous allez explorer des techniques supplémentaires pour détecter la virtualisation, notamment en utilisant la commande virt-what et en inspectant les indicateurs CPU dans le fichier /proc/cpuinfo. Ces méthodes offrent des moyens alternatifs d'identifier la présence d'un environnement virtualisé en examinant des caractéristiques et des configurations système spécifiques.