Назад | Перейти на главную страницу

VMware Linux Server - как узнать, являетесь ли вы виртуальной машиной или настоящим оборудованием?

Интересный вопрос. Я вошел в систему 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