VMware Linux Server - comment savoir si vous êtes un vm ou un matériel réel?

46

Une question intéressante. Je me suis connecté à un hôte Linux (probablement SuSE). Existe-t-il un moyen de dire par programme que je suis un hôte VM ou non?

Supposez également que les vmtools ne sont pas installés.

mdpc
la source
Vérifiez également cette réponse: unix.stackexchange.com/a/32605/103980
Muhamed Huseinbašić

Réponses:

29

Utilisez les outils Linux standard pour inspecter le matériel sur le système.

cat /proc/scsi/scsi

ou

ethtool -i eth0

ou

dmidecode | grep -i vmware

Si la sortie de ces commandes indique du matériel portant le nom de fabricant "VMWare", vous êtes sur une machine virtuelle VMWare. Plusieurs commandes sont fournies ici car la configuration du système et les outils diffèrent.

Greg Cain
la source
12
Pouvez-vous expliquer ce que font ces commandes, au lieu de ne fournir que des commandes vagues?
Stefan Lasiewski
Merci. cat /proc/scsi/scsiC'est bien, car il semble être disponible partout et ne nécessite pas d'installer un nouveau logiciel ou de fonctionner avec des droits privilégiés.
Tiktak
@tiktak je ne vois pas /proc/scsi/scsisur ma boîte Debian 7 ...
Kyle Strand
1
Notez que ce n'est pas fiable à 100%. Par exemple, les boîtes AWS ne sembleront pas être des ordinateurs virtuels. Voir man virt-whatpour le script heuristique construit à cette fin de détection (pour les systèmes RedHat / Fedora) et pour les mises en garde impliquées.
Wildcard
13
facter virtual 
xenu

indique qu'il s'agit d'une machine virtuelle. Si elle est retournée «physique», l'inverse est vrai (pas une VM), par exemple:

facter virtual
Physical
utilisateur155575
la source
Cependant, il s’agit d’un forfait spécial non standard ... mais j’aime bien.
Mdpc
1
@ mdpc Il devrait être présent sur tout système utilisant marionnette.
Michael Hampton
11

Il existe une application pratique qui pourrait aider, appelée virt-what . Je ne l'ai pas utilisé avec VMWare, mais cela a bien fonctionné avec Qemu.

Raynet
la source
1
Malheureusement, le RPM binaire a deux dépendances, dmidecode et util-linux-ng lorsqu’il est essayé sur SuSE.
MDPC
10

Vous pourriez peut-être avoir une idée en regardant autour de vous /sys. Par exemple /sys/class/dmi/id/sys_vendora une valeur de VMware, Inc..

S'il est installé, vous pouvez utiliser lshw . La commande lshw -class systemrenvoie ceci sur mon système:

server1
    description: Computer
    product: VMware Virtual Platform
    vendor: VMware, Inc.
    version: None
    serial: VMware-...
    width: 64 bits
    capabilities: smbios-2.4 dmi-2.4 vsyscall64 vsyscall32
Zoredache
la source
Sur les instances de SuSE auxquelles j'ai accès, lshw n'existe pas. De plus, le fichier / sys / class / dmi / ... n'existe pas.
MDPC
6

Certains environnements virtuels attribuent des noms un peu révélateurs à certains de leurs périphériques virtuels, par exemple VirtualBox présentant une carte graphique qui s'appelle elle-même "Adaptateur d'affichage VirtualBox". Mais rechercher ces liens vous lie à une machine virtuelle particulière et éventuellement à un nombre réduit de versions.

Votre code pourrait peut-être voir quel type de virtualisation il pourrait mettre en place. Si cela échoue complètement, vous pourriez être dans une VM. Mais vous pourriez aussi facilement être sur une boîte qui n’a aucun matériel capable de VM.

staticsan
la source
Votre première réponse était la bonne. Vérifiez les noms de pilote de périphérique.
Izzy
4

Pour Linux, vous tapez dmesg |grep DMI:

SORTIE HÔTE VIRTUELLE

[root @ myhost ~] # dmesg | grep DMI
DMI 2.3 présent.
DMI: Machine virtuelle Microsoft Corporation / Machine virtuelle, BIOS 090006 23/05/2012

[root @ myhost ~] # dmesg | grep -i virtuel
DMI: Machine virtuelle Microsoft Corporation / Machine virtuelle, BIOS 090006 23/05/2012
Lancement du noyau paravirtualisé sur du matériel nu
input: émulation du bouton de la souris Macintosh sous / devices / virtual / input / input1
SCSI 0: 0: 0: 0: Disque virtuel MSFT à accès direct 1.0 PQ: 0 ANSI: 4
entrée: souris compatible Microsoft Vmbus HID en tant que / devices / virtual / input / input4

PAR EXEMPLE D'HÔTE PHYSIQUE

[root @ backdev1 ~] # dmesg | grep DMI
DMI 2.5 présent.
DMI: IBM System x3650 M3 - [7945AC1] - / 90Y4784, BIOS - [D6E153AUS-1.12] - le 30/06/2011
utilisateur215983
la source
1
Un problème majeur de votre solution est que dmesg lit le tampon du noyau et qu’il a une taille limitée. S'il y a beaucoup de messages ou un peu de temps depuis le redémarrage du système, ces informations ne seront pas disponibles.
MDPC
4

Il y a beaucoup de code pour détecter si vous êtes dans une VM ou non. Commencez avec la pilule rouge et cherchez à partir de là. Cet article chez Offensive Computing est également une bonne lecture.

C'est si aucune de ces choses faciles ci-dessus ne fonctionne :)

Bill Weiss
la source
Le premier lien est cassé. La seconde est soit cassée soit lente.
Wildcard
Vous avez raison. Les sables du temps les ont mangés ... Je vais voir si je peux trouver des liens alternatifs.
Bill Weiss
C'est dommage; "pilule rouge" semblait intéressant. :)
Wildcard
1
Mis à jour avec des liens archive.org.
Bill Weiss
3

Vous pouvez également rechercher la première partie de votre adresse MAC ici et voir si elle est répertoriée comme étant attribuée à l'une des sociétés de virtualisation.

Zypher
la source
Idée intéressante .... Je pense que cela fonctionne (tant qu'un périphérique réseau est inclus dans la VM ;-))
mdpc
2
Ne sera pas fiable. Dans de nombreux cas, le mac peut être défini sur une valeur arbitraire. Ceci permet d'activer le clonage du mac de la machine d'origine lors de la conversion en VM. Certains logiciels associent leur licence au Mac et il est souvent impossible d’obtenir une nouvelle licence (le fournisseur a fait faillite ou les coûts sont prohibitifs).
Tonny
3

Les périphériques virtuels seront également révélés par lspci et / ou les informations de périphérique de disque dans / proc:

lspci | grep -i vmware

grep -i vmware /proc/scsi/scsi /proc/ide/*/model
Bruyère
la source
2

Sous Linux, les informations système sont révélées dans / sys / devices / virtual / dmi / id /. Voir ma réponse ici pour un script pratique pour vous montrer toutes les informations disponibles.

racine non requise.

Mike S
la source
1

Je n'aimais aucune de ces solutions, car il y a généralement un pilote de CD-ROM VMware ou un pilote de mémoire installé, donc dmesg me le confirme ou le refuse rapidement.

[serveur @ utilisateur ~] $ dmesg | grep VMware
hda: lecteur de CD-ROM VMware Virtual IDE, lecteur de CD / DVD-ROM ATAPI
Fournisseur: VMware Modèle: Disque virtuel Rév: 1.0
Fournisseur: VMware Modèle: Disque virtuel Rév: 1.0
Fournisseur: VMware Modèle: Disque virtuel Rév: 1.0
Fournisseur: VMware Modèle: Disque virtuel Rév: 1.0
Fournisseur: VMware Modèle: Disque virtuel Rév: 1.0
Fournisseur: VMware Modèle: Disque virtuel Rév: 1.0
Fournisseur: VMware Modèle: Disque virtuel Rév: 1.0
Pilote de contrôle de la mémoire VMware initialisé
Greg
la source
3
Cela fonctionnera au démarrage, mais plus tard, vous ne pouvez pas garantir que dmesg n'a pas été effacé ni débordé.
Mattdm
C'est ce que je fais aussi d'habitude, c'est grepping dmesg
tpaul
1

Cela a mieux fonctionné pour moi car cela me donne des informations spécifiques sur le fabricant et le nom du produit.

dmidecode -t system|grep 'Manufacturer\|Product'

Sortie sur le serveur Dell:

Manufacturer: Dell Inc.
Product Name: PowerEdge C5220

Sortie sur la machine virtuelle Virtualbox:

Manufacturer: innotek GmbH
Product Name: VirtualBox

Sortie sur KVM / QEMU:

Manufacturer: QEMU
Product Name: Standard PC (i440FX + PIIX, 1996)

C'est très bien pour les scripts qui peuvent les analyser pour une meilleure identification des serveurs ... mais si vous utilisez Chef dans votre infrastructure, vous pouvez vérifier l'attribut du nœud Virtualization -> systemdans le serveur Chef.

utilisateur751528
la source