仮想化テクノロジーを決定する簡単な方法
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と製品情報をリストした表があります。 たとえば、ID「oracle」の製品情報は次のとおりです。
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 アクセスが必要なものと、そうでないものがあります。 ニーズに最適なツールをお選びいただけます。