興味深い質問です。 Linux(おそらくSuSE)ホストにログインしました。私がVMホストであるかどうかをプログラムで示すことができるいくつかの方法はありますか?
また、vmtoolsがインストールされていないと仮定します。
標準のLinuxツールを使用して、システム上のハードウェアを検査します。
cat /proc/scsi/scsi
または
ethtool -i eth0
または
dmidecode | grep -i vmware
これらのコマンドの出力に「VMWare」というメーカー名のハードウェアが表示されている場合は、VMWare VMを使用しています。システム構成とツールが異なるため、ここでは複数のコマンドを示します。
facter virtual
xenu
vMであることを示します。それが「物理的」を返した場合、反対は真です(VMではありません)。例:
facter virtual
Physical
virt-what と呼ばれる便利なアプリがあります。私はこれをVMWareで使用していませんが、Qemuでうまく機能しました。
/sys
の下を見回すと、アイデアを得ることができるかもしれません。たとえば、/sys/class/dmi/id/sys_vendor
の値はVMware, Inc.
です。
インストールされている場合は、 lshw を使用できます。コマンドlshw -class system
は私のシステムでこれを返します:
server1
description: Computer
product: VMware Virtual Platform
vendor: VMware, Inc.
version: None
serial: VMware-...
width: 64 bits
capabilities: smbios-2.4 dmi-2.4 vsyscall64 vsyscall32
一部の仮想環境は、仮想デバイスの一部に少しわかりやすい名前を付けます。たとえば、VirtualBoxは、それ自体を「VirtualBoxディスプレイアダプター」と呼ぶグラフィックスカードを提示します。しかし、それらを探して特定のVMとおそらく狭いバージョンのバージョンに結び付けます。
コードが、どのような仮想化をセットアップできるかを確認できる可能性があります。それが完全に失敗する場合は、VMにいる可能性があります。しかし、VM対応ハードウェアがないボックスにいるのは簡単です。
VMかどうかを判断するためのコードがたくさんあります。 red pill で始めて、そこから検索してください。 Offensive Computing のこの論文も参考になります。
それは、上記の簡単なものがどれも機能しない場合です:)
Linuxの場合、dmesg |grep DMI
と入力します。
[root @ myhost〜]#dmesg | grep DMI DMI 2.3 present。 DMI:Microsoft Corporation Virtual Machine/Virtual Machine、BIOS 090006 05/23/2012 [root @ myhost〜]#dmesg | grep -i virtual DMI:Microsoft Corporation Virtual Machine/Virtual Machine、BIOS 090006 05/23/2012 起動準仮想化カーネル裸のハードウェア 入力:/ devices/virtual/input/input1としてのMacintoshマウスボタンエミュレーション scsi 0:0:0:0:ダイレクトアクセスMSFT仮想ディスク1.0 PQ:0 ANSI:4 input:/ devices/virtual/input/input4としてのMicrosoft Vmbus HID準拠マウス
[root @ backdev1〜]#dmesg | grep DMI DMI 2.5 present。 DMI:IBM System x3650 M3-[7945AC1]-/ 90Y4784、BIOS-[D6E153AUS-1.12 ]-2011年6月30日
Macアドレスの最初の部分 here を検索して、仮想化会社に割り当てられているものとしてリストされているかどうかを確認することもできます。
仮想デバイスは、/ procのlspciまたはディスクデバイス情報、あるいはその両方によっても表示されます。
lspci | grep -i vmware
grep -i vmware /proc/scsi/scsi /proc/ide/*/model
Linuxでは、システム情報は/ sys/devices/virtual/dmi/id /で公開されます。入手可能なすべての情報を示す便利なスクリプトについては、私の回答 こちら を参照してください。
ルートは必要ありません。
これは、製造元と製品名に関する特定の情報を提供してくれるので、私にとってはうまくいきました。
dmidecode -t system|grep 'Manufacturer\|Product'
Dellサーバーでの出力:
Manufacturer: Dell Inc.
Product Name: PowerEdge C5220
Virtualbox VMでの出力:
Manufacturer: innotek GmbH
Product Name: VirtualBox
KVM/QEMUでの出力:
Manufacturer: QEMU
Product Name: Standard PC (i440FX + PIIX, 1996)
これは、サーバーをより適切に識別するためにこれらを解析できるスクリプトには最適ですが、インフラストラクチャでChefを使用している場合は、chefサーバーのノード属性Virtualization -> system
を確認できます。
通常、VMware CDROMドライバーまたはメモリードライバーがインストールされているため、dmesgが迅速に確認または拒否するため、これらのソリューションはどれも気に入りませんでした。
[server @ user〜] $ dmesg | grep VMware hda:VMware Virtual IDE CDROMドライブ、ATAPI CD/DVD-ROMドライブ ベンダー:VMwareモデル:仮想ディスクRev:1.0 ベンダー:VMwareモデル:仮想ディスクRev:1.0 ベンダー:VMwareモデル:仮想ディスクRev:1.0 ベンダー:VMwareモデル:仮想ディスクのリビジョン:1.0 ベンダー:VMwareモデル:仮想ディスクのリビジョン:1.0 ベンダー:VMwareモデル:仮想ディスクのリビジョン:1.0 ベンダー:VMwareモデル:仮想ディスクのリビジョン:1.0 VMwareメモリ制御ドライバが初期化されました
わたしはとても好きだ:
hostnamectl status
またはコンクリート:
hostnamectl status | grep "Chassis:"