Uma pergunta interessante. Eu entrei em um host Linux (provavelmente SuSE). Existe alguma maneira de saber por meio de programação que sou ou não um host de VM?
Suponha também que o vmtools não esteja instalado.
Uma pergunta interessante. Eu entrei em um host Linux (provavelmente SuSE). Existe alguma maneira de saber por meio de programação que sou ou não um host de VM?
Suponha também que o vmtools não esteja instalado.
Respostas:
Use ferramentas padrão do Linux para inspecionar o hardware no sistema.
cat /proc/scsi/scsi
ou
ethtool -i eth0
ou
dmidecode | grep -i vmware
Se a saída desses comandos mostrar hardware com o nome de fabricante "VMWare", você estará em uma VM VMWare. Vários comandos são fornecidos aqui porque as configurações e ferramentas do sistema diferem.
cat /proc/scsi/scsi
é bom porque parece estar disponível em qualquer lugar e não requer a instalação de um novo software ou é executado com direitos privilegiados.
/proc/scsi/scsi
na minha caixa de Debian 7 ...
man virt-what
o script heurístico criado para esse objetivo de detecção (para sistemas RedHat / Fedora) e as advertências envolvidas.
facter virtual
xenu
indica que é uma VM. Se ele retornou "físico", o oposto é verdadeiro (não uma VM), por exemplo:
facter virtual
Physical
Existe um aplicativo útil que pode ajudar chamado virt-what . Eu não o usei com o VMWare, mas funcionou bem com o Qemu.
Você pode ter uma idéia olhando ao redor /sys
. Por exemplo, /sys/class/dmi/id/sys_vendor
tem um valor de VMware, Inc.
.
Se estiver instalado, você pode usar o lshw . O comando lshw -class system
retorna isso no meu sistema:
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
Alguns ambientes virtuais nomeiam alguns de seus dispositivos virtuais com nomes um pouco reveladores, por exemplo, o VirtualBox apresentando uma placa gráfica que se autodenomina "Adaptador de vídeo VirtualBox". Mas a procura dessas ligações o leva a uma VM específica e, possivelmente, a uma gama limitada de versões.
Pode ser possível para o seu código ver que tipo de virtualização ele pode configurar. Se isso falhar completamente, você pode estar em uma VM. Mas você pode facilmente estar em uma caixa que não possui nenhum hardware compatível com VM.
Para Linux, você digita dmesg |grep DMI
:
[root @ myhost ~] # dmesg | grep DMI DMI 2.3 presente. DMI: Máquina virtual da Microsoft Corporation / máquina virtual, BIOS 090006 23/05/2012 [root @ myhost ~] # dmesg | grep -i virtual DMI: Máquina virtual da Microsoft Corporation / máquina virtual, BIOS 090006 23/05/2012 Inicializando o kernel paravirtualizado em hardware simples input: emulação de botão do mouse para Macintosh como / devices / virtual / input / input1 scsi 0: 0: 0: 0: Disco Virtual Msft de Acesso Direto 1.0 PQ: 0 ANSI: 4 input: Mouse compatível com Microsoft Vmbus HID como / devices / virtual / input / input4
[root @ backdev1 ~] # dmesg | grep DMI DMI 2.5 presente. DMI: IBM System x3650 M3 - [7945AC1] - / 90Y4784, BIOS - [D6E153AUS-1.12] - 30/06/2011
Há muito código por aí para detectar se você está em uma VM ou não. Comece com pílula vermelha e procure a partir daí. Este artigo na Offensive Computing também é uma boa leitura.
Isso se nenhum dos mais fáceis acima funcionar :)
Você também pode procurar a primeira parte do seu endereço mac aqui e ver se ele está listado como atribuído a qualquer empresa de virtualização.
Não gostei de nenhuma dessas soluções, pois geralmente há um driver de CD-ROM ou driver de memória VMware instalado, de modo que o dmesg o confirma ou nega rapidamente para mim.
[server @ user ~] $ dmesg | grep VMware hda: Unidade de CD-ROM IDE virtual VMware, unidade de CD / DVD-ROM ATAPI Fornecedor: VMware Modelo: Disco virtual Rev: 1.0 Fornecedor: VMware Modelo: Disco virtual Rev: 1.0 Fornecedor: VMware Modelo: Disco virtual Rev: 1.0 Fornecedor: VMware Modelo: Disco virtual Rev: 1.0 Fornecedor: VMware Modelo: Disco virtual Rev: 1.0 Fornecedor: VMware Modelo: Disco virtual Rev: 1.0 Fornecedor: VMware Modelo: Disco virtual Rev: 1.0 Driver de controle de memória VMware inicializado
Isso funcionou melhor para mim, pois fornece informações específicas sobre o fabricante e o nome do produto.
dmidecode -t system|grep 'Manufacturer\|Product'
Saída no servidor Dell:
Manufacturer: Dell Inc.
Product Name: PowerEdge C5220
Saída na VM do Virtualbox:
Manufacturer: innotek GmbH
Product Name: VirtualBox
Saída em KVM / QEMU:
Manufacturer: QEMU
Product Name: Standard PC (i440FX + PIIX, 1996)
Isso é ótimo para scripts que podem analisá-los para uma melhor identificação de servidores ... mas se você usar o Chef em sua infraestrutura, poderá verificar o atributo do nó Virtualization -> system
no servidor do chef.
Eu gosto muito:
hostnamectl status
ou concreto:
hostnamectl status | grep "Chassis:"
Como verificar se um sistema Linux é físico ou máquina virtual
16 métodos para verificar se um sistema Linux é uma máquina física ou virtual