it-swarm-id.com

Cari tahu apakah OS berjalan di lingkungan virtual

Apakah ada cara untuk mengetahui apakah OS yang saya jalankan (benar-benar menginstal) berjalan di mesin VMWare. Saya perlu menonaktifkan pengaturan ntp jika instalasi otomatis dilakukan pada mesin virtual tetapi tetap diaktifkan jika menginstal pada logam kosong.

52
ulve

Menggunakan dmidecode atau lshw dan greping tampaknya menjadi cara terbaik untuk mengetahuinya.

11
ulve

Linux menambahkan tanda hypervisor ke /proc/cpuinfo jika kernel mendeteksi berjalan pada semacam hypervisor.

68
Jan Henke

Di Linux Anda dapat menggunakan perintah virt-what

[[email protected]]# virt-what
vmware

Contoh Output untuk linux di Windows HyperV

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

Ini bekerja lebih baik untuk saya karena memberi saya informasi spesifik tentang produsen dan nama produk.

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

Output pada server Dell:

Manufacturer: Dell Inc.
Product Name: PowerEdge C5220

Output pada Virtualbox VM:

Manufacturer: innotek GmbH
Product Name: VirtualBox

Output pada KVM/QEMU:

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

Ini bagus untuk skrip yang dapat menguraikannya untuk identifikasi server yang lebih baik ... tetapi jika Anda menggunakan Chef dalam infrastruktur Anda, Anda dapat memeriksa atribut simpul Virtualization -> system di server chef.

19
OkezieE

Lari:

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

Jika yang Anda butuhkan adalah cara untuk mengetahui apakah OS/Host adalah Host yang tervirtualisasi atau tidak, cukup Anda memiliki modul Perl Sys :: Detect :: Virtualization dan skrip dengannya virtdetect. Ia melakukan semua deteksi heuristik/dugaan yang mungkin dan melaporkan lingkungan OS yang terdeteksi. Cobalah.

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

3
Nikhil Mulley

Ide terbaik mungkin untuk melihat perangkat kerasnya. Setidaknya dengan VirtualBox Anda dapat dengan mudah menentukan bahwa Anda berada di mesin virtual, karena nama-nama beberapa perangkat perangkat keras (misalnya /sys/block/sda/device/model akan mengatakan "VBOX HARDDISK").

Karena semua mesin Anda adalah VMware, pilih saja salah satu dari itu dan periksa itu.

3
tante

Anda dapat mencoba Joanna Rutkowska Red Pill Program kecil ini memeriksa IDTR (interrupt descriptor table register) menggunakan SIDT instruksi (hanya x86), yang tampaknya akan diatur secara berbeda oleh VMM yang berbeda.

3
Bruce Ediger

Semua jawaban ini berfungsi dalam beberapa kasus tetapi tidak pada yang lain.

Misalnya, Anda dapat bergantung pada dmesg saat detail log boot-up masih dalam buffer cincin, tetapi kemungkinan akan gagal pada mesin yang telah berjalan untuk jangka waktu yang lama. Lebih buruk lagi, pesan mungkin dicatat oleh OS logam kosong tentang menjalankan hypervisor, dalam hal ini tes naif seperti dmesg | grep -i vmware akan mengembalikan false positive.

Pengujian di bawah Docker sangat berbeda. Docker tidak memiliki /proc/cpuinfo sendiri; alih-alih meneruskan info mesin Host. Sementara itu, dmidecode gagal mencoba membaca direktori /dev/mem tidak terlihat oleh Docker.

virt-what memiliki deteksi untuk wadah Docker, tetapi perlu ditambal untuk mengatasi perubahan terbaru dalam hak istimewa wadah. Itu macet saat mencoba mengakses /proc/1/environ sebelum mencapai tes untuk Docker.

Penting untuk memperhatikan virt-what emptor peringatan:

Sebagian besar waktu, menggunakan program ini adalah hal yang salah untuk dilakukan. Alih-alih, Anda harus mendeteksi fitur spesifik yang sebenarnya ingin Anda gunakan.

Dalam kasus saya, menerbitkan tutorial yang menginstal ton pengguna omong kosong mungkin tidak mau, saya menolak untuk membiarkannya berjalan pada bare metal, dengan tes ini:

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

Catatan: Saya menyadari OP bertanya secara spesifik tentang VMWare di tubuh pertanyaan, tetapi judul pertanyaan akan menarik banyak pembaca (seperti saya) mencari kasus yang lebih umum.

2
Martin Bramwell

Saya sudah melakukannya:

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

Ini membantu dalam skrip

baik, cara paling intuitif yang selalu saya lakukan adalah:

$ dmesg | grep -i vmware

1
Shâu Shắc

Membutuhkan APIC, mengembalikan 0 jika mesin virtual, 1 jika komputer fisik:

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