У меня есть доступ из командной строки к машине Linux, которая может или не может быть виртуализирована. Я хочу определить, на какой технологии виртуализации она работает, если таковая имеется (VMWare, VirtualBox, KVM, OpenVZ, Xen,). Это не враждебная среда: я не пытаюсь работать против виртуальной машины, которая пытается замаскировать себя, я диагностирую ненадежный сервер, о котором мало что знаю.
Точнее, я помогаю кому-то диагностировать проблему, я не сижу у руля. Поэтому я должен передать инструкции типа «скопировать и вставить эту команду», а не « /proc
где-то копаться». В идеале это будет что-то вроде lshw
: легко устанавливаемой (если не предустановленной) команды, которая выполняет поиск и выводит соответствующую информацию.
Какой самый простой способ определить, какую технологию виртуализации может использовать эта система? Я был бы признателен, если бы в предложениях упоминалось, какие технологии (включая «голое» оборудование) могут быть окончательно обнаружены, а какие - окончательно устранены. Я в основном интересуюсь Linux, но если он работает и для других юнитов, это хорошо.
Ответы:
dmidecode -s system-product-name
Я тестировал на Vmware Workstation, VirtualBox, QEMU с KVM, автономный QEMU с Ubuntu в качестве гостевой ОС. Другие добавили дополнительные платформы, с которыми они также знакомы.
Технологии виртуализации
Рабочая станция VMware
VirtualBox
Qemu с KVM
Кему (подражание)
Microsoft VirtualPC
Virtuozzo
Xen
На голом металле это возвращает идентификацию модели компьютера или материнской платы.
/dev/disk/by-id
Если у вас нет прав на запуск,
dmidecode
вы можете использовать:Технология виртуализации: QEMU
Выход
Рекомендации
источник
Virtual Machine
дляdmidecode -s system-product-name
. В / dev / disk / by-id также нет ничего очевидного. Фасетер обнаруживает гипервизор, глядя на вывод lspci./proc/user_beancounters
/proc/user_beancounters
более OpenVZ, который, вероятно, на дешевых VPS в качестве примера.dmidecode
и/dev/disk/by-id
решения терпят неудачу в контейнере Docker. См. Unix.stackexchange.com/a/257207/106572dmidecode -s system-product-name
возвращает общее описание оборудования вместо "KVM" или "Bochs", показанных выше. Для меня эта строкаStandard PC (i440FX + PIIX, 1996)
.dmidecode -s system-manufacturer
возвращает гораздо менее общую строкуQEMU
. Поскольку qemu позволяет предоставлять данные DMI, я подозреваю, что dmidecode относительно легко обмануть - независимо от того, какое поле читается.Если контейнер работает
systemd
:На KVM например он возвращает:
и на не виртуализированном хосте:
Смотрите также:
источник
kvm
для Google Compute Engine, что я и пытался выяснить. Спасибо!Желаемый метод
lshw
Эта команда создает следующий вывод для гостей, использующих технологию VM.
Выход
KVM
Виртуальная коробка
VMWare
Scripting
Если вы работаете в Ubuntu / Debian, пакет
open-vm-tools
может быть установлен. Это обеспечиваетvmware-checkvm
. Возвращает только цифру.0
Означает , что это виртуальная машина, А1
значит , это физическая система.Менее желательные методы
Если это KVM, параметры
/proc/scsi/scsi
иethtool
отображаются следующим образом:SCSI
Ethtool
Virtio_net является частью KVM. Он
/proc/scsi/scsi
говорит вам, что вы находитесь в виртуальной машине, и что вы, скорее всего, KVM.dmesg
Используя следующие команды
grep
черезdmesg
лог.VMWare
QEmu или KVM
Если
"-cpu host"
опция не была использована, QEmu и KVM идентифицируют себя как:в противном случае информация о процессоре хоста будет использоваться как в
dmesg
, так и в/proc/cpuinfo
. Тем не менее, вы должны увидеть что-то вроде:В более новых ядрах, которые понимают, что они работают под паравиртуализацией.
Microsoft VirtualPC
Xen
Virtuozzo
Рекомендации
источник
lshw -class system
иdmidecode
это именно то, что я надеялся найти.lshw
вывод и для этих платформ. Дайте мне пару минут, и я обновлю А.virt-what
Сценарий кажется, покрывает большинство случаев хорошо ...Я сделать как оговорке от авторов:
В большинстве случаев использовать эту программу неправильно. Вместо этого вы должны определить конкретные функции, которые вы действительно хотите использовать.
Он появился в моих системах EL5 и EL6 в течение последних нескольких лет как часть установок по умолчанию. У Ubuntu он есть, и источник также доступен.
В фактах , обнаруженные скрипта перечислены здесь , но могут быть легко расширены за крайние случаи.
источник
Это тесты, которые мы используем в моей компании.
источник
Если у вас есть человек, которому вы помогаете установить
facter
, вы можете сделатьНет корневого доступа не требуется.
Гость Debian на хосте Debian:
Я не могу поручиться за то, насколько хорошо это будет работать с Xen / KVM / Qemu ...
источник
hostnamectl
твой друг (обязательноsystemd
).Несколько примеров:
Ноутбук без какой-либо виртуализации
Xen
OpenVZ
KVM
источник
Virtualization: oracle
независимо от того, не установил ли я паравиртуализацию | Дополнения гостя VirtualboxВ «последних» ядрах Linux ядро обнаруживает для вас гипервизор и печатает сообщение, которое легко доступно
dmesg
. Это скажет вам просто:Например:
Что касается того, что означает «недавний», мне неясно, в какой версии ядра он был официально выпущен, но коммит, который представил эту функцию в базе кода, был 7 мая 2010 года. См. Здесь .
источник
dmesg
заполняет кольцевой буфер фиксированного размера всеми видами вещей. Это совершенно неуместно для этой задачи. См. Unix.stackexchange.com/a/257207/106572Для VirtualBox, вы могли бы
lspci | grep -i virtualbox
, что дает:В качестве альтернативы
dmidecode -s system-product-name
(как предлагает @Rahul Patil) еще более прямолинейно к точке (но нужен root):Для не-KVM QEMU
dmidecode -s system-product-name
сбивает с толку Bochs, ноdmesg | grep -i qemu
работает (устройства хранения, которые эмулирует QEMU, обычно имеют имяQEMU HARDDISK
иQEMU DVD-ROM
т. Д.).источник
Иногда это сложно :)
источник
Systemd-детектировать-вирт
Это позволит определить тип используемой технологии виртуализации и вывести ее.
Различение между виртуализацией компьютеров и виртуализацией контейнеров
Используйте параметры
--container
и--vm
для ограничения типа обнаруживаемой виртуализации.Коды выхода
Если вы просто хотите узнать, обнаружена виртуализация или нет, без подробностей, тогда проще проверить код выхода. Он вернет код выхода 0, если обнаружена виртуализация, и ненулевой в противном случае.
источник
Очевидно, что виртуализация состоит из нескольких частей - в моем случае QEMU, Bochs и KVM (тогда Ubuntu 14.04). Я нашел самый простой способ обнаружить гипервизор в использовании:
который в моем случае просто возвращал,
kvm
что было основной информацией, которую я искал (также я думаю, что это OP), потому что он говорит мне, что мне разрешено делать (например, запустить ipset, чтобы заблокировать атаку DDoS) и как ресурсы распределяются между виртуальными машинами ,Кроме того, я пытался
а также
ни в одном из них не упоминается KVM, но оба они сообщают мне, что была предоставлена моя аппаратная эмуляция, о
Bochs
которой, признаюсь, я даже не слышал, но быстрый поиск обнаружил интересную информацию ( http://en.wikipedia.org/wiki/ Bochs ). Команда lshw немного более информативна, чем dmidecode (например, говорит, что она 64-битная).Другие ответы на самом деле не сказали мне ничего полезного -
facter virtual
просто вернулисьphysical
иls -1 /dev/disk/by-id/
вернулись,ata-QEMU_DVD-ROM_QM00003
что показывает, что QEMU вовлечен, но у меня все равно нет доступа к эмулируемому DVD-ROM.источник
Debian поставляется с этим небольшим пакетом для определения типа виртуализации:
и немного больше из-за зависимостей Perl:
Как обычно бегите:
источник