前回の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を停止して設定変更を行います。