Tengo acceso de línea de comando a una máquina Linux que puede o no ser virtualizada. Quiero determinar en qué tipo de tecnología de virtualización se ejecuta, si hay alguna (VMWare, VirtualBox, KVM, OpenVZ, Xen,). Este no es un entorno hostil: no estoy tratando de trabajar contra una máquina virtual que está tratando de disfrazarse, estoy diagnosticando un servidor inestable del que sé poco.
Más precisamente, estoy ayudando a alguien a diagnosticar el problema, no estoy sentado al timón. Así que tengo que transmitir instrucciones como "copiar y pegar este comando" y no "hurgar en /procalguna parte". Idealmente, sería algo así como lshw: un comando fácilmente instalable (si no está preinstalado) que hace la búsqueda e imprime información relevante.
¿Cuál es la forma más fácil de determinar de qué tecnología de virtualización puede ser invitado este sistema? Agradecería que las propuestas mencionaran qué tecnologías (incluido el hardware desnudo) pueden detectarse de manera concluyente y cuáles pueden eliminarse de manera concluyente. Estoy principalmente interesado en Linux, pero si también funciona para otros dispositivos, está bien.

Respuestas:
dmidecode -s system-product-nameHe probado en Vmware Workstation, VirtualBox, QEMU con KVM, QEMU independiente con Ubuntu como SO huésped. Otros han agregado plataformas adicionales con las que también están familiarizados.
Tecnologías de virtualización
VMware Estación de trabajo
VirtualBox
Qemu con KVM
Qemu (emulado)
Microsoft VirtualPC
Virtuozzo
Xen
En metal desnudo, esto devuelve una identificación del modelo de computadora o placa base.
/dev/disk/by-idSi no tiene los derechos para ejecutar
dmidecode, puede usar:Tecnología de virtualización: QEMU
Salida
Referencias
fuente
Virtual Machineparadmidecode -s system-product-name. Tampoco hay nada obvio en / dev / disk / by-id. Facter parece detectar hyperv mirando la salida de lspci./proc/user_beancounters/proc/user_beancountersmás de OpenVZ, lo que probablemente sea un VPS barato como ejemplo.dmidecodey las/dev/disk/by-idsoluciones fallan en un contenedor Docker. Ver unix.stackexchange.com/a/257207/106572dmidecode -s system-product-namedevuelve una descripción genérica de hardware en lugar del "KVM" o "Bochs" que se muestran arriba. Para mí, esta cadena esStandard PC (i440FX + PIIX, 1996).dmidecode -s system-manufacturerdevuelve la cadena mucho menos genéricaQEMU. Dado que qemu permite que se proporcionen datos DMI, sospecho que dmidecode es relativamente fácil de engañar, sin importar el campo que se lea.Si el contenedor se está ejecutando
systemd:En KVM, por ejemplo, devuelve:
y en un host no virtualizado:
Ver también:
fuente
kvmpara Google Compute Engine, que es lo que estaba tratando de resolver. ¡Gracias!Método deseable
lshw
Este comando produce el siguiente resultado en invitados de tecnología VM variados.
Salida
KVM
Caja virtual
VMWare
Scripting
Si estás en Ubuntu / Debian, hay un paquete que
open-vm-toolsse puede instalar. Proporcionavmware-checkvm. Solo devuelve un dígito. A0significa que es una VM,1significa que es un sistema físico.Métodos menos deseables
Si es KVM, las opciones
/proc/scsi/scsiy seethtoolmuestran de la siguiente manera:SCSI
ethtool
El virtio_net es parte de KVM. El
/proc/scsi/scsite dice que estás en una VM, y que probablemente eres KVM.dmesg
Usando los siguientes comandos
grep'a través deldmesgregistro.VMWare
QEmu o KVM
Si la
"-cpu host"opción no se ha utilizado, QEmu y KVM se identificarán como:de lo contrario, la información de la CPU del host se usará tanto en
dmesgcomo en/proc/cpuinfo. Sin embargo, debería ver algo como:En núcleos más nuevos que entienden que se están ejecutando bajo paravirtualización.
Microsoft VirtualPC
Xen
Virtuozzo
Referencias
fuente
lshw -class systemydmidecodees exactamente lo que esperaba encontrar.lshwsalida también para esas plataformas. Dame un par de minutos y actualizaré el A.El
virt-whatguión parece cubrir bien la mayoría de los casos ...Yo hago como el descargo de responsabilidad de los autores:
La mayoría de las veces, usar este programa es algo incorrecto. En su lugar, debe detectar las características específicas que realmente desea utilizar.
Apareció en mis sistemas EL5 y EL6 durante los últimos años como parte de las instalaciones predeterminadas. Ubuntu lo tiene, y la fuente también está disponible.
Los hechos detectados por el script se enumeran aquí , pero pueden ampliarse fácilmente para casos extremos.
fuente
Esas son las pruebas que utilizamos en mi empresa.
fuente
Si obtiene la persona que está ayudando a instalar
facter, puede hacerloNo se necesita acceso de root.
Invitado de Debian en el host de Debian:
No puedo garantizar cuán bien funcionaría esto con Xen / KVM / Qemu ...
fuente
hostnamectles tu amigo (requieresystemd)Algunos ejemplos:
Laptop sin ninguna virtualización
Xen
OpenVZ
KVM
fuente
Virtualization: oracleindependientemente de que no haya instalado ninguna paravirtualización | Adiciones de invitados de VirtualboxEn los núcleos "recientes" de Linux, el núcleo detecta el hipervisor por usted e imprime un mensaje que está fácilmente disponible
dmesg. Esto te dirá simplemente:Por ejemplo:
En cuanto a lo que significa "reciente", no estoy claro en qué versión del kernel se lanzó oficialmente, pero el compromiso que introdujo esta característica en la base del código fue el 7 de mayo de 2010. Vea aquí .
fuente
dmesgllena un búfer de anillo de tamaño fijo con todo tipo de cosas. Es completamente inapropiado para esta tarea. Ver unix.stackexchange.com/a/257207/106572Para VirtualBox, podría
lspci | grep -i virtualbox, eso da:Alternativamente,
dmidecode -s system-product-name(como sugiere @Rahul Patil) es aún más directo al punto (pero necesita root):Para QEMU no KVM,
dmidecode -s system-product-namedevuelve Bochs de manera confusa, perodmesg | grep -i qemufunciona (los dispositivos de almacenamiento que emula QEMU generalmente tienen el nombreQEMU HARDDISK,QEMU DVD-ROMetc.).fuente
A veces es complicado :)
fuente
systemd-detect-virt
Esto detectará el tipo de tecnología de virtualización utilizada y la generará.
Distinguir entre virtualización de máquinas y virtualización de contenedores
Use las opciones
--containery--vmpara limitar el tipo de virtualización que se detecta.Códigos de salida
Si solo desea saber si se detecta la virtualización o no, sin los detalles, entonces es más fácil verificar el código de salida. Devolverá el código de salida 0 si se detecta virtualización y, de lo contrario, no será cero.
fuente
Aparentemente, la virtualización viene en varias partes, en mi caso QEMU, Bochs y KVM (luego Ubuntu 14.04). Encontré que la forma más fácil de descubrir el hipervisor en uso era:
que en mi caso devolvió simplemente
kvmcuál era la información básica que estaba buscando (también el OP, creo), porque me dice lo que tengo permitido hacer (por ejemplo, ejecutar ipset para bloquear un ataque DDoS) y cómo se comparten los recursos entre las máquinas virtuales .Además lo intenté
y
ninguno de los cuales menciona KVM, pero ambos me informaron que mi emulación de hardware fue proporcionada por
Bochslo que confieso que ni siquiera había oído hablar, pero una búsqueda rápida arrojó información interesante ( http://en.wikipedia.org/wiki/ Bochs ). El comando lshw es un poco más informativo que dmidecode (por ejemplo, me dice que es de 64 bits).Las otras respuestas realmente no me dijeron nada útil:
facter virtualsolo regresaronphysicalyls -1 /dev/disk/by-id/regresaron, loata-QEMU_DVD-ROM_QM00003que muestra que QEMU está involucrado, pero de todos modos no tengo acceso al DVD-ROM emulado.fuente
Debian viene con este pequeño paquete para detectar el tipo de virtualización:
y un poco más grande debido a las dependencias de Perl:
Como siempre corre:
fuente