Windows
PowerShell
Hyper-V
Nested_Virtualization

Nested Hyper-Vのかんたん設定PowerShellの内容解説

この記事は、「クラウド時代のシステム管理の記事を転記したものです。
前回のBlog記事ではPowerShellのScriptを使ってかんたんにNested Hyper-Vを使うための設定方法について解説しました。今回は、設定に使ったPowerShellの内容について解説しながら、Nested Hyper-V設定の詳細を見ていきます。

1. Nested Hyper-V設定PowerShellのダウンロード

解説対象PowerShell Scriptはgithub上にあるEnable-NestedVm.ps1です。以下、「〇〇行目」という記載はこのファイルの行番号を指すものとします。

2. Enable-NestedVm.ps1の実行内容解説

2-1. 1~16行目:引数チェックと定数の定義

最初の16行で引数としてVM名の文字列が定義されていない、もしくは空文字の場合、使用方法を出力します。空でない文字列が渡された場合は定数として4GBを定義します。

2-2. 17~51行目:管理者権限での実行

Nested Hyper-Vの設定にはAdministrator権限が必要なので、Script実行ユーザーに権限があるか確認します。Admonistrator権限で実行されている場合はWindowのタイトルバーに管理者権限である旨を記載し、権限がない場合、Administrator権限でのrunasを実行します。

2-3. 52~68行目:仮想マシン設定取得

Nested Hyper-Vを設定する対象仮想マシンについて、以下の情報を取得し、一つのオブジェクトとして定義します。

項目 意味
ExposeVirtualizationExtensions CPUの仮想化支援命令を仮想マシンに見せるかどうか
DynamicMemoryEnabled Dynamic Memoryの設定が有効になっているかどうか
SnapshotEnabled Snapshotを取得しているか
State 仮想マシンの電源状態がOn/Off/保存状態かどうか
MacAddressSpoofing MACアドレス偽装を有効にしているかどうか
MemorySize 仮想マシンのメモリーサイズ

2-4. 69~107行目:Nested仮想化に適した状態か確認

2-3.で取得した情報をもとに、Nested仮想化に適した状態であるかどうかをチェックします。すでにExposeVirtualizationExtensionsの設定が実施済みの場合は設定を再度行わず終了となります。

2-5. 108~117:Nested仮想化設定実行の確認

Y/Nで本当にNested仮想化設定を行うか入力します。

2-6. 118~131行目:Nested仮想化の必須設定投入

Nested仮想化の必須設定を行うため、すべてのSnapshotの削除(結合)、保存状態の削除、仮想マシンの電源OFFを実行し、その後に下記2項目の設定変更を行います。

変更する項目 変更後の値
ExposeVirtualizationExtensions True
DynamicMemoryEnabled False

2-7. 132~146行目:MACアドレス偽装を有効に設定

Nested仮想化された仮想マシンから外部に通信できるようにするため、MACアドレス偽装を有効に設定します。Nested Hyper-V内に閉じたネットワークしか利用しない場合は設定不要です。外部と直接(L2接続で)通信するためには必要な設定です。

2-8. 147~158行目:メモリーサイズを4GBに設定

推奨される最低メモリー容量は4GBであるため、仮想マシンのメモリーが4GB未満の場合は、4GBに設定することが可能です。

以上でEnable-NestedVm.ps1の内容の説明が完了しました。意外と丁寧に事前チェックをしており、許可を出した後はガツガツVMを停止して設定変更を行います。

)」の記事を転記したものです。

前回のBlog記事ではPowerShellのScriptを使ってかんたんにNested Hyper-Vを使うための設定方法について解説しました。今回は、設定に使ったPowerShellの内容について解説しながら、Nested Hyper-V設定の詳細を見ていきます。

1. Nested Hyper-V設定PowerShellのダウンロード

解説対象PowerShell Scriptはgithub上にあるEnable-NestedVm.ps1です。以下、「〇〇行目」という記載はこのファイルの行番号を指すものとします。

2. Enable-NestedVm.ps1の実行内容解説

2-1. 1~16行目:引数チェックと定数の定義

最初の16行で引数としてVM名の文字列が定義されていない、もしくは空文字の場合、使用方法を出力します。空でない文字列が渡された場合は定数として4GBを定義します。

2-2. 17~51行目:管理者権限での実行

Nested Hyper-Vの設定にはAdministrator権限が必要なので、Script実行ユーザーに権限があるか確認します。Admonistrator権限で実行されている場合はWindowのタイトルバーに管理者権限である旨を記載し、権限がない場合、Administrator権限でのrunasを実行します。

2-3. 52~68行目:仮想マシン設定取得

Nested Hyper-Vを設定する対象仮想マシンについて、以下の情報を取得し、一つのオブジェクトとして定義します。

項目 意味
ExposeVirtualizationExtensions CPUの仮想化支援命令を仮想マシンに見せるかどうか
DynamicMemoryEnabled Dynamic Memoryの設定が有効になっているかどうか
SnapshotEnabled Snapshotを取得しているか
State 仮想マシンの電源状態がOn/Off/保存状態かどうか
MacAddressSpoofing MACアドレス偽装を有効にしているかどうか
MemorySize 仮想マシンのメモリーサイズ

2-4. 69~107行目:Nested仮想化に適した状態か確認

2-3.で取得した情報をもとに、Nested仮想化に適した状態であるかどうかをチェックします。すでにExposeVirtualizationExtensionsの設定が実施済みの場合は設定を再度行わず終了となります。

2-5. 108~117:Nested仮想化設定実行の確認

Y/Nで本当にNested仮想化設定を行うか入力します。

2-6. 118~131行目:Nested仮想化の必須設定投入

Nested仮想化の必須設定を行うため、すべてのSnapshotの削除(結合)、保存状態の削除、仮想マシンの電源OFFを実行し、その後に下記2項目の設定変更を行います。

変更する項目 変更後の値
ExposeVirtualizationExtensions True
DynamicMemoryEnabled False

2-7. 132~146行目:MACアドレス偽装を有効に設定

Nested仮想化された仮想マシンから外部に通信できるようにするため、MACアドレス偽装を有効に設定します。Nested Hyper-V内に閉じたネットワークしか利用しない場合は設定不要です。外部と直接(L2接続で)通信するためには必要な設定です。

2-8. 147~158行目:メモリーサイズを4GBに設定

推奨される最低メモリー容量は4GBであるため、仮想マシンのメモリーが4GB未満の場合は、4GBに設定することが可能です。

以上でEnable-NestedVm.ps1の内容の説明が完了しました。意外と丁寧に事前チェックをしており、許可を出した後はガツガツVMを停止して設定変更を行います。