Bir sunucunun sanal mı fiziksel mi olduğunu bulmak için terminal komutu


13

Ben yürütme kullanıcı sudoers grubunda olması ve aynı zamanda evrensel olması ve ek paketleri yüklemek gerektirmeyen bir terminal komutu arıyorum. Şimdiye kadar sistem systemd yüklü ise o zaman kullanabilirsiniz:

$ 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

ve Icon name ve Chassis altında VM veya fiziksel makine olup olmadığını görebiliyorum. Ancak lscpu, özellikle ondan daha evrensel bir yöntem olduğu hostnamectlve systemd gerektirmediği için kullanabileceğimi merak ediyordum . Benim teorim, CPU çekirdek başına sadece bir iş parçacığı varsa ve ayrıca minimum ve maksimum CPU frekansı listelenmemişse, bu sunucunun gerçekten sanallaştırıldığının bir göstergesi olması gerektiğidir.

$ 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

Bir CPU'nun çekirdek başına sadece bir iş parçacığı varsa mutlaka VM olduğu anlamına gelmez, ancak tüm modern CPU'ların çekirdek başına 2 iş parçacığı olması gerektiğini ve buna ek olarak lscpuçıkıştaki minimum ve maksimum CPU frekansı .


4
"tüm modern CPU'lar çekirdek başına 2 iş parçacığına sahip olmalıdır" - Bu fikri nereden edinebilirsiniz? Intel bu yıl buna sahip olmayan 20 işlemci piyasaya sürdü . Ve bu sadece Intel.
marcelm

@marcelm, bunu bilmiyordum.
Georgе Stoyanov

2
En iyi performansın BIOS'ta hiper iş parçacığın kapatılmasını gerektirdiği kullanım durumları da vardır.
doneal24

Yanıtlar:


17

Verilen koşullar altında:

yürütme kullanıcısının sudoers grubunda olmasını ve ayrıca evrensel olmasını gerektirmeyen ve ek paketler yüklemesini gerektirmeyen terminal komutu.

sahiplerinin kasıtlı olarak işletim sisteminin VM olduğunu gizlemeye çalışmadığı değiştirilmemiş VM'ler için en basit yöntem,

cat /sys/class/dmi/id/product_name

Daha fazla olasılık:

OP yazar koşullarının dışında, bunun gibi daha karmaşık yaklaşımlar var: Neredeyim? İşletim Sistemi ve Sistem Çağrıları Olmadan Sanallaştırma Kimliği


1
@ GeorgеStoyanov Rica ederim!
Bob

Ek yapılandırma olmadan, libvirt-kvm-VM çalışırken "Standart PC (i440FX + PIIX, 1996)" olarak gösterir cat /sys/class/dmi/id/product_name, bu yüzden ne kadar yararlı olduğundan emin değilim.
Jonas Schäfer

2
@JonasWielicki Bu, QEMU tabanlı herhangi bir VM için varsayılan olarak kullanılan iyi tanımlanmış bir sistem açıklamasıdır ve normal donanımda hiçbir zaman görülmez.
Austin Hemmelgarn

1
@JonasWielicki Standard PC (i440FX + PIIX, 1996), QEMU / KVM sanal makinelerinin bilinen parmak izidir. Bu arada, bu parmak izi kolayca geçersiz kılınabilir
Bob

2
@JonasWielicki, pr -t /sys/class/dmi/id/sys_vendor /sys/class/dmi/id/product_namebu iki dosyanın içeriği de sistemin fiziksel mi sanal mı olduğu konusunda oldukça doğru bir fikir vermelidir.
Georgе Stoyanov

12

Bu ayrıca systemd (bu günlerde her yerde oldukça yaygın) gerektirir, ancak systemd-detect-virtbunun fiziksel veya sanal donanımda çalışıp çalışmadığını söylemek için daha iyi bir araçtır.

Tarafından kullanılan mantığa bir göz atabilirsiniz systemd-detect-virt, aslında birkaç farklı sanallaştırma teknolojisini tespit etmenin birçok yere baktığını göreceksiniz ...

Bence lscpuçıktıya bakmak gibi naif bir şey bazı durumlarda işe yarayabilir, ama bence her zaman pek işe yaramaz. Ayrıca, birçok teknolojinin VM'lerin çekirdek başına birden fazla iş parçacığına sahip olmasını mümkün kıldığını (ve hatta muhtemelen) unutmayın, bu yüzden burada belirli bir özelliğin burada her türlü güvenilir algılama için yeterli olduğunu düşünmüyorum.


Eğer minimum ve maksimum frekans lscpu'dan eksikse, bu da makinenin gerçekten de VM olduğuna dair bir gösterge olabileceğini düşünüyorum. Ancak yönteminiz daha güvenilir görünüyor.
Georgе Stoyanov

1
@ GeorgеStoyanov Bu, frekans ölçeklemenin başka bir nedenden ötürü tamamen devre dışı bırakıldığı anlamına da gelebilir, bu yüzden güvenilir değildir.
Austin Hemmelgarn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.