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