Saya mencari perintah terminal yang tidak mengharuskan pengguna yang mengeksekusi berada di grup sudoers dan juga bersifat universal dan tidak perlu menginstal paket tambahan. Sejauh ini saya telah menemukan bahwa jika sistem telah menginstal systemd maka saya dapat menggunakan:
$ hostnamectl status
Static hostname: mint
Icon name: computer-laptop
Chassis: laptop
Machine ID: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
Boot ID: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Operating System: Linux Mint LMDE
Kernel: Linux 3.16.0-6-amd64
dan di bawah Icon name dan Chassis saya dapat melihat apakah itu VM atau mesin fisik. Tetapi saya bertanya-tanya apakah saya dapat menggunakan lscpu
, terutama karena ini adalah metode yang lebih universal daripada hostnamectl
dan tidak memerlukan systemd. Teori saya adalah bahwa jika CPU hanya memiliki satu utas per inti dan juga tidak terdaftar frekuensi CPU minimum dan maksimum ini harus menjadi indikasi bahwa server memang tervirtualisasi.
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 60
Model name: Intel(R) Core(TM) i7-4710HQ CPU @ 2.50GHz
Stepping: 3
CPU MHz: 2500.488
CPU max MHz: 3500.0000
CPU min MHz: 800.0000
BogoMIPS: 4988.18
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 6144K
NUMA node0 CPU(s): 0-7
Saya tahu bahwa jika sebuah CPU hanya memiliki satu utas per inti tidak selalu berarti bahwa itu adalah VM pasti, tetapi kemudian semua CPU modern harus memiliki 2 utas per inti dan selain itu saya juga dapat memperhitungkan kekurangan / keberadaan frekuensi CPU minimum dan maksimum dalam lscpu
output.
sumber
Jawaban:
Dalam kondisi tertentu:
metode paling sederhana yang jelas untuk VM yang tidak dimodifikasi, yang pemiliknya tidak mencoba menyembunyikan fakta bahwa OS adalah VM, adalah
Lebih banyak kemungkinan:
Di luar yang diberikan oleh kondisi penulis OP ada pendekatan yang lebih rumit seperti ini: Di mana saya? Sistem Operasi dan Identifikasi Virtualisasi Tanpa Panggilan Sistem
sumber
cat /sys/class/dmi/id/product_name
, jadi saya tidak yakin seberapa berguna itu.Standard PC (i440FX + PIIX, 1996)
adalah sidik jari terkenal dari mesin virtual QEMU / KVM. Omong-omong, sidik jari ini dapat dengan mudah digantipr -t /sys/class/dmi/id/sys_vendor /sys/class/dmi/id/product_name
konten dari kedua file ini juga harus memberi Anda ide yang cukup akurat apakah sistem tersebut fisik atau virtual.Ini juga memerlukan systemd (yang mana-mana hari ini), tetapi
systemd-detect-virt
merupakan alat yang lebih baik untuk mengetahui apakah ini berjalan pada perangkat keras fisik atau virtual.Anda dapat melihat pada logika yang digunakan oleh
systemd-detect-virt
, Anda akan melihat bahwa itu benar-benar terlihat di banyak tempat untuk mendeteksi beberapa teknologi virtualisasi yang berbeda ...Saya pikir sesuatu yang naif seperti melihat
lscpu
output mungkin bekerja dalam beberapa kasus beberapa waktu, tetapi saya pikir itu tidak akan berhasil sepanjang waktu. Perlu diketahui juga bahwa banyak teknologi memungkinkan (dan bahkan mungkin) bagi VM untuk memiliki lebih dari satu utas per inti, jadi saya bahkan tidak berpikir bahwa fitur tertentu cukup untuk melakukan deteksi apa pun yang dapat diandalkan di sini.sumber