1. 概要

通常、仮想Linuxシステムを使用する場合、従来のシステムとそれほど違和感はありません。 ただし、システムが仮想システムであるかどうかを知りたい場合もあります。

さらに、 VMware VirtualBox Linux KVM など、仮想システムが使用している仮想化テクノロジーを知りたいと思うかもしれません。 、 等々。

このチュートリアルでは、Linuxコマンドを使用して仮想化テクノロジーを決定する方法について説明します。

2. dmidecodeコマンドの使用

dmidecode コマンドは、 SMBIOS / DMI 標準に従って、システムBIOSに関する情報を報告できます。

dmidecodeコマンドはハードウェアとファームウェアの情報を読み取ろうとするため、コマンドを実行するにはルートアクセスが必要です

仮想化されていないシステムで作業している場合、キーsystem-product-nameを照会してマザーボード情報を取得します。

$ sudo dmidecode -s system-product-name
H87-D3H

上記の出力は、システムが(ギガバイト)H87-D3Hマザーボードを搭載したマシンで実行されていることを示しています。

ただし、システムが仮想マシンで実行されている場合は、同じコマンドで仮想化製品の名前が出力されます。

このコマンドをいくつかの一般的な仮想化テクノロジーでテストして、レポートの内容を確認してみましょう。

まず、VirtualBoxの仮想システムでコマンドを実行しましょう。

$ sudo dmidecode -s system-product-name
VirtualBox

正しい仮想化環境を報告します。

次に、KVMおよびVMware仮想マシンでコマンドを試してみましょう。

$ sudo dmidecode -s system-product-name
KVM
$ sudo dmidecode -s system-product-name
VMware Virtual Platform

root アクセス権がある場合、 dmidecode コマンドを使用することは、仮想化情報を取得するための非常に簡単な方法です。

3. lshwコマンドの使用

lshw コマンドは、ハードウェア構成の詳細情報を一覧表示するための便利なツールです。

このツールを使用し、システム クラスにクエリを実行して、仮想化に関する情報を取得できます。

仮想化テクノロジーデータを取得するにはルートアクセスが必要であることに注意してください

仮想化されていないシステムでコマンドを実行することから始めて、それが何を出力するかを見てみましょう。

$ sudo lshw -class system
yk-arch                     
    description: Desktop Computer
    product: H87-D3H (To be filled by O.E.M.)
    vendor: Gigabyte Technology Co., Ltd.
    version: To be filled by O.E.M.
    serial: To be filled by O.E.M.
    width: 64 bits
    capabilities: smbios-2.7 dmi-2.7 smp vsyscall32
    configuration: administrator_password=disabled boot=normal ...

dmidecode と同様に、 lshw コマンドは、「product」フィールドにマザーボード情報を出力します。

次に、さまざまな仮想システムで何が報告されるかを見てみましょう。

まず、VirtualBoxの仮想マシンで実行してみましょう。

$ sudo lshw -class system
myVbox.test                     
    description: Computer
    product: VirtualBox
    vendor: Oracle
    version: 1.2
    serial: 0
    width: 64 bits
    capabilities: smbios-2.5 dmi-2.5 smp vsyscall32
    configuration: family=Virtual Machine uuid=......

product フィールドには、予想される仮想化テクノロジー情報が入力されています。

KVMとVMwareのシステムで同じコマンドを試してみましょう。

$ sudo lshw -class system
myKvm.test                     
    description: Computer
    product: KVM
    vendor: Red Hat
    version: 1.2
    serial: 0
    width: 64 bits
    capabilities: smbios-2.4 dmi-2.4 smp vsyscall32
    configuration: family=Virtual Machine uuid=......
$ sudo lshw -class system
myVmware.test                     
    description: Computer
    product: VMware Virtual Platform
    vendor: VMware, Inc.
    version: 1.2
    serial: 0
    width: 64 bits
    capabilities: smbios-2.4 dmi-2.4 smp vsyscall32
    configuration: family=Virtual Machine uuid=......

lshw コマンドは、rootアクセス権がある場合に問題を解決するための便利なオプションです。

4. systemd-detect-virtコマンドの使用

最近のほとんどのLinuxシステムは、システムおよびサービスマネージャーとしてsystemdを使用しています。 systemd パッケージには、仮想化テクノロジーの検出に使用できるsystemd-detect-virtユーティリティが付属しています。

このコマンドを実行するためにルートアクセスは必要ありません

いつものように、仮想化されていないシステムでコマンドを実行した場合のレポートを見てみましょう。

$ systemd-detect-virt
none

出力が示すように、システムが仮想マシンで実行されていない場合、結果として「none」が表示されます

次に、VirtualBoxの仮想マシンで実行したときに得られる出力を確認しましょう。

$ systemd-detect-virt
oracle

「VirtualBox」のようなものではなく、「oracle」と表示されます。 これは、systemd-detect-virtコマンドが仮想化テクノロジーのIDのみを表示するためです。

マニュアルページには、詳細なIDと製品情報をリストした表があります。 たとえば、IDoracle」の製品情報は次のとおりです。

 oracle                 Oracle VM VirtualBox   
                        (historically marketed 
                        by innotek and Sun    
                        Microsystems), for     
                        legacy and KVM         
                        hypervisor

それでは、KVMとVMwareの仮想マシンでコマンドを実行してみましょう。

$ systemd-detect-virt
kvm
$ systemd-detect-virt
vmware

上で見たように、 systemd-detect-virt コマンドは、仮想化テクノロジーの情報を取得するのに非常に便利です。

–list オプションを使用して、検出可能なコンテナーとVM環境の完全なリストを取得できます。

$ systemd-detect-virt --list
none
kvm
qemu
bochs
xen
uml
vmware
oracle
microsoft
...

5. hostnamectlコマンドの使用

便利なsystemd-detect-virtコマンドに加えて、systemdパッケージはhostnamectlコマンドを提供します。 このユーティリティを使用すると、システムのホスト名と関連する設定を照会および変更できます。

hostnamectl コマンドを使用して、仮想化テクノロジーを検出することもできます。

systemd-detect-virt コマンドと同じように、hostnamectlコマンドを使用して情報を照会する場合は、rootアクセスは必要ありません。

まず、 hostnamectl が、仮想化されていないシステムで実行した場合に何を示すかを見てみましょう。

$ hostnamectl
   Static hostname: YK-Arch
         Icon name: computer-desktop
           Chassis: desktop
        Machine ID: d0fdfacb84184cee9507e0e1ac518e73
           Boot ID: 9f88561ec0864abfa51575e8ec74732f
  Operating System: Arch Linux
            Kernel: Linux 5.7.9-arch1-1
      Architecture: x86-64

上記の出力は、詳細なディストリビューション名、オペレーティングシステム、およびカーネル情報を示しています。

さらに、VirtualBoxゲストシステムで同じコマンドを再度実行します。 異なる情報が報告されているかどうかを確認しましょう。

$ hostnamectl
   Static hostname: myVbox.test
         Icon name: computer-vm
           Chassis: vm
        Machine ID: b4998efc50ae499881b024c258934223
           Boot ID: f885614223a240b3b3b04cef3a934f18
    Virtualization: oracle
  Operating System: CentOS Linux 7 (Core)
            Kernel: Linux 3.10.0-514.10.2.el7.x86_64
      Architecture: x86-64

上記の出力では、アイコン名シャーシは、それが「 vm 」(仮想マシン)であることを示しています。

さらに、仮想化という新しいフィールドが表示されます。 このフィールドは、システムが実行されている仮想化テクノロジーを示します。 この場合、それは oracle (VirtualBox)です。

コマンドがKVMおよびVMware仮想マシンで何を報告するかを見てみましょう。

$ hostnamectl
   Static hostname: myKvm.test
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 55296cb0566a4aaca10b8e3a4b28b432
           Boot ID: 1bb259b0eb064d9eb8a22d112211b334
    Virtualization: kvm
  Operating System: Ubuntu 19.10
            Kernel: Linux 5.3.0-59-generic
      Architecture: x86-64
$ hostnamectl
   Static hostname: myVmware.test
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 18a0752e1ccbeef09da51ad17fab1f1b
           Boot ID: beefdc99969e4a4a8525ff842b383c62
    Virtualization: vmware
  Operating System: Ubuntu 19.10
            Kernel: Linux 5.3.0-59-generic
      Architecture: x86-64

6. 結論

この記事では、さまざまな仮想化テクノロジーを検出するためのさまざまなLinuxコマンドユーティリティについて説明しました。

これらのユーティリティはすべて、非常に簡単に使用できます。 ただし、 root アクセスが必要なものと、そうでないものがあります。 ニーズに最適なツールをお選びいただけます。