はじめに
この実験では、Linux 環境が仮想マシン上で動作しているかどうかを判断する方法を学びます。これを達成するために、3 つの異なる方法を探ります。具体的には、システム情報を調べるための dmidecode
コマンドの使用、仮想化検出用に特別に設計された virt-what
ツールの利用、および /proc/cpuinfo
ファイル内の CPU フラグの調査です。この実験の終わりまでに、Linux の仮想化環境を識別する実用的な技術を身につけることができるようになります。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
この実験では、Linux 環境が仮想マシン上で動作しているかどうかを判断する方法を学びます。これを達成するために、3 つの異なる方法を探ります。具体的には、システム情報を調べるための dmidecode
コマンドの使用、仮想化検出用に特別に設計された virt-what
ツールの利用、および /proc/cpuinfo
ファイル内の CPU フラグの調査です。この実験の終わりまでに、Linux の仮想化環境を識別する実用的な技術を身につけることができるようになります。
このステップでは、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
bios
、system
、baseboard
、chassis
などの異なるタイプを試して、各コンポーネントの詳細を確認してください。
dmidecode
を使用することは、システム管理者やハードウェアの問題をトラブルシューティングする必要がある人、あるいは単に基盤となるシステム構成を理解したい人にとって基本的なスキルです。
Continue をクリックして次のステップに進みます。
このステップでは、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
ファイルを探索します。これは Linux カーネルによって提供される仮想ファイルで、システム内の CPU に関する情報が含まれています。このファイルは、プロセッサのモデル、速度、キャッシュサイズ、サポートされている機能(フラグ)など、プロセッサに関する詳細情報の優れた情報源です。
/proc
ファイルシステムは、カーネルのデータ構造に対するインターフェースを提供する擬似ファイルシステムです。/proc
内のファイルはディスクに保存されておらず、アクセスするときにカーネルによって動的に生成されます。
/proc/cpuinfo
の内容を表示するには、cat
や less
などのコマンドラインユーティリティを使用できます。cat
は内容全体をターミナルに出力し、less
は内容をページごとにスクロールできます。/proc/cpuinfo
はかなり長い場合があるため、less
の方が便利なことが多いです。
ターミナルを開き、以下のコマンドを入力して cat
を使用して CPU 情報を表示します。
cat /proc/cpuinfo
システム内の各 CPU コアに関する詳細情報が表示されます。出力には、processor
、vendor_id
、model name
、cpu MHz
、cache size
、flags
などの行が含まれます。
以下は、出力の例です(簡潔にするために一部の出力を省略しています)。
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
)、特定の命令セット(sse
、avx
など)、セキュリティ機能などの機能を示しています。
また、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 フラグの調査など、仮想化を検出する追加の手法を探索します。これらの方法は、特定のシステム特性や設定を調べることで、仮想化環境の存在を識別する代替手段を提供します。