サーバーが仮想か物理かを確認する端末コマンド


13

実行中のユーザーがsudoersグループに属している必要がなく、ユニバーサルであり、追加のパッケージをインストールする必要がない端末コマンドを探しています。これまでのところ、システムにsystemdがインストールされている場合は、以下を使用できることがわかりました。

$ 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

アイコン名とシャーシで、それがVMか物理マシンかを確認できます。しかし、私はを使用できるかどうか疑問に思っていましたlscpu。特に、それがhostnamectlsystemdを必要とせず、より普遍的な方法だからです。私の理論では、CPUのコアあたりのスレッドが1つだけで、最小および最大のCPU周波数もリストされていない場合、これはサーバーが実際に仮想化されていることを示しているはずです。

$ 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

CPUがコアごとに1つのスレッドしかない場合、それが確かにVMであることを必ずしも意味しないことを知っていますが、すべての最新のCPUはコアごとに2つのスレッドを持つ必要があり、さらに、lscpu出力の最小および最大CPU周波数。


4
「すべての最新のCPUはコアあたり2スレッドを持つべきです -あなたはどこでそのアイデアを手に入れましたか?Intelは今年、それを持たない20プロセッサ をリリースした。そしてそれはただのIntelです。
marcelm

@marcelm、私はそれを知りませんでした。
ジョージストヤノフ2018

2
また、最高のパフォーマンスを実現するために、BIOSでハイパースレッディングをオフにする必要があるユースケースもあります。
doneal24

回答:


17

所定の条件下で:

実行ユーザーがsudoersグループに属している必要がなく、ユニバーサルであり、追加のパッケージをインストールする必要がない端末コマンド。

所有者が意図的にOSがVMであるという事実を隠そうとしなかった、変更されていないVMの最も簡単な方法は、

cat /sys/class/dmi/id/product_name

その他の可能性:

OP作成者の条件以外に、次のようなより複雑なアプローチがあります。システムコールを使用しないオペレーティングシステムと仮想化の識別


1
@GeorgеStoyanovどういたしまして!
ボブ

追加の設定がないと、libvirt-kvm-VMはを実行すると「標準PC(i440FX + PIIX、1996)」と表示されるcat /sys/class/dmi/id/product_nameため、どれほど便利かわかりません。
JonasSchäfer18年

2
@JonasWielickiこれは、QEMUベースのVMでデフォルトで使用される明確に定義されたシステム記述であり、通常のハードウェアでは見られません。
オースティンヘンメルガーン2018

1
@JonasWielicki Standard PC (i440FX + PIIX, 1996)は、QEMU / KVM仮想マシンのよく知られた指紋です。ちなみに、このフィンガープリントを簡単にオーバーライドすることができます。askubuntu.com/questions/564643/...
ボブ・

2
@JonasWielicki、pr -t /sys/class/dmi/id/sys_vendor /sys/class/dmi/id/product_nameこれらの2つのファイルの内容は、システムが物理的であるか仮想であるかについても、かなり正確な情報を提供します。
ジョージストヤノフ

12

これにはsystemdも必要です(最近のユビキタスsystemd-detect-virtですが)。これが物理ハードウェアと仮想ハードウェアのどちらで実行されているかを確認するための優れたツールです。

で使用されているロジックを見ると、systemd-detect-virt実際には多くの場所を調べて、いくつかの異なる仮想化テクノロジーを検出していることがわかります...

lscpu場合によっては、出力を確認するなどの単純なことでもうまくいく場合もありますが、常にうまくいくとは限りません。また、多くのテクノロジーにより、VMがコアごとに複数のスレッドを持つことが可能になる可能性が高いため、ここでは特定の機能で信頼できる検出を行うのに十分であるとは思わないことに注意してください。


lscpuから最小周波数と最大周波数が欠落している場合は、マシンが実際にVMである可能性も考えられます。しかし、あなたの方法はより信頼できるようです。
Georgеストヤノフ

1
@GeorgеStoyanovこれは、周波数スケーリングが他の理由で完全に無効になっていることも意味しているため、信頼性がありません。
オースティンヘンメルガーン2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.