it-swarm-eu.dev

Zjistěte, zda je operační systém spuštěn ve virtuálním prostředí

Existuje nějaký způsob, jak zjistit, zda spuštěný operační systém (skutečně instalovaný) v počítači VMWare. Pokud je automatická instalace prováděna na virtuálním počítači, musím deaktivovat nastavení ntp, ale ponechat je povolená, pokud instalujete na holý kov.

52
ulve

Použití dmidecode nebo lshw a greping se zdá být nejlepším způsobem, jak to zjistit.

11
ulve

Linux přidá příznak hypervisor do /proc/cpuinfo pokud jádro zjistí, že běží na nějakém hypervisoru.

68
Jan Henke

V systému Linux můžete použít příkaz virt-what

[[email protected]]# virt-what
vmware

Příklad výstupu pro linux ve Windows HyperV

[[email protected]~] # virt-what
hyperv
26
user66871

To mi fungovalo lépe, protože mi poskytuje konkrétní informace o výrobci a názvu produktu.

dmidecode -t system|grep 'Manufacturer\|Product'

Výstup na serveru Dell:

Manufacturer: Dell Inc.
Product Name: PowerEdge C5220

Výstup na Virtualbox VM:

Manufacturer: innotek GmbH
Product Name: VirtualBox

Výstup na KVM/QEMU:

Manufacturer: QEMU
Product Name: Standard PC (i440FX + PIIX, 1996)

To je skvělé pro skripty, které je mohou analyzovat pro lepší identifikaci serverů ... ale pokud ve své infrastruktuře používáte Chef, můžete zkontrolovat atribut uzlu Virtualization -> system na serveru kuchaře.

19
OkezieE

Běh:

$ dmesg |grep -i hypervisor
Hypervisor detected: KVM
12
Arash

Pokud vše, co potřebujete, je způsob, jak zjistit, zda je OS/Host virtualizovaným hostitelem nebo ne, máte pouze modul Perl Sys :: Detect :: Virtualization a skript s ním virtdetect. Provádí všechny možné heuristické/odhadové detekce a hlásí zjištěné prostředí OS. Pokusit se.

http://search.cpan.org/dist/Sys-Detect-Virtualization/script/virtdetect

3
Nikhil Mulley

Nejlepší nápad by se pravděpodobně podíval na hardware. Alespoň s VirtualBox můžete snadno určit, že jste na virtuálním stroji, kvůli jménům některých hardwarových zařízení (například /sys/block/sda/device/model řekne „VBOX HARDDISK“).

Protože jsou všechny vaše stroje VMware, vyberte jednu z těchto věcí a zkontrolujte to.

3
tante

Můžete zkusit Joanna Rutkowska's Red Pill Tento malý program zkoumá IDTR (registr tabulky deskriptorů přerušení) pomocí instrukce SIDT (pouze x86), která zřejmě bude být nastaveny odlišně různými VMM.

3
Bruce Ediger

Všechny tyto odpovědi fungují v některých případech, ale ne v jiných.

Můžete se například spolehnout na dmesg, zatímco podrobnosti o zaváděcím protokolu jsou stále v kruhové vyrovnávací paměti, ale pravděpodobně dojde k selhání na počítači, který běží po libovolnou dobu. Horší je, že holým kovovým operačním systémem by mohla být zaznamenána zpráva týkající se běžícího hypervisora, v takovém případě naivní test jako dmesg | grep -i vmware vrátí falešně pozitivní.

Testování pod Dockerem je úplně jiné. Docker nemá /proc/cpuinfo Jeho vlastní; místo toho předává informace o hostitelském počítači. Mezitím dmidecode selže při čtení adresáře /dev/mem Docker neviděl.

virt-what má detekci pro kontejnery Docker, ale musí být opraven, aby zvládl nedávnou změnu oprávnění kontejneru. Selhání pokusu o přístup k /proc/1/environ před tím, než dosáhne testů pro Docker.

Je důležité věnovat pozornost virt-what upozornění na upozornění:

Většinu času je používání tohoto programu špatné. Místo toho byste měli zjistit konkrétní funkce, které chcete skutečně použít.

V mém případě publikování tutoriálu, který nainstaluje tun kecy, které uživatelé možná nechtějí, nakonec odmítám nechat běžet na holém kovu, s tímto testem:

[[ 0 < $(grep -c docker /proc/1/cgroup) ]] || [[ "X$(Sudo virt-what)X" != "XX" ]] && export VIRTUALIZED=true;

Poznámka: Uvědomuji si, že se OP ptá konkrétně na VMWare v těle otázky, ale název otázky přitáhne mnoho čtenářů (jako já) hledajících obecnější případ.

2
Martin Bramwell

Udělal jsem to:

hypervisor=`dmesg --notime | grep -i hypervisor | cut -d ':' -f2 | tr -d " \t\n\r"`
echo "Hypervisor is $hypervisor"

Pomáhá při skriptech

nejintuitivnějším způsobem, jak vždycky dělám, je:

$ dmesg | grep -i vmware

1
Shâu Shắc

Vyžaduje APIC, vrací 0, pokud je virtuální počítač, 1, pokud je fyzický počítač:

grep -q VBOX /sys/firmware/acpi/tables/APIC
0
user227115