検証用で使用している Intel NUC Gen11 (NUC11TNHv70L) の CPU は、Core i7-1185G7 が搭載されており、VT-x が使用できますので、Nested Hyper-V (入れ子になった仮想化) を使用することができる CPU となっています。
Nested Hyper-V の有効化については、入れ子になった仮想化による仮想マシンでの Hyper-V の実行 で公開されており、今回使用している NUC のような物理ハードウェア上にインストールした仮想マシンで実行するのであれば、
- Nested Hyper-V を有効にしたい仮想マシンが停止した状態で、Nested Hyper-V を有効化
- Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
- Nested Hyper-V を有効にしたい仮想マシンで MAC アドレスのスプーフィングを有効化する
- Get-VMNetworkAdapter -VMName <VMName> | Set-VMNetworkAdapter -MacAddressSpoofing On
ことで、Nested Hyper-V を使用することができます。
しかし、今回使用している Gen 11 の NUC では、上記の対応を行っても Nested Hyper-V を有効化することができませんでした。
Twitter でつぶやいたところ次のようなアドバイスをいただき、教えていただいた方法を使用することで Nested Hyper-V を有効化することができました。
こちらのコマンドではどうでしょうか?
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V,RSAT-Hyper-V-Tools-Feature,Microsoft-Hyper-V-Management-PowerShell
— いまにゅー (@imanyu) December 17, 2021
今後も何回か同じ事象でハマりそうなので、対応方法を残しておきたいと思います。
Contents
発生していた現象
今回発生していた現象ですが、Nested Hyper-V が有効にできるように設定した仮想マシンで、「Install-WindowsFeature "Hyper-V" -IncludeManagementTools」を実行しても次のエラーが発生するというものでした。(サーバーマネージャーで機能の有効化を行った場合も同一のエラーとなります)
Install-WindowsFeature : Hyper-V 機能の前提条件の確認に失敗しました。
1. BIOS で仮想化のサポートが無効になっているため、Hyper-V をインストールできません。
Nested Hyper-V の有効化 (Set-VMProcessor) を実行していない場合は、次のエラーになるので、コマンドレットを実行し忘れているということはなかったのですが、仮想マシンで Hyper-V を有効化することができませんでした。
Install-WindowsFeature : Hyper-V 機能の前提条件の確認に失敗しました。
1. Hyper-V をインストールできません: 必要な仮想化機能がプロセッサにありません。
毎回失敗するのならいいのですが、私の環境では、ホスト OS に Windows Server 2019 / 2022 を使用しても同一の現象が発生し、
- Windows Server 2022 のゲストで Nested Hyper-V を有効にしようとすると「稀に」有効化できるケースがある
- 失敗したら同一の VHDX で仮想マシンを再作成すると成功することがある
- Azure Stack HCI のゲスト (20H2 / 21H2) で Nested Hyper-V を有効にしようとすると「確実に」エラーとなる
となっていました。
同様のエラーとしては、一部のコンピューターが Hyper-V の役割をインストールしたり、Hyper-V 仮想マシンを起動したりするには、BIOS 更新プログラムが必要になる場合があります。 という情報があるのですが、Windows Server 2022 で成功するケースがあったので、物理ホストの CPU / UEFI の設定として、Nested Hyper-V がサポートされていないというわけではなさそうでした。
確実に有効化ができない / Azure Stack HCI で有効化ができず Admin Center からのセットアップを完了することができずに悩んでいました。
解決方法
冒頭でアドバイスいただいた内容を実行することで、エラーが発生する仮想マシンで Nested Hyper-V を有効化することができました。
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -NoRestart Install-WindowsFeature -Name "Hyper-V" -IncludeManagementTools Restart-Computer -Force
上記で Hyper-V を有効化した後、仮想マシンが作成できれば Nested Hyper-V を有効化することに成功しています。
追加で情報をいただいたのですが、Release notes for Azure Stack HCI, version 20H2 に次のように記載がされているということでした。
言われてみると、以前、Gen 8 の NUC 上に Azure Stack HCI を Nested Hyper-V で構築した際には、Install-WindowsFeature -Vhd を実行して、Hyper-V を有効化していた気がしました…。
このような方法を使用すると、Nested Hyper-V をサポートしている環境で Hyper-V を有効化できない場合の対応を行うことができます。
今回は、Windows Server 2022 で Nested Hyper-V が有効化できるケースがあったので、Azure Stack HCI のリリースノートを確認ということが思い浮かばず、情報の確認に迷走してしまいました。