Определить тип VMWare из виртуальной машины

Определить тип VMWare из виртуальной машины

Можно ли определить тип VMWare (ESXi, Workstation, Fusion, ...) из самой виртуальной машины (т. е. гостевой ОС), при условии, что гостевая виртуальная машина — это машина Linux?

Я пробовал разные вещи, например, grepping для hypervisorin /proc/cpuinfo, использование lscpuи т. д., но все, что я нашел, это «vmware», без какой-либо конкретики.

У меня нет прав root на машине, если это что-то меняет, хотя мне были бы интересны решения, которые возможны только с root, это будет удобно для некоторых вещей. Также меня в основном интересуют решения для Linux, но опять же, решения только для Windows могут оказаться полезными.

Причина, по которой я спрашиваю, заключается в том, чтобы иметь возможность оценить производительность. ESXi а) обычно развертывается на «реальном оборудовании»™ и б) не имеет дополнительных накладных расходов ОС. Смотритеэтот вопрос о сбое серверадля более подробной информации, особенноэтот ответ.

решение1

Вы можете определить версию из строк версии BIOS в выводе dmidecode. Я нашел один пример того, как это сделать, наhttps://fritshoogland.wordpress.com/2013/01/24/determine-vmware-esx-version-from-linux-as-guest-os/который датируется 2013 годом, поэтому в нем, вероятно, отсутствуют некоторые более новые версии:

case $( dmidecode | grep -A4 "BIOS Information" | grep Address | awk '{ print $2 }' ) in
"0xE8480" ) echo "ESX 2.5" ;;
"0xE7C70" ) echo "ESX 3.0" ;;
"0xE7910" ) echo "ESX 3.5" ;;
"0xE7910" ) echo "ESX 4"   ;;
"0xEA550" ) echo "ESX 4U1" ;;
"0xEA2E0" ) echo "ESX 4.1" ;;
"0xE72C0" ) echo "ESXi 5"   ;;
"0xEA0C0" ) echo "ESXi 5.1" ;;
"0xEA050" ) echo "ESXi 5.5" ;;
* ) echo "Unknown version: "
dmidecode | grep -A4 "BIOS Information" 
;;
esac

Наша команда ops не могла сказать мне, какую версию ESX мы использовали несколько лет назад (уф!!), но мне нужно было знать, потому что мы готовились к тестированию нового продукта, который требовал определенной версии гипервизора. Для меня это сработало как чемпион.

Если вам нужно сделать это как не-root аккаунт, используйте sudo. Используйте 'visudo' для доступа к файлу sudoers, затем добавьте строку, похожую на следующую, ближе к концу файла:

имя пользователя ALL=(ALL:ALL) NOPASSWD:/usr/sbin/dmidecode

Это позволит «username» получить доступ к dmidecode без какой-либо специальной аутентификации, просто запустите «sudo dmidecode» вместо «dmidecode».

Связанный контент