Saya memiliki akses baris perintah ke mesin Linux yang mungkin atau mungkin tidak tervirtualisasi. Saya ingin menentukan jenis teknologi virtualisasi yang dijalankannya, jika ada (VMWare, VirtualBox, KVM, OpenVZ, Xen,). Ini bukan lingkungan yang bermusuhan: Saya tidak mencoba untuk bekerja melawan VM yang mencoba untuk menyamarkan dirinya sendiri, saya mendiagnosis server serpihan yang saya tahu sedikit tentang.
Lebih tepatnya, saya membantu seseorang mendiagnosis masalah ini, saya tidak duduk di belakang. Jadi saya harus menyampaikan instruksi seperti "salin-tempel perintah ini" dan bukan "menyodok di /proc
suatu tempat". Idealnya, itu akan menjadi seperti lshw
: perintah yang mudah diinstal (jika tidak diinstal) yang melakukan pencarian dan mencetak informasi yang relevan.
Apa cara termudah untuk menentukan teknologi virtualisasi apa yang mungkin dimiliki oleh sistem ini? Saya akan menghargai jika proposal menyebutkan teknologi mana (termasuk perangkat keras) yang dapat dideteksi secara meyakinkan dan yang dapat dihilangkan secara meyakinkan. Saya sebagian besar tertarik pada Linux, tetapi jika itu juga berfungsi untuk unix lain itu bagus.
Jawaban:
dmidecode -s system-product-name
Saya telah menguji Vmware Workstation, VirtualBox, QEMU dengan KVM, QEMU mandiri dengan Ubuntu sebagai OS tamu. Yang lain telah menambahkan platform tambahan yang mereka kenal juga.
Teknologi virtualisasi
VMware Workstation
VirtualBox
Qemu dengan KVM
Qemu (ditiru)
Microsoft VirtualPC
Virtuozzo
Xen
Pada bare metal, ini mengembalikan identifikasi model komputer atau motherboard.
/dev/disk/by-id
Jika Anda tidak memiliki hak untuk menjalankan,
dmidecode
Anda dapat menggunakan:Teknologi Virtualisasi: QEMU
Keluaran
Referensi
sumber
Virtual Machine
untukdmidecode -s system-product-name
. Tidak ada yang jelas di bawah / dev / disk / by-id. facter muncul untuk mendeteksi hyperv dengan melihat output lspci./proc/user_beancounters
/proc/user_beancounters
lebih dari OpenVZ yang kemungkinan pada VPS murah sebagai contoh.dmidecode
dan/dev/disk/by-id
solusi gagal dalam wadah Docker. Lihat unix.stackexchange.com/a/257207/106572dmidecode -s system-product-name
mengembalikan deskripsi perangkat keras generik alih-alih "KVM" atau "Bochs" yang ditunjukkan di atas. Bagi saya, string iniStandard PC (i440FX + PIIX, 1996)
.dmidecode -s system-manufacturer
mengembalikan string yang jauh lebih umumQEMU
. Karena qemu memungkinkan data DMI disediakan, saya menduga dmidecode relatif mudah dibodohi - tidak peduli bidang yang sedang dibaca.Jika wadah berjalan
systemd
:Pada KVM misalnya mengembalikan:
dan pada host non-virtual:
Lihat juga:
sumber
kvm
untuk Google Compute Engine, yang saya coba cari tahu. Terima kasih!Metode yang diinginkan
lih
Perintah ini menghasilkan output berikut pada tamu teknologi VM vairous.
Keluaran
KVM
Kotak Virtual
VMWare
Scripting
Jika Anda menggunakan Ubuntu / Debian ada paket yang
open-vm-tools
dapat diinstal. Itu menyediakanvmware-checkvm
. Hanya mengembalikan satu digit. A0
berarti itu VM,1
artinya itu sistem fisik.Metode yang kurang diinginkan
Jika KVM
/proc/scsi/scsi
danethtool
opsi muncul sebagai berikut:SCSI
ethtool
Virtio_net adalah bagian dari KVM. The
/proc/scsi/scsi
memberitahu Anda bahwa Anda berada dalam VM, dan bahwa Anda kemungkinan besar KVM.dmesg
Menggunakan perintah berikut
grep
melaluidmesg
log.VMWare
QEmu atau KVM
Jika
"-cpu host"
opsi belum digunakan, QEmu dan KVM akan mengidentifikasi diri mereka sebagai:jika tidak, informasi CPU host akan digunakan baik dalam
dmesg
, atau dalam/proc/cpuinfo
. Namun, Anda harus melihat sesuatu seperti:Di kernel yang lebih baru, mereka memahami bahwa mereka berjalan di bawah paravirtualization.
Microsoft VirtualPC
Xen
Virtuozzo
Referensi
sumber
lshw -class system
dandmidecode
persis apa yang saya harapkan.lshw
output juga untuk platform tersebut. Beri saya beberapa menit dan saya akan memperbarui A.The
virt-what
Script tampaknya untuk menutupi sebagian besar kasus juga ...Saya lakukan seperti disclaimer dari penulis:
Sebagian besar waktu, menggunakan program ini adalah hal yang salah untuk dilakukan. Alih-alih, Anda harus mendeteksi fitur spesifik yang sebenarnya ingin Anda gunakan.
Itu muncul di sistem EL5 dan EL6 saya selama beberapa tahun terakhir sebagai bagian dari instalasi default. Ubuntu memilikinya, dan sumbernya juga tersedia.
Fakta - fakta yang terdeteksi oleh skrip tercantum di sini , tetapi dapat dengan mudah diperluas untuk kasus tepi.
sumber
Itu adalah tes yang kami gunakan di perusahaan saya.
sumber
Jika Anda mendapatkan orang yang Anda bantu pasang
facter
, Anda bisa melakukannyaTidak diperlukan akses root.
Debian Guest on Tuan rumah Debian:
Saya tidak dapat menjamin seberapa baik ini akan bekerja dengan Xen / KVM / Qemu ...
sumber
hostnamectl
adalah teman Anda (wajibsystemd
).Beberapa contoh:
Laptop tanpa virtualisasi apa pun
Xen
OpenVZ
KVM
sumber
Virtualization: oracle
terlepas dari saya belum menginstal paravirtualization | Tambahan tamu VirtualboxDi kernel linux "baru-baru ini", kernel mendeteksi hypervisor untuk Anda dan mencetak pesan yang mudah didapat
dmesg
. Ini hanya akan memberi tahu Anda:Sebagai contoh:
Mengenai apa arti "baru-baru ini", saya tidak jelas versi kernel mana yang secara resmi dirilis, tetapi komit yang memperkenalkan fitur ini dalam basis kode adalah pada 7 Mei 2010. Lihat di sini .
sumber
dmesg
mengisi buffer cincin ukuran tetap dengan semua jenis barang. Sama sekali tidak pantas untuk tugas ini. Lihat unix.stackexchange.com/a/257207/106572Untuk VirtualBox, Anda bisa
lspci | grep -i virtualbox
, yang memberikan:Atau,
dmidecode -s system-product-name
(seperti yang disarankan @Rahul Patil) bahkan lebih langsung ke intinya (tetapi perlu root):Untuk QEMU non-KVM, secara
dmidecode -s system-product-name
membingungkan mengembalikan Bochs, tetapidmesg | grep -i qemu
berfungsi (perangkat penyimpanan yang ditiru QEMU biasanya memiliki namaQEMU HARDDISK
,QEMU DVD-ROM
dll ...).sumber
Terkadang rumit :)
sumber
systemd-detect-virt
Ini akan mendeteksi jenis teknologi virtualisasi yang digunakan, dan mengeluarkannya.
Membedakan antara virtualisasi mesin dan virtualisasi wadah
Gunakan opsi
--container
dan--vm
untuk membatasi jenis virtualisasi yang terdeteksi.Kode keluar
Jika Anda hanya ingin tahu apakah virtualisasi terdeteksi atau tidak, tanpa spesifik, maka lebih mudah untuk memeriksa kode keluar. Ini akan mengembalikan kode keluar 0 jika virtualisasi terdeteksi, dan bukan nol sebaliknya.
sumber
Rupanya virtualisasi datang dalam beberapa bagian - dalam kasus saya QEMU, Bochs dan KVM (kemudian Ubuntu 14.04). Saya menemukan cara termudah untuk menemukan hypervisor yang digunakan adalah:
yang dalam kasus saya dikembalikan hanya
kvm
yang merupakan informasi dasar yang saya cari (juga OP saya pikir), karena itu memberitahu saya apa yang saya boleh lakukan (misalnya menjalankan ipset untuk memblokir serangan DDoS) dan bagaimana sumber daya dibagi antara VMs .Selain itu saya mencoba
dan
tidak ada yang menyebutkan KVM tetapi mereka berdua memberi tahu saya bahwa emulasi perangkat keras saya disediakan oleh
Bochs
yang saya akui bahkan belum pernah saya dengar, tetapi pencarian cepat menghasilkan informasi yang menarik ( http://en.wikipedia.org/wiki/ Bochs ). Perintah lshw sedikit lebih informatif daripada dmidecode (misalnya mengatakan itu 64-bit).Jawaban lain tidak benar-benar memberi tahu saya sesuatu yang berguna -
facter virtual
baru saja kembaliphysical
danls -1 /dev/disk/by-id/
kembaliata-QEMU_DVD-ROM_QM00003
yang menunjukkan bahwa QEMU terlibat, tetapi saya tidak memiliki akses ke DVD-ROM yang ditiru.sumber
Debian hadir dengan paket kecil ini untuk mendeteksi tipe virtualisasi:
dan sedikit lebih besar karena dependensi Perl:
Seperti biasa dijalankan:
sumber