はじめに
LPIC305に向けて仮想化環境について学習すべく、学習環境の構築を行いましたが参考となるドキュメントが少なく苦労したため、KVM/QEMUについて学習する方向けに環境構築方法をまとめました。
1. 環境
Hyper-vに関しては、検証端末が異なりますので2環境分の情報を記載します。
また、ここではホストOSは仮想化ソフトウェアでインストールした仮想マシンのことを指し、ゲストOSはKVMで構築した仮想マシンとします。
なお、本環境は入れ子の仮想環境となるため、PCのCPU・メモリ・HDDが十分あることを前提にした内容としておりますので、ご了承ください。
※下記に構成図兼名称定義を示します
例えば、お手元の端末をPC、PCにインストールした仮想化ソフトウェアを通じて構築した仮想マシンをホストOS、ホストOS上で更に仮想化したマシンをゲストOSと定義します
1-1. 環境①
環境①は、Oracle VirtualBoxおよびVMware WorkStation Proを使用した環境の情報です
環境 | ソフトウェア | バージョン |
---|---|---|
PC | Microsoft Windows | Windows 11 Home |
CPU | Intel Corei7 | |
仮想化ソフトウェア | Oracle VirtualBox | 7.0.8 r 156879 |
仮想化ソフトウェア | VMware Workstation 17 Pro | 17.6.1 build-24319023 |
ホストOS | Ubuntu Desktop | 24.04.1 |
ゲストOS | Ubuntu Server | 24.04.1 |
1-2. 環境②
環境②は、Hyper-Vを使用した環境の情報です
Windows Proが必要だったため、Hyper-Vについては別のPCを使用しています
環境 | ソフトウェア | バージョン |
---|---|---|
PC | Microsoft Windows | Windows 11 Pro |
CPU | Intel Corei7 | |
仮想化ソフトウェア | Hyper-V | |
ホストOS | Ubuntu Desktop | 24.04.1 |
ゲストOS | Ubuntu Server | 24.04.1 |
2. 各環境の設定手順
-
VirtualBox、VMwareWorkstation Pro、Hyper-Vの各環境毎の仮想マシン構築手順を記載します
-
各ソフトウェアに関しては、デフォルト設定としているため、インストール手順は割愛します
-
PC自体の仮想化機能(BIOS設定)については、有効化されていることが前提となります
※BISO設定は、端末によって操作手順が異なるため、ここでは記載しませんので、各端末のマニュアルを参考にしてください -
BIOS画面の出し方は、下記を参考にしてください
- QEMUでは、デスクトップ環境が必要になるため、Ubuntu Desktopをインストールします
そのため、事前にインストールメディアをダウンロードしてください
下記サイトから、Ubuntu Desktopをダウンロード可能です
2-1. VirtualBox
VirtualBoxで環境構築する場合の手順です
インストールについては下記で実施したことがあるため、参考にしてみてください
※ただし、インストールしているバージョンは異なります
①下記設定をして「次へ」を押下します
- 名前:任意の仮想マシン名
- Folder:仮想マシンファイルを保存する場所
- ISO Image:インストールに使用するISOファイル(ここではubuntu-24.04.1-desktop-amd64.iso)
- Skip Unattended Installation:有効
②メモリとCPUを設定して、「次へ」を押下します
※ここでは、メモリ8192GB、CPU2コアで設定しています
注意
Ubuntu Desktopの最小要件のスペック+KVM上に構築するゲストOSへ割り当てるリソース分以上の容量を確保するようにしてください
例えば、ゲストOSがUbuntu Serverであれば、4GB+2GB=6Gよりも大きいメモリ容量にします
また、PCのリソースを超えない範囲で設定してください
③ハードディスクを設定して、「次へ」を押下します
※ここでは、50GBで設定しています
注意
Ubuntu Desktopの最小要件のスペック+KVM上に構築するゲストOSへ割り当てるリソース分以上の容量を確保するようにしてください
例えば、ゲストOSがUbuntu Serverであれば、25GB+5GB=30Gよりも大きいメモリ容量にします
また、PCのリソースを超えない範囲で設定してください
⑤仮想マシン作成されたら、ネットワーク設定を行い、インターネット接続できるようにします
注意
ここでは、ブリッジアダプター(PCと同じNW環境になる設定)を実施しています
共用のNW環境の場合は、IP重複する可能性等があるため、NAT+ホストオンリーアダプター等を使用した方法を行ってください
⑥CPUの仮想化支援機能を有効化します
IntelのCPUの場合は、グレーアウトしているため、コマンドで有効化します
> VBoxManage modifyvm 仮想マシン名 --nested-hw-virt on
注意
パスが通っていない場合は、VirtualBoxのインストールフォルダまで移動したうえで実行してください
デフォルトのインストール先は「C:\Program Files\Oracle\VirtualBox」です
以上でVirtualBoxの設定は完了です
続いて、「3. Ubuntu Desktopインストール手順」を実施します
2-3. VMware Workstation Pro
VMware Workstation Proで環境構築する場合の手順です
なお、VMware Workstation Proのインストール手順は割愛します
下記の公式サイトをご確認ください
①「新規仮想マシンの作成」を押下し、インストーラディスク(ここではubuntu-24.04.1-desktop-amd64.iso)を設定して、「次へ」を押下します
③仮想マシン名と仮想マシンファイルを保存する場所を設定して、「次へ」を押下します
④ディスク容量を設定して、「次へ」を押下します
- ディスク最大サイズ:Ubuntu Desktop25GB+ゲストOS分の容量
- 「仮想ディスクを単一ファイルとして格納」を選択
注意
Ubuntu Desktopの最小要件のスペック+KVM上に構築するゲストOSへ割り当てるリソース分以上の容量を確保するようにしてください
例えば、ゲストOSがUbuntu Serverであれば、25GB+5GB=30Gよりも大きいメモリ容量にします
また、PCのリソースを超えない範囲で設定してください
⑤赤枠の設定内容が問題ないことを確認したら、「ハードウェアをカスタマイズ」を押下します
⑥メモリ容量を調整します
注意
Ubuntu Desktopの最小要件のスペック+KVM上に構築するゲストOSへ割り当てるリソース分以上の容量を確保するようにしてください
例えば、ゲストOSがUbuntu Serverであれば、25GB+5GB=30Gよりも大きいメモリ容量にします
また、PCのリソースを超えない範囲で設定してください
⑦CPUの設定をします
仮想化エンジンの「Inter VT-x/EPT または AMD-V/RVIを仮想化」を有効化します
注意
Ubuntu Desktopの最小要件のスペック+KVM上に構築するゲストOSへ割り当てるリソース分以上の容量を確保するようにしてください
また、PCのリソースを超えない範囲で設定してください
注意
ここでは、ブリッジアダプター(PCと同じNW環境になる設定)を実施しています
共用のNW環境の場合は、IP重複する可能性等があるため、NAT、ホストオンリー等を使用した方法を行ってください
以上でVMwareWorkstationProの設定は完了です
続いて、「3. Ubuntu Desktopインストール手順」を実施します
2-3. Hyper-V
Hyper-V環境で構築する場合の手順です
Hyper-Vは通常のHomeエディションでは使用できないため、エディションを確認してみてください
※確認方法
Windowsキー+Rを押下>ファイル名を指定して実行>「winver」と入力してOK
赤枠がWindows Proであること(Homeの場合は、2-1. VirtualBoxか2-2. VMware Workstation Proの手順を実施してください)
①Windowsの機能の有効化または無効化で、Hyper-Vを有効化して、再起動します
②Hyper-Vマネージャーを開き、新規を押下します
④名前と場所の指定にて、名前に任意の仮想マシン名を入力して、「次へ」を押下します
⑥メモリの割り当てにて、起動メモリを設定して、「次へ」を押下します
注意
Ubuntu Desktopの最小要件のスペック+KVM上に構築するゲストOSへ割り当てるリソース分以上の容量を確保するようにしてください
例えば、ゲストOSがUbuntu Serverであれば、4GB+2GB=6Gよりも大きいメモリ容量にします
また、PCのリソースを超えない範囲で設定してください
⑦ネットワークの構成にて、「Default Switch」を選択して、「次へ」を押下します
⑧仮想ハードディスクの接続にて、「仮想ハードディスクを作成する」を選択します
ディスクサイズを設定して、「次へ」を押下します
注意
Ubuntu Desktopの最小要件のスペック+KVM上に構築するゲストOSへ割り当てるリソース分以上の容量を確保するようにしてください
例えば、ゲストOSがUbuntu Serverであれば、25GB+5GB=30Gよりも大きいメモリ容量にします
また、PCのリソースを超えない範囲で設定してください
⑨要約にて、赤枠内の内容が問題ないことを確認して、「完了」を押下します
⑩Hyper-Vマネージャーから、PC名>ホストOSの仮想マシン名を選択して、「設定」を押下します
セキュリティを選択して、セキュアブートを無効にします
⑪CPUの設定を修正します
注意
Ubuntu Desktopの最小要件のスペック+KVM上に構築するゲストOSへ割り当てるリソース分以上の容量を確保するようにしてください
また、PCのリソースを超えない範囲で設定してください
⑫PowerShellにて、下記コマンドを実行してネステッド仮想化設定を有効化します
> Set-VMProcessor -VMName 仮想マシン名 -ExposeVirtualizationExtensions $true
> Get-VM | Get-VMProcessor | Select-Object VMName, ExposeVirtualizationExtensions
※参考:https://tech.sadari.co.jp/server-os/windows-server/nested-hyperv-vm/
以上でHyper-Vの設定は完了です
続いて、「3. Ubuntu Desktopインストール手順」を実施します
3. Ubuntu Desktopインストール手順
KVM+QEMUを使用する際には、デスクトップ環境が必要になるため、Ubuntuデスクトップをインストールします
①仮想マシンを起動します
Ubuntuへようこそ画面が表示されるため、言語「日本語」を選択して、「次」を押下します
※下記画面の場合、オレンジのボタンを押下すると①の画面に遷移します
③キーボードレイアウトにて、「日本語」を選択して、「次」を押下します
④インターネットに接続にて、「有線接続を使用」を選択して、「次」を押下します
⑤Ubuntuを試用またはインストールにて、「Ubuntuをインストール」を選択して、「次」を押下します
⑥インストールの種類にて、「対話式インストール」を選択して、「次」を押下します
⑦アプリケーションにて、「規定の選択」を選択して、「次」を押下します
⑧コンピューターを最適化にて、ソフトウェアインストールせずに「次」を押下します
⑨ディスクのセットアップにて、「ディスクを削除してUbuntuをインストールする」を選択して、「次」を押下します
⑩アカウント設定にて、下記設定をして、「次」を押下します
- あなたの名前:任意のユーザー名
- コンピューターの名前:任意のサーバー名
- ユーザー名:任意のユーザー名(ログインする際のユーザー名です)
- パスワードを決めてください、パスワードをもう一度入力:任意のパスワード
- ログイン時にパスワードを要求する:有効
⑪タイムゾーンを選択してくださいにて、タイムゾーンをAsia/Tokyoを選択して、「次」を押下します
⑫インストールの準備完了にて、設定内容が問題ないことを確認して、「インストール」を押下します
⑮再起動後、Ubuntu24.04.1 LTSへようこその画面が表じされるため、右上の「次へ」を押下します
⑯Enable Ubuntu Proにて、「Skip for now」を選択して、「次へ」を押下します
⑰Ubuntuの改善を支援するにて、「いいえ」を選択して、「次へ」を押下します
以上で、Ubuntu Desktopのインストールは完了です
4. QEMUインストール
KVMはLinuxに含まれるカーネルモジュールであるため、新たにインストールを行う必要はありません
ただし、KVMを使用するにはハードウェアエミュレータが必要になるため、エミュレータツールであるQEMUを使用します
KVMとQEMUを連携することで完全仮想化が実現できます
- QEMUとは
下記引用文の通り、オープンソースのハードウェアエミュレータ兼仮想化ツールであり、CPUやメモリ等の仮想化モデルを提供するソフトウェアです
QEMU is a generic and open source machine emulator and virtualizer.
QEMU can be used in several different ways. The most common is for System Emulation, where it provides a virtual model of an entire machine (CPU, memory and emulated devices) to run a guest OS. In this mode the CPU may be fully emulated, or it may work with a hypervisor such as KVM, Xen or Hypervisor.Framework to allow the guest to run directly on the host CPU.
※引用:https://www.qemu.org/docs/master/about/index.html
Ubuntu環境へのQEMUインストールは下記の公式サイトを参考に実施します
①画面左下のメニューを押下し、「端末」を押下して、ターミナルを開きます
※SSH接続で設定しても問題ありません
②CPUの仮想化拡張機能が利用できるか確認します
※svmまたはvmxがあれば問題ありません
grep -E 'svm|vmx' /proc/cpuinfo
$ grep -E 'svm|vmx' /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable 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 pti ssbd ibrs ibpb stibp tpr_shadow ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves arat vnmi md_clear flush_l1d arch_capabilities
vmx flags : vnmi invvpid ept_x_only ept_ad tsc_offset vtpr mtf ept vpid unrestricted_guest ple ept_mode_based_exec
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable 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 pti ssbd ibrs ibpb stibp tpr_shadow ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves arat vnmi md_clear flush_l1d arch_capabilities
vmx flags : vnmi invvpid ept_x_only ept_ad tsc_offset vtpr mtf ept vpid unrestricted_guest ple ept_mode_based_exec
②カーネルモジュール確認します
kvmがあれば問題ありません
$ sudo lsmod | grep kvm
$ lsmod | grep kvm
kvm_intel 487424 0
kvm 1404928 1 kvm_intel
③パッケージリスト更新します
$ sudo apt-get -y update
④パッケージアップグレード
$ sudo apt-get -y upgrade
⑤QEMUインストールします
$ sudo apt-get -y install qemu-system
これでQEMUのインストールは完了です
5. ゲストOSインストール
ゲストOSをインストールしてみます
ホストOS(Ubuntu Desktop)上にインストールメディアを用意してください
※ここでは、Ubuntu Server 22.04をインストールしますが、CentOSやalpine linux等、他のOSを使用しても問題ありません
①ディスク作成
$ qemu-img create -f qcow2 [作成するディスク名フルパス] 10G
※ホームディレクトリ上のimagesディレクトリ上にubuntu.qcow2ファイルを作成しています
$ qemu-img create -f qcow2 ~images/ubuntu.qcow2 10G
Formatting 'images/ubuntu.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=10737418240 lazy_refcounts=off refcount_bits=16
②ディスク情報を確認します
$ qemu-img info [作成したディスクのフルパス]
$ qemu-img info ~/images/ubuntu.qcow2
image: /home/user/images/ubuntu.qcow2
file format: qcow2
virtual size: 20 GiB (21474836480 bytes)
disk size: 196 KiB
cluster_size: 65536
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: false
refcount bits: 16
corrupt: false
extended l2: false
Child node '/file':
filename: /home/user/images/ubuntu.qcow2
protocol type: file
file length: 192 KiB (197120 bytes)
disk size: 196 KiB
※checkオプションを使うとエラーが無いか確認できます
$ qemu-img check ~/images/ubuntu.qcow2
No errors were found on the image.
Image end offset: 262144
③OSインストールします
- qemu-system-x86_64:インストールコマンド(ホストシステムがx86_64のため末尾がx86_64のコマンドを使用しています)
- enable-xkm:KNMの完全仮想化を有効化します
- m:ゲストOSに割り当てるメモリを記載します(MiB単位)
- boot:ブート順を設定(ISOからインストールしたいためdを選択します)
- cdrom:参照するISOファイルのフルパスを記載します
- 最終行:インストール先のディスクのフルパスを記載します
$ qemu-system-x86_64 \
-enable-kvm \
-m 2048 \
-boot d \
-cdrom [isoファイルのフルパス] \
[インストールするディスクのフルパス]
情報
※ISOファイルは~/iso/ubuntu-24.04.1-live-server-amd64.iso、ディスクは①で作成したものを使用しています
※「qemu-system-x86_64: warning: host doesn't support requested feature: CPUID.80000001H:ECX.svm [bit 2]」と表示されますが、QEMU画面は開くので静観します
$ qemu-system-x86_64 \
> -enable-kvm \
> -m 2048 \
> -boot d \
> -cdrom ~/iso/ubuntu-24.04.1-live-server-amd64.iso \
> ~/images/ubuntu.qcow2
qemu-system-x86_64: warning: host doesn't support requested feature: CPUID.80000001H:ECX.svm [bit 2]
④Ubuntuの場合、インストール完了後に再起動が促されますが、このままRebootするとcdromから起動されてしまうため、ブート設定を変更します
⑤[View]>[compatmonitor0]を押下します(Ctrl+Alt+2でも問題ありません)
⑥下記コマンドを実行して、HDDから起動するように設定変更します
【コマンド】
(qemu) boot_set c
⑦[View]>[VGA]を押下します(Ctrl+Alt+1でも問題ありません)
⑨再起動すると、ログイン画面が表示されます
⑩ログイン確認が完了したら、シャットダウンします
$ sudo shutdown -h now
⑪仮想マシンを起動してみます
ログイン画面が別窓で開けば問題ありません
$ qemu-system-x86_64 \
-enable-kvm \
-m 2048 \
-boot c \
[インストールしたディスクのフルパス]
Appendix. スナップショット作成
スナップショットを取得してみましょう
qemuコマンドでの作成方法
①ゲストOSをシャットダウンしておきます
※起動中の場合は下記のようなエラーが発生します
$ qemu-img snapshot -l ~/images/ubuntu.qcow2
qemu-img: Could not open '/home/user/images/ubuntu.qcow2': Failed to get shared "write" lock
Is another process using the image [/home/user/images/ubuntu.qcow2]?
①スナップショット確認
※この時点では何も表示されません
qemu-img snapshot -l [ディスクイメージのフルパス]
※ディスクイメージが~/images/ubuntu.qcow2であれば下記のようになります
qemu-img snapshot -l ~/images/ubuntu.qcow2
②スナップショット作成
qemu-img snapshot -c [スナップショット名] [ディスクイメージのフルパス]
※スナップショット名をsnapshot1、ディスクイメージが~/images/ubuntu.qcow2とすると下記のようになります
qemu-img snapshot -c snapshot1 ~/images/ubuntu.qcow2
qemu-img snapshot -l ~/images/ubuntu.qcow2
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK ICOUNT
1 snapshot1 0 B 2024-11-26 04:50:55 00:00:00.000 0
③スナップショットリストア
スナップショット作成後に何かしらソフトウェアインストールを行った後に実施してみてください
インストール前の状態に戻るはずです
qemu-img snapshot -a [リストアしたい地点のスナップショット名] [ディスクイメージのフルパス]
④スナップショット削除
qemu-img snapshot -d [削除するスナップショット名] [ディスクイメージのフルパス]
※スナップショット名をsnapshot1、ディスクイメージが~/images/ubuntu.qcow2とすると下記のようになります
qemu-img snapshot -d snapshot1 ~/images/ubuntu.qcow2
QEMUモニタでの作成方法
①QEMU画面で[View]>[compatmonitor0]を押下します(Ctrl+Alt+2でも問題ありません)
②下記コマンドを実行してスナップショットを作成します
(qemu) savevm
③下記コマンドを実行してスナップショットが作成されたことを確認します
(qemu) info snapshots
④何かしらソフトウェアインストールを行った後に、スナップショットリストアコマンドを実行します
※実行後ソフトウェアインストール前に戻っていることを確認します
(qemu) loadvm [TAG名]
※③の結果の場合
(qemu) loadvm vm-20241126084550
⑤下記コマンドを実行して、スナップショットを削除します
(qemu) delvm [TAG名]
※③の結果の場合
(qemu) delvm vm-20241126084550
⑥スナップショットを確認します
(qemu) info snapshots
【結果】
おわりに
今回は様々なホストOS型の仮想化ソフトウェアを使ったQEMU検証環境の構築手順をご紹介しました
より高度な操作をする場合はlibvirtをインストールしますが、今回はQEMUを使った操作のみに絞ってみました
余力があれば、libvirtについてもまとめてみたいと思います
また、NW環境周りの設定する場合は、bridge-utils(現在は非推奨)やipコマンドを使用します
参考
- QEMUインストール方法
- QEMUコマンドオプション
- QEMUモニタオプション
- UbuntuサーバのKVM導入まとめ
- KVM事前要件確認