Linux で環境が仮想マシンかどうかを確認する方法

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Linux 環境が仮想マシン上で動作しているかどうかを判断する方法を学びます。これを達成するために、3 つの異なる方法を探ります。具体的には、システム情報を調べるための dmidecode コマンドの使用、仮想化検出用に特別に設計された virt-what ツールの利用、および /proc/cpuinfo ファイル内の CPU フラグの調査です。この実験の終わりまでに、Linux の仮想化環境を識別する実用的な技術を身につけることができるようになります。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux(("Linux")) -.-> linux/PackagesandSoftwaresGroup(["Packages and Softwares"]) linux/BasicSystemCommandsGroup -.-> linux/man("Manual Access") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") linux/UserandGroupManagementGroup -.-> linux/sudo("Privilege Granting") linux/PackagesandSoftwaresGroup -.-> linux/apt("Package Handling") subgraph Lab Skills linux/man -.-> lab-558808{{"Linux で環境が仮想マシンかどうかを確認する方法"}} linux/cat -.-> lab-558808{{"Linux で環境が仮想マシンかどうかを確認する方法"}} linux/grep -.-> lab-558808{{"Linux で環境が仮想マシンかどうかを確認する方法"}} linux/sudo -.-> lab-558808{{"Linux で環境が仮想マシンかどうかを確認する方法"}} linux/apt -.-> lab-558808{{"Linux で環境が仮想マシンかどうかを確認する方法"}} end

dmidecode でシステム情報を確認する

このステップでは、dmidecode コマンドを使用してシステムのハードウェアに関する詳細情報を取得する方法を学びます。dmidecode は、システムのコンポーネントの説明を含む DMI/SMBIOS (Desktop Management Interface / System Management BIOS) テーブルからデータを読み取ります。

このコマンドは、Linux システムが動作しているハードウェアの詳細、たとえばマザーボード、CPU、メモリなどを理解するのに非常に役立ちます。

DMI テーブルにアクセスするには root 権限が必要なので、dmidecode とともに sudo を使用する必要があります。

ターミナルが開いていない場合は開きます。デスクトップの左側にある Xfce Terminal アイコンから開くことができます。

次に、以下のコマンドを入力して Enter キーを押します。

sudo dmidecode

このコマンドは、システムのハードウェアに関する大量の情報を出力します。出力をスクロールして、「BIOS Information」、「System Information」、「Base Board Information」、「Processor Information」、「Memory Device」などの異なるセクションを確認してください。

出力は次のようになる場合があります(出力の一部は簡潔にするために省略されています)。

## dmidecode 3.3
Getting SMBIOS data from sysfs.
SMBIOS 3.3.0 present.

Handle 0x0000, DMI type 0, 26 bytes
BIOS Information
        Vendor: SeaBIOS
        Version: 1.16.0-1.fc36
        Release Date: 07/07/2022
        Address: 0xE0000
        Runtime Size: 128 kB
        ROM Size: 64 kB
        Characteristics:
                PCI is supported
                BIOS is upgradeable
                BIOS shadowing is allowed
                Boot from CD is supported
                Selectable boot is supported
                BIOS ROM is socketed
                EDD is supported
                5.25" / 1.2 MB floppy services are supported (int 13h)
                3.5" / 720 kB floppy services are supported (int 13h)
                3.5" / 1.44 MB floppy services are supported (int 13h)
                8042 keyboard services are supported (int 9h)
                CGA/mono video services are supported (int 10h)
                AT/XT compatible keyboard services are supported (int 16h)
                Printer services are supported (int 17h)
                CGA/mono video is supported (int 10h)
                ACPI is supported
                USB legacy is supported
                BIOS boot specification is supported
                Targeted content distribution is supported
                UEFI is supported
        BIOS Revision: 1.16

Handle 0x0001, DMI type 1, 27 bytes
System Information
        Manufacturer: QEMU
        ProductName: Standard PC (Q35 + ICH9, 2009)
        Version: pc-q35-7.0
        Serial Number: <filtered>
        UUID: <filtered>
        Wake-up Type: Power Switch
        SKU Number: <filtered>
        Family: Virtual Machine

Handle 0x0002, DMI type 2, 17 bytes
Base Board Information
        Manufacturer: QEMU
        ProductName: Standard PC (Q35 + ICH9, 2009)
        Version: pc-q35-7.0
        Serial Number: <filtered>
        Asset Tag: <filtered>
        Features:
                Board is a hosting board
                Board is replaceable
        Location In Chassis: <filtered>
        Chassis Handle: 0x0003
        Type: Motherboard
        Contained Object Handles: 0

... (output continues)

また、-t オプションに続けてタイプ番号またはキーワードを指定することで、特定のタイプのハードウェアに関する情報のみを表示するように出力をフィルタリングすることもできます。たとえば、CPU 情報のみを表示するには、次のように使用します。

sudo dmidecode -t processor

または、メモリデバイスに関する情報を表示するには、次のようにします。

sudo dmidecode -t memory

biossystembaseboardchassis などの異なるタイプを試して、各コンポーネントの詳細を確認してください。

dmidecode を使用することは、システム管理者やハードウェアの問題をトラブルシューティングする必要がある人、あるいは単に基盤となるシステム構成を理解したい人にとって基本的なスキルです。

Continue をクリックして次のステップに進みます。

virt-what で仮想化を検出する

このステップでは、Linux システムが仮想マシン内で動作しているか、ベアメタルハードウェア上で動作しているかを判断する方法を学びます。これは、システム構成、パフォーマンスチューニング、またはライセンスに関して重要なことが多いです。

この目的のために特別に設計された virt-what コマンドを使用します。このコマンドは、仮想化の兆候をチェックし、検出したハイパーバイザーの名前を表示します。

まず、virt-what パッケージをインストールする必要があります。前の実験で htop をインストールしたときと同じように apt を使用します。

ターミナルを開き、以下のコマンドを実行して virt-what をインストールします。

sudo apt update
sudo apt install virt-what -y

-y フラグは、インストール中のすべてのプロンプトに自動的に「yes」と回答し、インストールプロセスを非対話的に行います。

インストールが完了したら、virt-what コマンドを実行できます。

virt-what

このコマンドの出力によって、システムが仮想化されているかどうか、そして仮想化されている場合はどの仮想化技術が使用されているかがわかります。

仮想化環境で動作する LabEx 環境では、次のような出力が表示されるはずです。

qemu
kvm

これは、システムが QEMU/KVM 仮想マシン内で動作していることを示しています。システムが物理ハードウェア上で動作している場合、virt-what は通常何も出力しません。

システムが仮想化されているかどうかを理解することは、多くのシステム管理タスクにとって重要な情報です。virt-what はこの情報を簡単かつ信頼性高く取得する方法を提供します。

Continue をクリックして次のステップに進みます。

/proc/cpuinfo の CPU フラグを調べる

このステップでは、/proc/cpuinfo ファイルを探索します。これは Linux カーネルによって提供される仮想ファイルで、システム内の CPU に関する情報が含まれています。このファイルは、プロセッサのモデル、速度、キャッシュサイズ、サポートされている機能(フラグ)など、プロセッサに関する詳細情報の優れた情報源です。

/proc ファイルシステムは、カーネルのデータ構造に対するインターフェースを提供する擬似ファイルシステムです。/proc 内のファイルはディスクに保存されておらず、アクセスするときにカーネルによって動的に生成されます。

/proc/cpuinfo の内容を表示するには、catless などのコマンドラインユーティリティを使用できます。cat は内容全体をターミナルに出力し、less は内容をページごとにスクロールできます。/proc/cpuinfo はかなり長い場合があるため、less の方が便利なことが多いです。

ターミナルを開き、以下のコマンドを入力して cat を使用して CPU 情報を表示します。

cat /proc/cpuinfo

システム内の各 CPU コアに関する詳細情報が表示されます。出力には、processorvendor_idmodel namecpu MHzcache sizeflags などの行が含まれます。

以下は、出力の例です(簡潔にするために一部の出力を省略しています)。

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 158
model name      : Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz
stepping        : 13
microcode       : 0xffffffff
cpu MHz         : 2904.000
cache size      : 16384 KB
physical id     : 0
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 22
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves arch_capabilities
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds mmio_stale_data retbleed
bogomips        : 5808.00
clflush size    : 64
cache_alignment : 64
address sizes   : 43 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 158
model name      : Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz
stepping        : 13
microcode       : 0xffffffff
cpu MHz         : 2904.000
cache size      : 16384 KB
physical id     : 0
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 22
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves arch_capabilities
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds mmio_stale_data retbleed
bogomips        : 5808.00
clflush size    : 64
cache_alignment : 64
address sizes   : 43 bits physical, 48 bits virtual
power management:

flags 行は特に興味深いもので、CPU がサポートする様々な機能や拡張機能がリストされています。これらのフラグは、仮想化サポート(vmx または svm)、特定の命令セット(sseavx など)、セキュリティ機能などの機能を示しています。

また、grep を使用して /proc/cpuinfo 内の特定の情報を検索することもできます。たとえば、モデル名を検索するには、次のようにします。

grep "model name" /proc/cpuinfo

これにより、各 CPU コアのモデル名が出力されます。

model name      : Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz
model name      : Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz

または、特定のフラグ(たとえば vmx(Intel VT-x 仮想化サポート))の有無を確認するには、次のようにします。

grep "vmx" /proc/cpuinfo

出力に vmx が含まれている場合、CPU は Intel VT-x 仮想化をサポートしています。

/proc/cpuinfo を探索することは、カーネルの観点からシステムのプロセッサの機能を理解する基本的な方法です。

Continue をクリックしてこの実験を完了します。

まとめ

この実験では、いくつかの方法を使って Linux 環境が仮想マシンかどうかを確認する方法を学びました。まず、sudo を使って dmidecode コマンドを実行し、DMI/SMBIOS テーブルにアクセスし、BIOS、システム、プロセッサの詳細など、システムのハードウェア情報を取得しました。このコマンドは、基盤となるハードウェアコンポーネントの包括的な概要を提供します。

次に、virt-what コマンドの使用や /proc/cpuinfo ファイル内の CPU フラグの調査など、仮想化を検出する追加の手法を探索します。これらの方法は、特定のシステム特性や設定を調べることで、仮想化環境の存在を識別する代替手段を提供します。