J'ai un accès en ligne de commande à une machine Linux virtualisée ou non. Je souhaite déterminer le type de technologie de virtualisation sur laquelle il s'exécute, le cas échéant (VMWare, VirtualBox, KVM, OpenVZ, Xen,). Ce n'est pas un environnement hostile: je n'essaie pas de travailler contre une machine virtuelle qui tente de se dissimuler, je diagnostique un serveur floconneux que je connais peu.
Plus précisément, j'aide quelqu'un à diagnostiquer le problème, je ne suis pas assis à la barre. Je dois donc transmettre des instructions telles que «copier-coller cette commande» et non «fouiller /proc
quelque part». Idéalement, ce serait quelque chose comme lshw
: une commande facile à installer (si non préinstallée) qui permet de fouiller et d’imprimer les informations pertinentes.
Quel est le moyen le plus simple de déterminer la technologie de virtualisation utilisée par ce système? J'apprécierais si les propositions mentionnées quelles technologies (y compris le matériel nu) peuvent être détectées de manière concluante et lesquelles peuvent être éliminées de manière définitive. Je suis surtout intéressé par Linux, mais si cela fonctionne aussi pour d'autres unités, c'est bien.
Réponses:
dmidecode -s system-product-name
J'ai testé sur VMware Workstation, VirtualBox, QEMU avec KVM, QEMU autonome avec Ubuntu comme système d'exploitation invité. D'autres ont ajouté des plates-formes supplémentaires qu'ils connaissent bien.
Technologies de virtualisation
VMware Workstation
VirtualBox
Qemu avec KVM
Qemu (émulé)
Microsoft VirtualPC
Virtuozzo
Xen
On bare metal, renvoie une identification du modèle d'ordinateur ou de carte mère.
/dev/disk/by-id
Si vous ne possédez pas les droits nécessaires,
dmidecode
vous pouvez utiliser:Technologie de virtualisation: QEMU
Sortie
Références
la source
Virtual Machine
pourdmidecode -s system-product-name
. Il n’ya rien d’évident sous / dev / disk / by-id non plus. facter semble détecter hyperv en regardant la sortie de lspci./proc/user_beancounters
/proc/user_beancounters
plus d'OpenVZ qui est probablement sur les VPS bon marché par exemple.dmidecode
et/dev/disk/by-id
solutions échouent dans un récipient Docker. Voir unix.stackexchange.com/a/257207/106572dmidecode -s system-product-name
renvoie une description matérielle générique à la place du "KVM" ou des "Bochs" indiqués ci-dessus. Pour moi, cette chaîne estStandard PC (i440FX + PIIX, 1996)
.dmidecode -s system-manufacturer
renvoie la chaîne beaucoup moins génériqueQEMU
. Puisque qemu permet de fournir des données DMI, je soupçonne que dmidecode est relativement facile à tromper, quel que soit le champ en cours de lecture.Si le conteneur est en cours d'exécution
systemd
:Sur KVM par exemple, il retourne:
et sur un hôte non virtualisé:
Voir également:
la source
kvm
pour Google Compute Engine, ce que j’essayais de comprendre. Merci!Méthode souhaitable
lshw
Cette commande produit la sortie suivante sur différents invités de technologie VM.
Sortie
KVM
Virtual Box
VMWare
Scripting
Si vous êtes sur Ubuntu / Debian, le paquet
open-vm-tools
peut être installé. Il fournitvmware-checkvm
. Il ne retourne qu'un chiffre. Un0
signifie que c'est une machine virtuelle,1
c'est un système physique.Méthodes moins souhaitables
Si c'est KVM, les options
/proc/scsi/scsi
etethtool
apparaissent comme suit:SCSI
ethtool
Virtio_net fait partie de KVM. Le
/proc/scsi/scsi
vous indique que vous êtes dans une machine virtuelle et que vous êtes probablement KVM.dmesg
En utilisant les commandes suivantes
grep
viadmesg
log.VMWare
QEmu ou KVM
Si l'
"-cpu host"
option n'a pas été utilisée, QEmu et KVM s'identifieront comme suit:sinon, les informations de la CPU de l'hôte seront utilisées à la fois dans
dmesg
ou dans/proc/cpuinfo
. Cependant, vous devriez voir quelque chose comme:Dans les nouveaux noyaux qui comprennent qu'ils fonctionnent sous paravirtualisation.
Microsoft VirtualPC
Xen
Virtuozzo
Références
la source
lshw -class system
etdmidecode
correspond exactement à ce que j'espérais trouver.lshw
sortie pour ces plates-formes. Donnez-moi quelques minutes et je mettrai à jour le A.Le
virt-what
script semble bien couvrir la plupart des cas ...Je fais comme le déni de responsabilité des auteurs:
La plupart du temps, l’utilisation de ce programme n’est pas la bonne chose à faire. Au lieu de cela, vous devez détecter les fonctionnalités spécifiques que vous souhaitez réellement utiliser.
Il est apparu sur mes systèmes EL5 et EL6 au cours des dernières années dans le cadre d'installations par défaut. Ubuntu l'a, et le source est aussi disponible.
Les faits détectés par le script sont répertoriés ici , mais peuvent facilement être étendus pour les cas extrêmes.
la source
Ce sont les tests que nous utilisons dans mon entreprise.
la source
Si vous avez la personne que vous aidez à installer
facter
, vous pouvez le faireAucun accès root nécessaire.
Invité Debian sur l'hôte Debian:
Je ne peux pas garantir que cela fonctionnerait bien avec Xen / KVM / Qemu ...
la source
hostnamectl
est votre ami (nécessitesystemd
).Quelques exemples:
Ordinateur portable sans virtualisation
Xen
OpenVZ
KVM
la source
Virtualization: oracle
je n’ai pas installé de paravirtualisation | Ajout d'invités VirtualboxDans les noyaux Linux "récents", le noyau détecte l'hyperviseur pour vous et imprime un message facilement disponible avec
dmesg
. Cela vous dira simplement:Par exemple:
En ce qui concerne ce que "récent" signifie, je ne sais pas dans quelle version de noyau il a été officiellement publié, mais le commit qui a introduit cette fonctionnalité dans la base de code date du 7 mai 2010. Voir ici .
la source
dmesg
remplit une mémoire tampon de taille fixe avec toutes sortes de choses. C'est complètement inapproprié pour cette tâche. Voir unix.stackexchange.com/a/257207/106572Pour VirtualBox, vous pourriez
lspci | grep -i virtualbox
, cela donne:Alternativement,
dmidecode -s system-product-name
(comme @Rahul Patil le suggère) est encore plus direct (mais nécessite une racine):Pour QEMU non-KVM,
dmidecode -s system-product-name
Bochs est confus, maisdmesg | grep -i qemu
fonctionne (les périphériques de stockage émulés par QEMU ont généralement le nomQEMU HARDDISK
,QEMU DVD-ROM
etc.).la source
Parfois c'est délicat :)
la source
systemd-detect-virt
Cela détectera le type de technologie de virtualisation utilisée et l’enverra.
Distinguer la virtualisation de machine et la virtualisation de conteneur
Utilisez les options
--container
et--vm
pour limiter le type de virtualisation détecté.Codes de sortie
Si vous voulez simplement savoir si la virtualisation est détectée ou non, sans les détails, il est alors plus facile de vérifier le code de sortie. Il renverra le code de sortie 0 si la virtualisation est détectée et différent de zéro sinon.
la source
Apparemment, la virtualisation comporte plusieurs parties - dans mon cas, QEMU, Bochs et KVM (puis Ubuntu 14.04). J'ai trouvé le moyen le plus simple de découvrir l'hyperviseur utilisé:
ce qui dans mon cas a simplement renvoyé
kvm
les informations de base que je recherchais (également le PO, je pense), car il me dit ce que je suis autorisé à faire (par exemple, exécuter ipset pour bloquer une attaque DDoS) et comment les ressources sont partagées entre les VM .En plus j'ai essayé
et
Aucun de ceux-ci ne mentionnant KVM, mais ils m'ont tous les deux informé que mon émulation matérielle avait été fournie,
Bochs
ce dont j'avoue ne pas avoir entendu parler, mais une recherche rapide a révélé des informations intéressantes ( http://en.wikipedia.org/wiki/ Bochs ). La commande lshw est légèrement plus informative que dmidecode (par exemple, elle me dit que c'est 64 bits).Les autres réponses ne me disaient rien d'utile, elles
facter virtual
revenaientphysical
etls -1 /dev/disk/by-id/
renvoyaient,ata-QEMU_DVD-ROM_QM00003
ce qui montre que QEMU est impliqué, mais je n'ai pas accès au DVD-ROM émulé de toute façon.la source
Debian est livré avec ce petit paquet pour détecter le type de virtualisation:
et un peu plus gros à cause des dépendances Perl:
Comme d'habitude:
la source