仮想化されているかどうかに関係なく、Linuxマシンにコマンドラインでアクセスできます。それが実行されている仮想化テクノロジーの種類(VMWare、VirtualBox、KVM、OpenVZ、Xenなど)があるかどうかを確認したいと思います。これは敵意のある環境ではありません。VMはそれ自体を偽装しようとしています。私がほとんど知らない不安定なサーバーを診断しています。
より正確には、私は誰かが問題を診断するのを手伝っています、私は実権を握っていません。したがって、「このコマンドをコピーして貼り付ける」などの指示を伝える必要があり、「_/proc
_をどこかに持ち込む」のではなく、理想的には、lshw
のようなものになるでしょう:簡単にインストールできる(プリインストールされていない場合)コマンドは、関連する情報をざっと見て出力します。
このシステムがゲストである可能性のある仮想化テクノロジーを判断する最も簡単な方法は何ですか?提案で、最終的に検出できるテクノロジー(ベアハードウェアを含む)と最終的に排除できるテクノロジーについて言及していただければ幸いです。私は主にLinuxに興味がありますが、それが他のunicesでも機能するのであれば、それは素晴らしいことです。
dmidecode -s system-product-name
Vmware Workstation、VirtualBox、KVMを備えたQEMU、ゲストOSとしてUbuntuを備えたスタンドアロンQEMUでテストしました。その他にも、使い慣れたプラットフォームを追加しています。
VMwareワークステーション
root@router:~# dmidecode -s system-product-name
VMware Virtual Platform
VirtualBox
root@router:~# dmidecode -s system-product-name
VirtualBox
KVMを使用したQemu
root@router:~# dmidecode -s system-product-name
KVM
Qemu(エミュレート)
root@router:~# dmidecode -s system-product-name
Bochs
Microsoft VirtualPC
root@router:~# dmidecode | egrep -i 'manufacturer|product'
Manufacturer: Microsoft Corporation
Product Name: Virtual Machine
Virtuozzo
root@router:~# dmidecode
/dev/mem: Permission denied
Xen
root@router:~# dmidecode | grep -i domU
Product Name: HVM domU
ベアメタルでは、これはコンピューターまたはマザーボードモデルのIDを返します。
/dev/disk/by-id
dmidecode
を実行する権限がない場合は、次を使用できます。
仮想化テクノロジー:QEMU
ls -1 /dev/disk/by-id/
出力
[root@Host-7-129 ~]# ls -1 /dev/disk/by-id/
ata-QEMU_DVD-ROM_QM00003
ata-QEMU_HARDDISK_QM00001
ata-QEMU_HARDDISK_QM00001-part1
ata-QEMU_HARDDISK_QM00002
ata-QEMU_HARDDISK_QM00002-part1
scsi-SATA_QEMU_HARDDISK_QM00001
scsi-SATA_QEMU_HARDDISK_QM00001-part1
scsi-SATA_QEMU_HARDDISK_QM00002
scsi-SATA_QEMU_HARDDISK_QM00002-part1
コンテナがsystemd
を実行している場合:
$ systemd-detect-virt
lxc
KVMたとえば、次を返します:
kvm
そして非仮想化ホスト上:
none
以下も参照してください。
このコマンドは、さまざまなVMテクノロジーゲストで次の出力を生成します。
$ Sudo lshw -class system
KVM
mungr
description: Computer
product: KVM
vendor: Red Hat
width: 64 bits
capabilities: smbios-2.4 dmi-2.4 vsyscall64 vsyscall32
バーチャルボックス
Fedora17
description: Computer
product: VirtualBox ()
vendor: innotek GmbH
version: 1.2
serial: 0
width: 64 bits
capabilities: smbios-2.5 dmi-2.5 vsyscall32
VMWare
partedmagic
description: Computer
product: VMware Virtual Platform ()
vendor: VMware, Inc.
version: None
serial: VMware-56 4d 94 a0 53 e3 f3 c6-f9 a6 eb 1a 89 70 04 57
width: 32 bits
capabilities: smbios-2.4 dmi-2.4 smp-1.4 smp
Ubuntu/Debianを使用している場合は、open-vm-tools
パッケージをインストールできます。 vmware-checkvm
を提供します。数字のみを返します。 0
はVMであることを意味し、1
は物理システムであることを意味します。
KVM=の場合、/proc/scsi/scsi
およびethtool
オプションは次のように表示されます。
$ cat /proc/scsi/scsi
Attached devices:
Host: scsi1 Channel: 00 Id: 00 Lun: 00
Vendor: QEMU Model: QEMU DVD-ROM Rev: 0.9.
Type: CD-ROM ANSI SCSI revision: 05
$ ethtool -i eth0
driver: virtio_net
version:
firmware-version:
bus-info: virtio0
supports-statistics: no
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no
Virtio_netはKVMの一部です。 /proc/scsi/scsi
は、VM内にいることと、おそらくKVMであることを示しています。
以下のコマンドを使用して、grep
'ing〜dmesg
ログ。
$ Sudo dmesg | grep -i virtual
VMWare
VMware vmxnet virtual NIC driver
Vendor: VMware Model: Virtual disk Rev: 1.0
hda: VMware Virtual IDE CDROM Drive, ATAPI CD/DVD-ROM drive
QEmuまたはKVM
"-cpu Host"
オプションが使用されていない場合、QEmuおよびKVMは自身を次のように識別します。
CPU: AMD QEMU Virtual CPU version 0.9.1 stepping 03
それ以外の場合、ホストのCPU情報はdmesg
または/proc/cpuinfo
の両方で使用されます。ただし、次のように表示されます。
[ 0.000000] Booting paravirtualized kernel on KVM
新しいカーネルでは、準仮想化の下で実行されていることを理解しています。
Microsoft VirtualPC
hda: Virtual HD, ATA DISK drive
hdc: Virtual CD, ATAPI CD/DVD-ROM drive
Xen
$ Sudo dmesg | grep -i xen
Xen virtual console successfully installed as tty1
Virtuozzo
# method #1
$ Sudo dmesg
(returns no output)
# method #2
$ Sudo cat /var/log/dmesg
(returns no output)
# method #3
$ Sudo ls -al /proc/vz
veinfo veinfo_redir veredir vestat vzaquota vzdata
virt-what
スクリプト はほとんどのケースをうまくカバーしているようです...
著者からの免責事項が好きdo:
ほとんどの場合、このプログラムを使用するのは間違っています。代わりに、実際に使用したい固有の機能を検出する必要があります。
EL5およびEL6システムでは、過去数年間、デフォルトインストールの一部として表示されていました。 Ubuntuにはそれがあり、ソースも利用できます。
スクリプトによって検出されたファクトは ここにリストされています ですが、エッジの場合に簡単に拡張できます。
isVMware() { [[ $(dmidecode -s system-manufacturer) = 'VMware, Inc.' ]]; }
isXen () { [[ $(dmidecode -s system-manufacturer) = 'Xen' ]]; }
isKVM () { [[ $(dmidecode -s system-product-name) = 'KVM' ]]; }
isVBox () { [[ $(dmidecode -s system-product-name) = 'VirtualBox' ]]; }
isVM () { isVMware || isXen || isKVM || isVBox; }
これらは私たちの会社で使用するテストです。
hostnamectl
はあなたの友達です(systemd
が必要です)。
いくつかの例:
仮想化なしのラップトップ
$ hostnamectl status
Static hostname: earth.gangs.net
Icon name: computer-laptop
Chassis: laptop
Machine ID: 18a0752e1ccbeef09da51ad17fab1f1b
Boot ID: beefdc99969e4a4a8525ff842b383c62
Operating System: Ubuntu 16.04.2 LTS
Kernel: Linux 4.4.0-66-generic
Architecture: x86-64
Xen
$ hostnamectl status
Static hostname: pluto.gangs.net
Icon name: computer-vm
Chassis: vm
Machine ID: beef39aebbf8ba220ed0438b54497609
Boot ID: beefc71e97ed48dbb436a470fe1920e1
Virtualization: xen
Operating System: Ubuntu 16.04.2 LTS
Kernel: Linux 3.13.0-37-generic
Architecture: x86-64
OpenVZ
$ hostnamectl status
Static hostname: mars.gangs.net
Icon name: computer-container
Chassis: container
Machine ID: 55296cb0566a4aaca10b8e3a4b28beef
Boot ID: 1bb259b0eb064d9eb8a22d112211beef
Virtualization: openvz
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 2.6.32-042stab120.16
Architecture: x86-64
[〜#〜] kvm [〜#〜]
$ hostnamectl status
Static hostname: mercury.gangs.net
Icon name: computer-vm
Chassis: vm
Machine ID: beeffefc50ae499881b024c25895ec86
Boot ID: beef9c7662a240b3b3b04cef3d1518f0
Virtualization: kvm
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-514.10.2.el7.x86_64
Architecture: x86-64
インストールを手伝っている人がfacter
を入手したら、次のことができます
facter virtual
Rootアクセスは必要ありません。
Debianホスト上のDebianゲスト:
[user@guest]$ facter virtual
virtualbox
これがXen/KVM/Qemuでどれほどうまく機能するかについては保証できません...
「最近の」Linuxカーネルでは、カーネルがハイパーバイザーを検出し、dmesg
で簡単に利用できるメッセージを出力します。これは単にあなたに教えてくれます:
dmesg | grep "Hypervisor detected"
例えば:
$ dmesg | grep "Hypervisor detected"
Hypervisor detected: VMware
「最近」の意味については、正式にリリースされたカーネルのバージョンは不明ですが、この機能をコードベースに導入したコミットは2010年5月7日でした。 ここ を参照してください。
これにより、使用されている仮想化テクノロジーのタイプが検出され、出力されます。
systemd-detect-virt
使用 --container
および--vm
検出される仮想化のタイプを制限するオプション。
詳細なしで、仮想化が検出されたかどうかだけを知りたい場合は、終了コードを確認する方が簡単です。仮想化が検出された場合は終了コード0を返し、それ以外の場合はゼロ以外を返します。
VirtualBoxの場合、lspci | grep -i virtualbox
、それは以下を与えます:
$ lspci | grep -i virtualbox
00:02.0 VGA compatible controller: InnoTek Systemberatung GmbH VirtualBox Graphics Adapter
00:04.0 System peripheral: InnoTek Systemberatung GmbH VirtualBox Guest Service
または、dmidecode -s system-product-name
(@Rahul Patilが示唆しているように)は、より直接的です(ただし、ルートが必要です)。
$ Sudo dmidecode -s system-product-name
VirtualBox
KVM以外のQEMUの場合、dmidecode -s system-product-name
は混乱してBochsを返しますが、dmesg | grep -i qemu
は機能します(QEMUがエミュレートするストレージデバイスは通常、QEMU HARDDISK
、QEMU DVD-ROM
など...)。
時にはそれはトリッキーです:)
root@server:~# dmidecode -s system-product-name
Bochs
root@server:~# dmidecode | egrep -i 'manufacturer|product|vendor'
Vendor: Bochs
Manufacturer: Bochs
Product Name: Bochs
Manufacturer: Bochs
Manufacturer: Bochs
Manufacturer: Bochs
Manufacturer: Bochs
Manufacturer: Bochs
root@server:~# virt-what
root@server:~# dpkg -l |grep virt-what
ii virt-what 1.2-1 detect if we are running in a virtual machine
root@server:~# egrep -i 'virtual|vbox' /var/log/dmesg
[ 0.000000] Booting paravirtualized kernel on KVM
[ 0.385701] input: Macintosh mouse button emulation as /devices/virtual/input/input0
どうやら仮想化にはいくつかの部分があります-私の場合、QEMU、BochsおよびKVM(当時はUbuntu 14.04))。使用中のハイパーバイザーを見つける最も簡単な方法は次のとおりです:
Sudo apt-get install virt-what
Sudo virt-what
私の場合は単にkvm
を返しました。これは私が探していた基本情報(私が考えるOPでもあります)でした。これにより、許可されていることがわかります(たとえば、ipsetを実行してDDoS攻撃をブロックします)。 VM間でリソースを共有する方法。
また試しました
Sudo dmidecode -s system-product-name
そして
Sudo lshw -class system
どちらもKVM=については言及していませんが、どちらも私のハードウェアエミュレーションがBochs
によって提供されたことを知らなかったと告白しましたが、クイック検索が見つかりました興味深い情報( http://en.wikipedia.org/wiki/Bochs )。lshwコマンドは、dmidecodeよりも少し情報が豊富です(たとえば、64ビットであると教えてくれます)。
他の回答では、実際に役立つ情報は何もありませんでした-facter virtual
がphysical
を返し、ls -1 /dev/disk/by-id/
がata-QEMU_DVD-ROM_QM00003
を返しました。これは、QEMUが関与していることを示していますが、アクセスできませんとにかくエミュレートされたDVD-ROM。
Debianには、仮想化タイプを検出するためのこの小さなパッケージが付属しています。
$ Sudo apt-get install virt-what
$ virt-what
そしてPerlの依存関係のために少し大きくなります:
$ Sudo apt-get install imvirt
$ imvirt
通常どおり実行します。
free
cat /proc/meminfo
cat /proc/cpuinfo
dmesg
htop
lshw
dmidecode
lsmod
hwinfo