Mam dostęp z wiersza poleceń do komputera z systemem Linux, który może być wirtualizowany lub nie. Chcę ustalić, na jakiej technologii wirtualizacji działa, jeśli w ogóle (VMWare, VirtualBox, KVM, OpenVZ, Xen,). To nie jest wrogie środowisko: nie próbuję pracować z maszyną wirtualną, która próbuje się ukryć, diagnozuję niestabilny serwer, o którym niewiele wiem.
Mówiąc dokładniej, pomagam komuś zdiagnozować problem, nie siedzę za sterem. Muszę więc przekazać instrukcje takie jak „skopiuj-wklej to polecenie”, a nie „grzebać /proc
gdzieś”. Idealnie byłoby to coś w rodzaju lshw
: łatwego do zainstalowania (jeśli nie jest wstępnie zainstalowanego) polecenia, które wykonuje przeglądanie i drukuje odpowiednie informacje.
Jaki jest najłatwiejszy sposób ustalenia, z jakiej technologii wirtualizacji może korzystać ten system? Byłbym wdzięczny, gdyby w propozycjach wspomniano, które technologie (w tym czysty sprzęt) można ostatecznie wykryć, a które ostatecznie. Najbardziej interesuje mnie Linux, ale jeśli działa również na inne jednorożce, to fajnie.
Odpowiedzi:
dmidecode -s system-product-name
Testowałem na Vmware Workstation, VirtualBox, QEMU z KVM, samodzielny QEMU z Ubuntu jako system operacyjny gościa. Inni dodali także inne znane platformy.
Technologie wirtualizacji
VMware Workstation
VirtualBox
Qemu z KVM
Qemu (emulowane)
Microsoft VirtualPC
Virtuozzo
Xen
Na gołym metalu zwraca identyfikację modelu komputera lub płyty głównej.
/dev/disk/by-id
Jeśli nie masz uprawnień do uruchamiania
dmidecode
, możesz użyć:Technologia wirtualizacji: QEMU
Wynik
Bibliografia
źródło
Virtual Machine
dladmidecode -s system-product-name
. Nie ma też nic oczywistego w / dev / disk / by-id. wydaje się, że facter wykrywa hyperv patrząc na wyniki lspci./proc/user_beancounters
/proc/user_beancounters
ponad OpenVZ, który prawdopodobnie jest na tanich VPS jako przykład.dmidecode
i/dev/disk/by-id
rozwiązania nie w pojemniku Docker. Zobacz unix.stackexchange.com/a/257207/106572dmidecode -s system-product-name
zwraca ogólny opis sprzętu zamiast „KVM” lub „Bochs” pokazanych powyżej. Dla mnie ten ciąg jestStandard PC (i440FX + PIIX, 1996)
.dmidecode -s system-manufacturer
zwraca znacznie mniej ogólny ciągQEMU
. Ponieważ qemu pozwala na dostarczanie danych DMI, podejrzewam, że kod dmidecode jest stosunkowo łatwy do oszukania - bez względu na odczytywane pole.Jeśli kontener jest uruchomiony
systemd
:Na przykład w KVM zwraca:
i na niewirtualizowanym hoście:
Zobacz też:
źródło
kvm
dla Google Compute Engine, co starałem się rozgryźć. Dzięki!Pożądana metoda
lshw
To polecenie generuje następujące dane wyjściowe dla gości technologii vairous VM.
Wynik
KVM
Virtual Box
VMWare
Skrypty
Jeśli korzystasz z systemu Ubuntu / Debian, pakiet
open-vm-tools
można zainstalować. Zapewniavmware-checkvm
. Zwraca tylko cyfrę. A0
oznacza, że jest maszyną wirtualną,1
oznacza, że jest to system fizyczny.Mniej pożądane metody
Jeśli jest to KVM, opcje
/proc/scsi/scsi
i sąethtool
wyświetlane w następujący sposób:SCSI
ettool
Virtio_net jest częścią KVM.
/proc/scsi/scsi
Mówi ci, że jesteś w VM i że jesteś najbardziej prawdopodobny KVM.dmesg
Korzystanie z następujących poleceń
grep
wdmesg
dzienniku.VMWare
QEmu lub KVM
Jeśli
"-cpu host"
opcja nie została użyta, QEmu i KVM zidentyfikują się jako:w przeciwnym razie informacje o procesorze hosta będą używane zarówno w
dmesg
, jak i w/proc/cpuinfo
. Powinieneś jednak zobaczyć coś takiego:W nowszych jądrach, które rozumieją, że działają w trybie parawirtualizacji.
Microsoft VirtualPC
Xen
Virtuozzo
Bibliografia
źródło
lshw -class system
idmidecode
jest dokładnie tym, co miałem nadzieję znaleźć.lshw
wyjściowe również dla tych platform. Daj mi kilka minut, a zaktualizuję A.virt-what
Scenariusz wydaje się obejmować większość przypadków dobrze ...I robić jak zrzeczenie się od autorów:
Przez większość czasu używanie tego programu jest niewłaściwe. Zamiast tego powinieneś wykryć określone funkcje, których faktycznie chcesz używać.
Pojawił się na moich systemach EL5 i EL6 od kilku lat jako część domyślnych instalacji. Ubuntu ma to i źródło jest również dostępne.
Te fakty stwierdzone przez skrypt są tutaj wymienione , ale można łatwo rozszerzyć za przypadków brzegowych.
źródło
To są testy, które stosujemy w mojej firmie.
źródło
Jeśli dostaniesz osobę, której pomagasz zainstalować
facter
, możesz to zrobićNie wymaga dostępu do roota.
Gość Debian na hoście Debiana:
Nie mogę ręczyć za to, jak dobrze by to działało z Xen / KVM / Qemu ...
źródło
hostnamectl
jest twoim przyjacielem (wymagasystemd
).Kilka przykładów:
Laptop bez żadnej wirtualizacji
Xen
OpenVZ
KVM
źródło
Virtualization: oracle
bez względu na to, że nie zainstalowałem żadnej parawirtualizacji | Dodatki dla gości VirtualboxW „najnowszych” jądrach systemu Linux jądro wykrywa dla ciebie hypervisor i drukuje komunikat, który jest łatwo dostępny
dmesg
. To powie ci po prostu:Na przykład:
Co do tego, co oznacza „ostatnie”, nie jestem pewien, w której wersji jądra został oficjalnie wydany, ale zatwierdzenie, które wprowadziło tę funkcję w bazie kodu, miało miejsce 7 maja 2010 r. Zobacz tutaj .
źródło
dmesg
wypełnia bufor pierścieniowy o stałym rozmiarze wszystkimi rodzajami rzeczy. Jest to całkowicie nieodpowiednie do tego zadania. Zobacz unix.stackexchange.com/a/257207/106572W przypadku VirtualBox możesz
lspci | grep -i virtualbox
:Alternatywnie
dmidecode -s system-product-name
(jak sugeruje @Rahul Patil) jest jeszcze bardziej bezpośredni do rzeczy (ale wymaga rootowania):Dla non-KVM QEMU,
dmidecode -s system-product-name
łudząco zwraca bochs, aledmesg | grep -i qemu
działa (urządzeń pamięci masowej, które QEMU emuluje zwykle mają nazwyQEMU HARDDISK
,QEMU DVD-ROM
etc ...).źródło
Czasami jest to trudne :)
źródło
systemd-detekcja-virt
Wykryje to rodzaj zastosowanej technologii wirtualizacji i wyświetli ją.
Rozróżnianie między wirtualizacją maszyn a wirtualizacją kontenerów
Użyj opcji
--container
i,--vm
aby ograniczyć wykrywany typ wirtualizacji.Kody wyjścia
Jeśli chcesz tylko wiedzieć, czy wykryto wirtualizację, bez tych szczegółów, łatwiej jest sprawdzić kod wyjścia. Zwróci kod wyjścia 0, jeśli zostanie wykryta wirtualizacja, a w przeciwnym razie zero.
źródło
Najwyraźniej wirtualizacja składa się z kilku części - w moim przypadku QEMU, Bochs i KVM (wtedy Ubuntu 14.04). Znalazłem najłatwiejszy sposób na wykrycie używanego hiperwizora:
który w moim przypadku zwrócił po prostu,
kvm
która była podstawową informacją, której szukałem (myślę też, że OP), ponieważ mówi mi, co wolno mi robić (np. uruchomić ipset, aby zablokować atak DDoS) i jak zasoby są dzielone między maszynami wirtualnymi .Ponadto próbowałem
i
żadne z nich nie wspomina o KVM, ale obaj poinformowali mnie, że zapewniono moją emulację sprzętową, dzięki
Bochs
której przyznaję, że nawet o niej nie słyszałem, ale szybkie wyszukiwanie przyniosło ciekawe informacje ( http://en.wikipedia.org/wiki/ Bochs ). Polecenie lshw jest nieco bardziej pouczające niż kod dmidecode (np. Mówiąc mi, że jest 64-bitowy).Pozostałe odpowiedzi nie bardzo mi powiedzieć coś pożytecznego -
facter virtual
właśnie wróciłphysical
ils -1 /dev/disk/by-id/
wróciłata-QEMU_DVD-ROM_QM00003
który pokazuje QEMU jest zaangażowany, ale nie mam dostępu do emulowane DVD-ROM i tak.źródło
Debian jest dostarczany z tym małym pakietem do wykrywania typu wirtualizacji:
i trochę większy z powodu zależności Perla:
Jak zwykle uruchom:
źródło