【KVM/QEMU】検証環境構築方法（VirtualBox/VMwareWorkstation/Hyper-v）

# はじめに
LPIC305に向けて仮想化環境について学習すべく、学習環境の構築を行いましたが参考となるドキュメントが少なく苦労したため、KVM/QEMUについて学習する方向けに環境構築方法をまとめました。

# 1. 環境
Hyper-vに関しては、検証端末が異なりますので2環境分の情報を記載します。
また、ここではホストOSは仮想化ソフトウェアでインストールした仮想マシンのことを指し、ゲストOSはKVMで構築した仮想マシンとします。
なお、本環境は入れ子の仮想環境となるため、PCのCPU・メモリ・HDDが十分あることを前提にした内容としておりますので、ご了承ください。

※下記に構成図兼名称定義を示します
　例えば、お手元の端末をPC、PCにインストールした仮想化ソフトウェアを通じて構築した仮想マシンをホストOS、ホストOS上で更に仮想化したマシンをゲストOSと定義します
 
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/9f034836-f0db-9c9f-a5fd-8d27bd49062b.png" width="50%">

## 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画面の出し方は、下記を参考にしてください

https://support.microsoft.com/ja-jp/windows/windows-11-%E3%81%A8%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88-a8ff1202-c0d9-42f5-940f-843abef64fad


- QEMUでは、デスクトップ環境が必要になるため、Ubuntu Desktopをインストールします
そのため、事前にインストールメディアをダウンロードしてください
下記サイトから、Ubuntu Desktopをダウンロード可能です

https://jp.ubuntu.com/download

## 2-1. VirtualBox

VirtualBoxで環境構築する場合の手順です
インストールについては下記で実施したことがあるため、参考にしてみてください
※ただし、インストールしているバージョンは異なります

https://note.com/rittan_girla/n/n0efe85265582

①下記設定をして「次へ」を押下します
- 名前：任意の仮想マシン名
- Folder：仮想マシンファイルを保存する場所
- ISO Image：インストールに使用するISOファイル（ここではubuntu-24.04.1-desktop-amd64.iso）
- Skip Unattended Installation：有効

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/959f0b30-fa6a-89d3-97ee-9cb83713be2b.png)

②メモリとCPUを設定して、「次へ」を押下します
　※ここでは、メモリ8192GB、CPU2コアで設定しています

:::note warn
注意
Ubuntu Desktopの最小要件のスペック＋KVM上に構築するゲストOSへ割り当てるリソース分以上の容量を確保するようにしてください
例えば、ゲストOSがUbuntu Serverであれば、4GB＋2GB=6Gよりも大きいメモリ容量にします
また、PCのリソースを超えない範囲で設定してください
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/84dc1038-238d-662f-7b88-5394b55c49ae.png)

③ハードディスクを設定して、「次へ」を押下します
　※ここでは、50GBで設定しています

:::note warn
注意
Ubuntu Desktopの最小要件のスペック＋KVM上に構築するゲストOSへ割り当てるリソース分以上の容量を確保するようにしてください
例えば、ゲストOSがUbuntu Serverであれば、25GB＋5GB=30Gよりも大きいメモリ容量にします
また、PCのリソースを超えない範囲で設定してください
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/42190cb0-470d-0529-a3f9-a84cf48f8d1e.png)

④設定内容問題ないことを確認したら、「完了」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/347e8128-854c-e5dc-5ce7-00609cacd232.png)

⑤仮想マシン作成されたら、ネットワーク設定を行い、インターネット接続できるようにします

:::note warn
注意
ここでは、ブリッジアダプター（PCと同じNW環境になる設定）を実施しています
共用のNW環境の場合は、IP重複する可能性等があるため、NAT＋ホストオンリーアダプター等を使用した方法を行ってください
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/d2f93a34-95b0-8446-b9a6-4bf8cbc871dc.png)

⑥CPUの仮想化支援機能を有効化します
　IntelのCPUの場合は、グレーアウトしているため、コマンドで有効化します
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/12ee768d-12e5-2309-76de-6c7f33257510.png)

```text:コマンドプロンプト
> VBoxManage modifyvm 仮想マシン名 --nested-hw-virt on
```

:::note warn
注意
パスが通っていない場合は、VirtualBoxのインストールフォルダまで移動したうえで実行してください
デフォルトのインストール先は「C:\Program Files\Oracle\VirtualBox」です
:::

以上でVirtualBoxの設定は完了です
続いて、「3. Ubuntu Desktopインストール手順」を実施します

## 2-3. VMware Workstation Pro
VMware Workstation Proで環境構築する場合の手順です
なお、VMware Workstation Proのインストール手順は割愛します
下記の公式サイトをご確認ください

https://docs.vmware.com/en/VMware-Workstation-Pro/17/com.vmware.ws.using.doc/GUID-F5A7B3CB-9141-458B-A256-E0C3EA805AAA.html

①「新規仮想マシンの作成」を押下し、インストーラディスク（ここではubuntu-24.04.1-desktop-amd64.iso）を設定して、「次へ」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/83cf6224-1474-4eda-c301-ed32ecc2df5f.png)

②ユーザー名とパスワードを設定して、「次へ」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/7ad8942e-87f9-e66a-6e6c-3723aecc5602.png)

③仮想マシン名と仮想マシンファイルを保存する場所を設定して、「次へ」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/985af75c-b075-6807-b997-c340d92bd181.png)

④ディスク容量を設定して、「次へ」を押下します
- ディスク最大サイズ：Ubuntu Desktop25GB+ゲストOS分の容量
- 「仮想ディスクを単一ファイルとして格納」を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/c9ac4004-d8aa-d749-7c1e-b740a0150e92.png)

:::note warn
注意
Ubuntu Desktopの最小要件のスペック＋KVM上に構築するゲストOSへ割り当てるリソース分以上の容量を確保するようにしてください
例えば、ゲストOSがUbuntu Serverであれば、25GB＋5GB=30Gよりも大きいメモリ容量にします
また、PCのリソースを超えない範囲で設定してください
:::

⑤赤枠の設定内容が問題ないことを確認したら、「ハードウェアをカスタマイズ」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/debf3458-915d-93b6-330f-c570af624a07.png)

⑥メモリ容量を調整します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/93e0aaff-ed1c-745e-4ced-19ee185a98e7.png)

:::note warn
注意
Ubuntu Desktopの最小要件のスペック＋KVM上に構築するゲストOSへ割り当てるリソース分以上の容量を確保するようにしてください
例えば、ゲストOSがUbuntu Serverであれば、25GB＋5GB=30Gよりも大きいメモリ容量にします
また、PCのリソースを超えない範囲で設定してください
:::

⑦CPUの設定をします
　仮想化エンジンの「Inter VT-x/EPT または AMD-V/RVIを仮想化」を有効化します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/d60542ed-131f-a611-a538-1193cea3ac8e.png)

:::note warn
注意
Ubuntu Desktopの最小要件のスペック＋KVM上に構築するゲストOSへ割り当てるリソース分以上の容量を確保するようにしてください
また、PCのリソースを超えない範囲で設定してください
:::

⑧NWの設定をして、「閉じる」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/382cb679-f200-9abc-a0eb-0920e8b72a2b.png)

:::note warn
注意
ここでは、ブリッジアダプター（PCと同じNW環境になる設定）を実施しています
共用のNW環境の場合は、IP重複する可能性等があるため、NAT、ホストオンリー等を使用した方法を行ってください
:::

⑨設定内容が問題ないことを確認して、「完了」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/ec4a061e-7a81-4fb3-3c1c-d6e20ad65f99.png)

以上で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の手順を実施してください）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/5a4934fc-9590-e308-6503-ead6d06c3ab1.png)

①Windowsの機能の有効化または無効化で、Hyper-Vを有効化して、再起動します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/052d2ea6-4c11-5a8a-9c7d-146514566bfa.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/f6a2b5e4-66b4-727a-d7e9-029470332987.png)

②Hyper-Vマネージャーを開き、新規を押下します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/4af0b1e2-ff66-8327-bae9-67349d82c267.png)

③開始する前ににて、「次へ」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/28f68ddb-9f19-dffb-26b5-dd62383fb759.png)

④名前と場所の指定にて、名前に任意の仮想マシン名を入力して、「次へ」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/7c478728-27db-0b7b-b34f-3ba4b3cb4333.png)

⑤世代の指定にて、第2世代を選択して、「次へ」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/09226371-9fc9-15b8-de12-f1649235aeb1.png)

⑥メモリの割り当てにて、起動メモリを設定して、「次へ」を押下します

:::note warn
注意
Ubuntu Desktopの最小要件のスペック＋KVM上に構築するゲストOSへ割り当てるリソース分以上の容量を確保するようにしてください
例えば、ゲストOSがUbuntu Serverであれば、4GB＋2GB=6Gよりも大きいメモリ容量にします
また、PCのリソースを超えない範囲で設定してください
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/f19a402c-d328-d3a5-1994-c0f2bfebebb6.png)

⑦ネットワークの構成にて、「Default Switch」を選択して、「次へ」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/b05ee937-220c-32ed-0ead-822aef8deba8.png)


⑧仮想ハードディスクの接続にて、「仮想ハードディスクを作成する」を選択します
　ディスクサイズを設定して、「次へ」を押下します

:::note warn
注意
Ubuntu Desktopの最小要件のスペック＋KVM上に構築するゲストOSへ割り当てるリソース分以上の容量を確保するようにしてください
例えば、ゲストOSがUbuntu Serverであれば、25GB＋5GB=30Gよりも大きいメモリ容量にします
また、PCのリソースを超えない範囲で設定してください
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/fcc66702-f5c8-46fb-f453-951915305c10.png)

⑨要約にて、赤枠内の内容が問題ないことを確認して、「完了」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/3a969efc-efa6-2643-1b51-1ab448410524.png)

⑩Hyper-Vマネージャーから、PC名＞ホストOSの仮想マシン名を選択して、「設定」を押下します
　セキュリティを選択して、セキュアブートを無効にします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/a040e8f4-67b4-37be-00c1-9c4c5e0044d3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/850710bb-c188-6715-4716-0a5f7b970f37.png)

⑪CPUの設定を修正します

:::note warn
注意
Ubuntu Desktopの最小要件のスペック＋KVM上に構築するゲストOSへ割り当てるリソース分以上の容量を確保するようにしてください
また、PCのリソースを超えない範囲で設定してください
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/0908d66b-878f-fd32-2ec1-8f31b5ee9560.png)

⑫PowerShellにて、下記コマンドを実行してネステッド仮想化設定を有効化します

```powershell:コマンド
> Set-VMProcessor -VMName 仮想マシン名 -ExposeVirtualizationExtensions $true
```
```powershell:確認コマンド
> 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へようこそ画面が表示されるため、言語「日本語」を選択して、「次」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/294cfe8b-632b-75aa-7fbf-ba6160131f35.png)

　※下記画面の場合、オレンジのボタンを押下すると①の画面に遷移します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/33714b07-d4c4-28d7-cea4-ea3d848920d5.png)

②アクセシビリティ設定にて、設定せずに「次」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/a0a29e5a-2fe5-2cf9-571e-750cb63ffe23.png)

③キーボードレイアウトにて、「日本語」を選択して、「次」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/90ffdca4-11e9-1329-2f9e-fb25028c8956.png)

④インターネットに接続にて、「有線接続を使用」を選択して、「次」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/f750437a-c632-d767-b6d2-929d7c302504.png)

⑤Ubuntuを試用またはインストールにて、「Ubuntuをインストール」を選択して、「次」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/3f51606d-74c4-4e55-3fbb-6a909b60c957.png)

⑥インストールの種類にて、「対話式インストール」を選択して、「次」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/c41c0e1b-ea7f-840a-9c2d-edc9ea3de69a.png)

⑦アプリケーションにて、「規定の選択」を選択して、「次」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/2a2ab0c0-de93-a89b-26b1-276ca997500d.png)

⑧コンピューターを最適化にて、ソフトウェアインストールせずに「次」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/d4909a19-900d-fea9-b02b-a7f83fff88f5.png)

⑨ディスクのセットアップにて、「ディスクを削除してUbuntuをインストールする」を選択して、「次」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/886b7c0f-6a81-b179-f49f-bdeb93c22ab8.png)

⑩アカウント設定にて、下記設定をして、「次」を押下します

- あなたの名前：任意のユーザー名
- コンピューターの名前：任意のサーバー名
- ユーザー名：任意のユーザー名（ログインする際のユーザー名です）
- パスワードを決めてください、パスワードをもう一度入力：任意のパスワード
- ログイン時にパスワードを要求する：有効

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/d129a595-999e-ae7a-4148-6fca36548186.png)

⑪タイムゾーンを選択してくださいにて、タイムゾーンをAsia/Tokyoを選択して、「次」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/89bd99c0-4c39-f8f7-7d22-0d35ac910e70.png)

⑫インストールの準備完了にて、設定内容が問題ないことを確認して、「インストール」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/e105e6c9-1485-3b0b-ce0b-387fc30f0c31.png)

⑬インストールが完了するまで待機します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/b1bfb27e-1fde-47b2-6f47-e1b5125f8a4a.png)

⑭完了したら、「今すぐ再起動」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/0e71674d-987c-1c65-069b-ced026f8a2bb.png)

⑮再起動後、Ubuntu24.04.1 LTSへようこその画面が表じされるため、右上の「次へ」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/e8bbc2e0-21bd-ca32-0d2e-6d8ea5c4f1da.png)

⑯Enable Ubuntu Proにて、「Skip for now」を選択して、「次へ」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/99016e41-f731-597c-c4b4-d72203053790.png)

⑰Ubuntuの改善を支援するにて、「いいえ」を選択して、「次へ」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/cecc61ba-9121-8b1c-aacb-5b9221831287.png)

⑱準備完了にて、「完了」を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/4884caf5-1362-919a-e8b6-9581b2673501.png)

以上で、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インストールは下記の公式サイトを参考に実施します

https://www.qemu.org/download/#linux

①画面左下のメニューを押下し、「端末」を押下して、ターミナルを開きます
　※SSH接続で設定しても問題ありません

 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/bfbac54b-50d8-5659-7f9b-588b8084d84b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/c82afb95-33ef-9de4-97be-11bf8ee9b6fd.png)

②CPUの仮想化拡張機能が利用できるか確認します
　※svmまたはvmxがあれば問題ありません
 
```text:コマンド
grep -E 'svm|vmx' /proc/cpuinfo
```

```text:結果
$ 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があれば問題ありません

```text:コマンド
$ sudo lsmod | grep kvm
```

```text:結果
$ lsmod | grep kvm
kvm_intel             487424  0
kvm                  1404928  1 kvm_intel
```

③パッケージリスト更新します
```text:コマンド
$ sudo apt-get -y update
```

④パッケージアップグレード
```text:コマンド
$ sudo apt-get -y upgrade
```

⑤QEMUインストールします
```text:コマンド
$ sudo apt-get -y install qemu-system
```

これでQEMUのインストールは完了です

# 5. ゲストOSインストール
ゲストOSをインストールしてみます
ホストOS（Ubuntu Desktop）上にインストールメディアを用意してください
※ここでは、Ubuntu Server 22.04をインストールしますが、CentOSやalpine linux等、他のOSを使用しても問題ありません

①ディスク作成

```text:コマンド
$ qemu-img create -f qcow2 [作成するディスク名フルパス] 10G
```

※ホームディレクトリ上のimagesディレクトリ上にubuntu.qcow2ファイルを作成しています
```text:結果
$ 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
```

②ディスク情報を確認します
```text:コマンド
$ qemu-img info [作成したディスクのフルパス]
```

```text:結果
$ 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オプションを使うとエラーが無いか確認できます
```text:出力例
$ 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ファイルのフルパスを記載します
- 最終行：インストール先のディスクのフルパスを記載します

```text:コマンド
$ qemu-system-x86_64 \
 -enable-kvm \
 -m 2048 \
 -boot d \
 -cdrom [isoファイルのフルパス] \
 [インストールするディスクのフルパス]
```

:::note info
情報
※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画面は開くので静観します
:::

```text:結果
$ 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]
```

別窓でQEMUの画面が表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/9d6eb1db-504e-53f0-f263-e28b18132a97.png)

④Ubuntuの場合、インストール完了後に再起動が促されますが、このままRebootするとcdromから起動されてしまうため、ブート設定を変更します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/26cb75e9-dbc0-7303-733e-6a5788499468.png)

⑤[View]＞[compatmonitor0]を押下します（Ctrl＋Alt＋2でも問題ありません）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/990f8130-6503-b6f2-8a71-c94041a8b983.png)

⑥下記コマンドを実行して、HDDから起動するように設定変更します

【コマンド】
```
(qemu) boot_set c
```

 【結果】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/5ff80b68-9368-5b90-9eaf-16a240a6ec83.png)

⑦[View]＞[VGA]を押下します（Ctrl＋Alt＋1でも問題ありません）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/7e07cc4d-1191-1f78-b973-94b13795b452.png)

⑧[Reboot Now]を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/26cb75e9-dbc0-7303-733e-6a5788499468.png)

⑨再起動すると、ログイン画面が表示されます

 【結果】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/907af00e-f87c-1da1-25ee-0776a12743ac.png)

⑩ログイン確認が完了したら、シャットダウンします

```text:コマンド
$ sudo shutdown -h now
```

⑪仮想マシンを起動してみます
　ログイン画面が別窓で開けば問題ありません

```text:コマンド
$ qemu-system-x86_64 \
 -enable-kvm \
 -m 2048 \
 -boot c \
 [インストールしたディスクのフルパス]
 ```

 【結果】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/907af00e-f87c-1da1-25ee-0776a12743ac.png)

# Appendix. スナップショット作成
スナップショットを取得してみましょう

## qemuコマンドでの作成方法
①ゲストOSをシャットダウンしておきます
　※起動中の場合は下記のようなエラーが発生します
 ```text:エラー例
 $ 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]?
 ```

①スナップショット確認
　※この時点では何も表示されません
```text:コマンド
qemu-img snapshot -l [ディスクイメージのフルパス]
```
※ディスクイメージが~/images/ubuntu.qcow2であれば下記のようになります
```text:コマンド例
qemu-img snapshot -l ~/images/ubuntu.qcow2
```

②スナップショット作成
```text:コマンド
qemu-img snapshot -c [スナップショット名] [ディスクイメージのフルパス]
```

※スナップショット名をsnapshot1、ディスクイメージが~/images/ubuntu.qcow2とすると下記のようになります
```text:コマンド
qemu-img snapshot -c snapshot1 ~/images/ubuntu.qcow2
```

```text:コマンド例
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
```

③スナップショットリストア

:::note info
スナップショット作成後に何かしらソフトウェアインストールを行った後に実施してみてください
インストール前の状態に戻るはずです
:::

```text:コマンド
qemu-img snapshot -a [リストアしたい地点のスナップショット名] [ディスクイメージのフルパス]
```

④スナップショット削除
```text:コマンド
qemu-img snapshot -d [削除するスナップショット名] [ディスクイメージのフルパス]
```

※スナップショット名をsnapshot1、ディスクイメージが~/images/ubuntu.qcow2とすると下記のようになります
```text:コマンド例
qemu-img snapshot -d snapshot1 ~/images/ubuntu.qcow2
```

# QEMUモニタでの作成方法

①QEMU画面で[View]＞[compatmonitor0]を押下します（Ctrl＋Alt＋2でも問題ありません）

②下記コマンドを実行してスナップショットを作成します
```text:コマンド
(qemu) savevm
```
③下記コマンドを実行してスナップショットが作成されたことを確認します
```text:コマンド
(qemu) info snapshots
```
【結果】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/2bc5daa9-7699-1b10-b390-63e1cd8d9c4a.png)

④何かしらソフトウェアインストールを行った後に、スナップショットリストアコマンドを実行します
　※実行後ソフトウェアインストール前に戻っていることを確認します
```text:コマンド
(qemu) loadvm [TAG名]
```

※③の結果の場合
```text:コマンド例
(qemu) loadvm vm-20241126084550
```

⑤下記コマンドを実行して、スナップショットを削除します
```text:コマンド
(qemu) delvm [TAG名]
```
※③の結果の場合
```text:コマンド例
(qemu) delvm vm-20241126084550
```

⑥スナップショットを確認します
```text:コマンド
(qemu) info snapshots
```
【結果】

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/e2a353bf-ad1a-8433-a067-c5e631464097.png)

# おわりに
今回は様々なホストOS型の仮想化ソフトウェアを使ったQEMU検証環境の構築手順をご紹介しました
より高度な操作をする場合はlibvirtをインストールしますが、今回はQEMUを使った操作のみに絞ってみました
余力があれば、libvirtについてもまとめてみたいと思います
また、NW環境周りの設定する場合は、bridge-utils（現在は非推奨）やipコマンドを使用します

# 参考
- QEMUインストール方法

https://www.qemu.org/download/#linux

- QEMUコマンドオプション

https://www.qemu.org/docs/master/system/invocation.html

- QEMUモニタオプション

https://www.qemu.org/docs/master/system/monitor.html

- UbuntuサーバのKVM導入まとめ

https://ubuntu.com/blog/kvm-hyphervisor

https://help.ubuntu.com/community/KVM/Installation

- KVM事前要件確認

https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/7/html/virtualization_deployment_and_administration_guide/sect-system_requirements-kvm_requirements#sect-System_requirements-KVM_requirements