Интересный вопрос. Я вошел в систему Linux (скорее всего, SuSE). Есть ли способ, которым я могу программно определить, являюсь ли я хостом виртуальной машины или нет?
Также предположим, что vmtools не установлены.
Используйте стандартные инструменты Linux для проверки оборудования в системе.
cat /proc/scsi/scsi
или
ethtool -i eth0
или
dmidecode | grep -i vmware
Если выходные данные этих команд показывают оборудование с именем производителя «VMWare», вы используете виртуальную машину VMWare. Здесь представлено несколько команд, потому что конфигурации системы и инструменты различаются.
facter virtual
xenu
указывает, что это ВМ. Если он вернул «физический», то верно обратное (не виртуальная машина), например:
facter virtual
Physical
Вы могли бы получить представление, посмотрев вокруг под /sys
. Например /sys/class/dmi/id/sys_vendor
имеет ценность VMware, Inc.
.
Если он установлен, вы можете использовать lshw. Команда lshw -class system
возвращает это в моей системе:
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
Есть удобное приложение, которое может помочь под названием вирт-что. Я не использовал его с VMWare, но он отлично работал с Qemu.
Некоторые виртуальные среды называют некоторые из своих виртуальных устройств названиями, которые немного говорят о них, например, VirtualBox представляет графическую карту, которая называет себя «VirtualBox Display Adapter». Но их поиск привязывает вас к конкретной виртуальной машине и, возможно, к узкому диапазону версий.
Ваш код может увидеть, какой тип виртуализации он может настроить. Если это полностью не удается, возможно, вы находитесь на виртуальной машине. Но вы так же легко можете оказаться в коробке, в которой нет оборудования, поддерживающего виртуальную машину.
Для Linux вы вводите dmesg |grep DMI
:
[root@myhost ~]# dmesg |grep DMI DMI 2.3 present. DMI: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS 090006 05/23/2012 [root@myhost ~]# dmesg |grep -i virtual DMI: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS 090006 05/23/2012 Booting paravirtualized kernel on bare hardware input: Macintosh mouse button emulation as /devices/virtual/input/input1 scsi 0:0:0:0: Direct-Access Msft Virtual Disk 1.0 PQ: 0 ANSI: 4 input: Microsoft Vmbus HID-compliant Mouse as /devices/virtual/input/input4
[root@backdev1 ~]# dmesg |grep DMI DMI 2.5 present. DMI: IBM System x3650 M3 -[7945AC1]-/90Y4784, BIOS -[D6E153AUS-1.12]- 06/30/2011
Там много кода, чтобы определить, находитесь ли вы в виртуальной машине или нет. Начать с красная таблетка и ищите оттуда. Эта статья в Offensive Computing тоже хорошее чтение.
Вот если ни один из этих простых способов не работает :)
Вы также можете выполнить поиск по первой части вашего Mac-адреса Вот и посмотрите, указан ли он как назначенный какой-либо из компаний виртуализации.
Виртуальные устройства также будут отображаться с помощью lspci и / или информации о дисковом устройстве в / proc:
lspci | grep -i vmware
grep -i vmware /proc/scsi/scsi /proc/ide/*/model
В Linux системная информация отображается в / sys / devices / virtual / dmi / id /. Смотрите мой ответ Вот для удобного скрипта, который покажет вам всю доступную информацию.
рут не требуется.
Мне не нравилось ни одно из этих решений, поскольку обычно там установлен драйвер CDROM VMware или драйвер памяти, поэтому dmesg быстро подтверждает или опровергает его.
[server@user ~]$ dmesg |grep VMware hda: VMware Virtual IDE CDROM Drive, ATAPI CD/DVD-ROM drive Vendor: VMware Model: Virtual disk Rev: 1.0 Vendor: VMware Model: Virtual disk Rev: 1.0 Vendor: VMware Model: Virtual disk Rev: 1.0 Vendor: VMware Model: Virtual disk Rev: 1.0 Vendor: VMware Model: Virtual disk Rev: 1.0 Vendor: VMware Model: Virtual disk Rev: 1.0 Vendor: VMware Model: Virtual disk Rev: 1.0 VMware memory control driver initialized
Это сработало для меня лучше, поскольку дает мне конкретную информацию о производителе и названии продукта.
dmidecode -t system|grep 'Manufacturer\|Product'
Вывод на сервер Dell:
Manufacturer: Dell Inc.
Product Name: PowerEdge C5220
Вывод на виртуальную машину Virtualbox:
Manufacturer: innotek GmbH
Product Name: VirtualBox
Вывод на KVM / QEMU:
Manufacturer: QEMU
Product Name: Standard PC (i440FX + PIIX, 1996)
Это отлично подходит для сценариев, которые могут анализировать их для лучшей идентификации серверов ... но если вы используете Chef в своей инфраструктуре, вы можете проверить атрибут узла Virtualization -> system
на сервере шеф-повара.
Ситуация несколько изменилась за почти 11 лет с тех пор, как об этом спросили.
Если вы используете дистрибутив с установленным systemd (исходный вопрос по OPs, SLES использовал systemd с v12), systemd-detect-virt, вероятно, будет работать, не требует root и дает наиболее удобный для сценариев вывод без необходимости дальнейшего массажа :
$ systemd-detect-virt
vmware
Мне очень нравится:
hostnamectl status
или бетон:
hostnamectl status | grep "Chassis:"
Как проверить, является ли система Linux физической или виртуальной машиной
16 методов проверки, является ли система Linux физической или виртуальной машиной