Можно ли определить тип VMWare (ESXi, Workstation, Fusion, ...) из самой виртуальной машины (т. е. гостевой ОС), при условии, что гостевая виртуальная машина — это машина Linux?
Я пробовал разные вещи, например, grepping для hypervisor
in /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».