GNU/Linux >> Linux の 問題 >  >> Linux

VMから仮想化を検出する7つの方法[Xen、VirtualBox、KVM、OpenStack with KVM]

Techglimpseでは、VPSまたは仮想マシンからの「仮想化検出」に関するチュートリアルを作成するように求めるメールを読者から頻繁に受け取ります。ただし、Xen、VmWare、KVM、VirtualBox、HyperVなどの一般的なハイパーバイザー(少なくとも少数)で構成されるテストセットアップがなかったため、これらの電子メールにすぐに返信することはできませんでした。読者のためだけに、実行中のハイパーバイザーはほとんどありません。最後に、このチュートリアルでは、現在の仮想マシンを実行しているハイパーバイザーのタイプを特定するのに役立ついくつかのコマンドと掘り下げ(つまり、ログの読み取り)について説明します。

以下のコマンドは、Xen、KVM、VirtualBoxハイパーバイザー上に作成された仮想マシン、およびOpenStack-KVMIcehouseで実行されました。

方法1:システムログの読み取り

特定のハイパーバイザーは、システムログファイルでそのタイプ(ハイパーバイザーの名前と仮想化のタイプ(準仮想化、完全仮想化、HVMなど)を含む)に関する情報をリークします。これらの情報は、 / var / log / messageから取得できます。 または、「 dmesg」の出力をgrepすることによって ‘コマンド。

注: 前述のように、この方法は特定のハイパーバイザーでのみ機能します。たとえば、VirtualBoxとXenはログファイルの情報をリークしません。

Xen-VMの場合

[root@xen-vm ~]# dmesg |grep virtual

XenHypervisorのログファイルから情報を見つけることができません。

KVM-VMの場合

[centos@KVM-vm ~]$ dmesg |grep virtual
 [ 0.000000] Booting paravirtualized kernel on KVM
 [ 1.930785] systemd[1]: Detected virtualization 'kvm'.

VirtualBox-VMの場合

[root@VB-vm ~]# dmesg |grep virtual

VirtualBoxのログファイルから情報を見つけることができません。

OpenStackKVMVMの場合

[root@OS-vm ~]$ dmesg |grep virtual
 Booting paravirtualized kernel on KVM
 input: Macintosh mouse button emulation as /devices/virtual/input/input1

KVMホストマシン上

[root@kvm-host ~]$ dmesg |grep virtual
 Booting paravirtualized kernel on bare hardware

方法2:「dmidecode」コマンドを使用する

DMI(デスクトップ管理インターフェイス)– dmidecode 、ネイティブLinuxコマンドを使用して、ハードウェアおよびBIOS情報を人間が読める形式でダンプできます。

dmidecode ‘が実行されます:

XenVMの場合

[root@xen-vm ~]# dmidecode | egrep -i 'manufacturer|product'
 Manufacturer: Xen
 Product Name: HVM domU
 Manufacturer: Xen
 Manufacturer: Intel

KVMVM上

[centos@kvm-vm ~]$ sudo dmidecode | egrep -i 'manufacturer|product'
 Manufacturer: Bochs
 Product Name: Bochs
 Manufacturer: Bochs
 Manufacturer: Bochs

注:Bochs」が表示されます ‘メーカー、製品名などの値として…Bochsは、PCのプロセッサ、ディスプレイ、BIOS、メモリ、およびその他のハードウェアのエミュレーションを支援するX86-64互換のエミュレータおよびデバッガです。つまり、マシンは、VMであり、ほとんどがKVMであることを示唆するハードウェアをエミュレートしています。

VirtualBoxVM上

[root@VB-vm ~]# dmidecode | egrep -i 'manufacturer|product'
 Manufacturer: innotek GmbH
 Product Name: VirtualBox
 Manufacturer: Oracle Corporation
 Product Name: VirtualBox
 Manufacturer: Oracle Corporation

OpenStack-KVMVMの場合

[centos@OS-vm ~]$ sudo dmidecode | egrep -i 'manufacturer|product'
 Manufacturer: Red Hat
 Product Name: KVM

dmidecode」を実行すると 「ホストマシンでは、ハードウェアとBIOSの情報を取得します。

[root@kvm-host ~]# dmidecode | egrep -i 'manufacturer|product'
 Manufacturer: Supermicro
 Product Name: X8SIL
 Manufacturer: Supermicro
 Product Name: X8SIL
 Manufacturer: Supermicro
 Manufacturer: Intel
 Manufacturer: Kingston
 Manufacturer: Kingston
 Manufacturer: Kingston
 Manufacturer: Kingston
 Manufacturer: To Be Filled By O.E.M.
>

方法3:リスト/ dev / disk

仮想マシンには、ホストマシンからのハードウェアエミュレーションが必要です。たとえば、ホストからのディスクエミュレーション。したがって、「 / dev / disk / by-id」の下にファイルをリストするだけの場合 ‘、ハイパーバイザーで使用されているエミュレーターを簡単に確認できます。

XenVMの場合

[root@xen-vm~]# ls -l /dev/disk/by-id
 total 0
 lrwxrwxrwx 1 root root 9 Sep 29 15:14 ata-QEMU_DVD-ROM_QM00004 -> ../../hdd
 lrwxrwxrwx 1 root root 9 Sep 29 15:14 ata-QEMU_HARDDISK_QM00001 -> ../../hda
 lrwxrwxrwx 1 root root 10 Sep 29 15:14 ata-QEMU_HARDDISK_QM00001-part1 -> ../../hda1
 lrwxrwxrwx 1 root root 10 Sep 29 15:14 ata-QEMU_HARDDISK_QM00001-part2 -> ../../hda2

QEMU ホストに接続されているハードウェア全体をVMにエミュレートします。

KVMVM上

[centos@kvm-vm ~]$ ls -l /dev/disk/by-id
 lrwxrwxrwx. 1 root root 9 Sep 30 10:40 ata-QEMU_HARDDISK_QM00001 -> ../../sda
 lrwxrwxrwx. 1 root root 10 Sep 30 10:35 ata-QEMU_HARDDISK_QM00001-part1 -> ../../sda1

VirtualBoxVM上

[root@VB-vm ~]# ls -l /dev/disk/by-id
 total 0
 lrwxrwxrwx 1 root root 9 Oct 5 21:10 ata-VBOX_CD-ROM_VB2-01700376 -> ../../hdc
 lrwxrwxrwx 1 root root 9 Oct 5 21:10 ata-VBOX_HARDDISK_VBc7f3f571-49b6d797 -> ../../hda
 lrwxrwxrwx 1 root root 10 Oct 5 21:10 ata-VBOX_HARDDISK_VBc7f3f571-49b6d797-part1 -> ../../hda1
 lrwxrwxrwx 1 root root 10 Oct 5 21:10 ata-VBOX_HARDDISK_VBc7f3f571-49b6d797-part2 -> ../../hda2
 lrwxrwxrwx 1 root root 10 Oct 5 21:10 ata-VBOX_HARDDISK_VBc7f3f571-49b6d797-part3 -> ../../hda3

注: VBOX QEMUの代わりに VirtualBoxVMで

OpenStackKVMVMの場合

[centos@OS-vm ~]$ ls -l /dev/disk/by-id
 ls: cannot access /dev/disk/by-id: No such file or directory

OpenStackVMに関する情報が見つかりませんでした。おそらく、OpenStackはそれを隠していますか?わからない!

KVMホストマシン上

[root@kvm-host ~]# ls -l /dev/disk/by-id/
 total 0
 lrwxrwxrwx 1 root root 10 Sep 28 08:45 dm-name-centos-home -> ../../dm-2
 lrwxrwxrwx 1 root root 10 Sep 28 08:45 dm-name-centos-root -> ../../dm-1
 lrwxrwxrwx 1 root root 10 Sep 28 08:45 dm-name-centos-swap -> ../../dm-0
 lrwxrwxrwx 1 root root 10 Sep 28 08:45 dm-uuid-LVM-fQq4kAJfUvtqpELNejjkiUTcGNhMJAIGbhQF7TR1rpaLi9Z8e1OF19f0K4DKhtxg -> ../../dm-1
 lrwxrwxrwx 1 root root 10 Sep 28 08:45 dm-uuid-LVM-fQq4kAJfUvtqpELNejjkiUTcGNhMJAIGcstbiCdWXv3SCKfHb8lSPbApR525PK2W -> ../../dm-0
 lrwxrwxrwx 1 root root 10 Sep 28 08:45 dm-uuid-LVM-fQq4kAJfUvtqpELNejjkiUTcGNhMJAIGrt7RtF7L1qlwo2fjIIQh9FasnQoV3q9y -> ../../dm-2
 lrwxrwxrwx 1 root root 10 Sep 28 08:45 lvm-pv-uuid-rZHlC1-OyIn-lpf8-NU1e-uhLB-s3At-GyR6zx -> ../../sda2
 lrwxrwxrwx 1 root root 9 Sep 28 08:45 scsi-SAdaptec_ft_A8E727A8 -> ../../sda
 lrwxrwxrwx 1 root root 10 Sep 28 08:45 scsi-SAdaptec_ft_A8E727A8-part1 -> ../../sda1
 lrwxrwxrwx 1 root root 10 Sep 28 08:45 scsi-SAdaptec_ft_A8E727A8-part2 -> ../../sda2

方法4:virt-whatパッケージを使用する

すべてのLinuxフレーバーに「virt-what 」が付属しているわけではありません ‘パッケージがインストールされました。 「yum」を使用してインストールできます ‘。

[root@vm ~]# rpm -ivh virt-what-1.11-2.el5.x86_64.rpm
 warning: virt-what-1.11-2.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID e8562897
 Preparing... ########################################### [100%]
 1:virt-what ########################################### [100%]

XenVMの場合

[root@xen-vm ~]# virt-what
 xen
 xen-hvm

KVMVM上

[centos@kvm-vm ~]$ sudo virt-what
 kvm

VirtualBoxVM上

[root@VB-vm ~]# virt-what
 virtualbox

OpenStackKVMVMの場合

[root@OS-vm ~]# virt-what
 kvm

KVMホスト上

[root@kvm-host ~]# virt-what

注: ホストマシンでは出力が得られません。

方法5:virtdetectまたはsystemd-detect-virtを使用する

Virtdetect rpmは、「 Sys ::Detector ::Virtualization」に基づいています ‘perlスクリプト–詳細についてはこのチュートリアルを参照してください

方法6:「lshw」コマンドを使用する

lshw」をインストールします ‘以下のパッケージ:

[root@vm ]# yum install lshw
 Installed:
 lshw.x86_64 0:B.02.17-3.el6
 Complete!

XenVMの場合

[root@xen-vm ~]# lshw -class system
 description: Computer
 product: HVM domU
 vendor: Xen
 version: 4.1.5
 width: 32 bits
 capabilities: smbios-2.4 dmi-2.4 smp-1.4 smp
>

KVMVM上

[centos@kvm-vm~]$ sudo lshw -class system
 description: Computer
 product: Bochs
 vendor: Bochs
 width: 64 bits
 capabilities: smbios-2.4 dmi-2.4 vsyscall32

VirtualBoxVM上

[root@VB-vm ~]# lshw -class system
 description: Computer
 product: VirtualBox
 vendor: innotek GmbH
 version: 1.2
 serial: 0
 width: 32 bits
 capabilities: smbios-2.5 dmi-2.5
 description: System peripheral
 product: VirtualBox Guest Service

OpenStackKVMVMの場合

[root@OS-vm ]# lshw -class system
 description: Computer
 product: KVM
 vendor: Red Hat
 version: RHEL 6.6.0 PC
 width: 64 bits
 capabilities: smbios-2.4 dmi-2.4 vsyscall64 vsyscall32

KVMホスト上

[root@kvm-host ~]# lshw -class system
 description: Sealed-case PC
 product: X8SIL (To Be Filled By O.E.M.)
 vendor: Supermicro
 version: 0123456789
 width: 64 bits
 capabilities: smbios-2.6 dmi-2.6 vsyscall32

方法7:「ethtool」を使用する

一部のハイパーバイザーでは、「ethtool」コマンドを使用してネットワークデバイスがエミュレートされているかどうかを簡単に確認できます。

[centos@kvm-vm ]$ ethtool -i eth0
driver: virtio_net
version: 1.0.0
firmware-version:
bus-info: 0000:00:02.0
supports-statistics: no
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no

これらは、さまざまなハイパーバイザーで仮想化を検出できるようにするいくつかのコマンドです。別の方法を知っていますか?以下のコメントセクションで私たちを見てみましょう。


Linux
  1. PCでの仮想化、実用的なユースケースの初心者向けに説明

  2. 毎週の仮想マシン、ビルド スクリプト付き

  3. Samba を使用して Linux ゲストのフォルダーを VirtualBox の Windows ホストと共有する

  1. konsolekalendarコマンドを使用してLinuxターミナルからカレンダーを管理します

  2. オープンソース仮想化を使用してMacでLinuxを試す

  3. Macキーボードを使用して仮想ボックスのターミナルLinuxに貼り付ける方法は?

  1. Virshコマンドを使用してKVM仮想マシンスナップショットを作成する方法

  2. コマンドラインからOracleVirtualBox仮想マシンを管理する方法

  3. コマンドラインからOpenStackインスタンス(仮想マシン)のサイズを変更する方法