在巢狀虛擬化的虛擬機器中執行 Hyper-V

巢狀虛擬化功能可讓您在 Hyper-V 虛擬機器 (VM) 中執行 Hyper-V。 這對於虛擬機器中執行 Visual Studio 手機模擬器,或測試通常需要數個主機的組態很實用。

注意

Azure 和內部部署都支援巢狀虛擬化。 不過,如果使用 KVM 之類的非 Microsoft Hypervisor,Microsoft 就無法提供端對端支援。 請確定您的廠商支援此案例。 示範巢狀虛擬化的螢幕擷取畫面,方法是在另一個模擬器中執行模擬器。

必要條件

具有 VT-x 和 EPT 技術的 Intel 處理器

  • Hyper-V 主機必須Windows Server 2016/Windows 10或更新版本
  • VM 設定 8.0 版或更新版本

AMD EPYC/Ryzen 處理器或更新版本

  • Hyper-V 主機必須是 Windows Server 2022/Windows 11或更新版本
  • VM 設定 10.0 版或更新版本

注意

來賓可以是任何 Windows 支援的客體作業系統。 較新的 Windows 作業系統可能支援改善效能的啟發式。

設定巢狀虛擬化

  1. 建立虛擬機器。 如需了解所需的 OS 及 VM 版本,請參閱上列必要條件。
  2. 當虛擬機器為「關閉」狀態時,請對實體 HYPER-V 主機執行下列命令。 這可巢狀虛擬化虛擬機器。
Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
  1. 啟動虛擬機器。
  2. 一如在實體主機中,在虛擬機器上安裝 HYPER-V。 如需如何安裝 Hyper-V 的詳細資訊,請參閱 安裝 Hyper-V

注意

使用 Windows Server 2019 作為第一層 VM 時,vCPU 數目應為 225 或更少。

停用巢狀虛擬化

您可以使用下列 PowerShell 命令,停用停止使用之虛擬主機的巢狀虛擬化︰

Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $false

調整動態記憶體與執行階段記憶體的大小

當 HYPER-V 在虛擬機器內執行時,必須先關閉虛擬機器,才能調整其記憶體。 意即,即使啟用了動態記憶體,記憶體量也不會變動。 虛擬機器如有啟用動態記憶體,任何在虛擬機器開啟時調整記憶體量的嘗試都會失敗。

請注意,單純啟用巢狀虛擬化,對調整動態記憶體或執行階段記憶體的大小沒有影響。 僅當 HYPER-V 在 VM 中執行時,才會發生不相容的問題。

網路連線選項

您有兩個選項可與巢狀虛擬機器連線:

  1. MAC 位址詐騙
  2. NAT 網路功能

改變 MAC 位址

為使網路封包能由兩部虛擬交換器進行路由,必須在虛擬交換器的第一層 (L1) 啟用改變 MAC 位址。 若要啟用此設定,請使用下列 PowerShell 命令。

Get-VMNetworkAdapter -VMName <VMName> | Set-VMNetworkAdapter -MacAddressSpoofing On

網路位址轉譯 (NAT)

第二個選項仰賴網路位址轉譯 (NAT)。 當無法改變 MAC 位址 (例如公用雲端環境) 時,就很適合使用此方法。

首先必須在主機虛擬機器 (即「中間」VM) 中建立虛擬 NAT 交換器。 請注意,此處的 IP 位址僅為範例,其會隨不同環境而異︰

New-VMSwitch -Name VmNAT -SwitchType Internal
New-NetNat –Name LocalNAT –InternalIPInterfaceAddressPrefix “192.168.100.0/24”

接著將 IP 位址指派給網路介面卡︰

Get-NetAdapter "vEthernet (VmNat)" | New-NetIPAddress -IPAddress 192.168.100.1 -AddressFamily IPv4 -PrefixLength 24

每部巢狀虛擬機器都必須指派以 IP 位址與閘道。 請注意,閘道 IP 必須指向上一個步驟中的 NAT 配接器。 您也可以指派 DNS 伺服器︰

Get-NetAdapter "vEthernet (VmNat)" | New-NetIPAddress -IPAddress 192.168.100.2 -DefaultGateway 192.168.100.1 -AddressFamily IPv4 -PrefixLength 24
Netsh interface ip add dnsserver “vEthernet (VmNat)” address=<my DNS server>

巢狀虛擬化的運作方式

現代處理器包含可讓虛擬化更快速且更安全的硬體功能。 Hyper-V 仰賴這些處理器擴充功能來執行虛擬機器 (例如 Intel VT-x 和 AMD-V)。 一般而言,當 Hyper-V 啟動,它會防止其他軟體使用這些處理器功能。 這將導致客體虛擬電腦無法執行 Hyper-V。

巢狀虛擬化為客體虛擬電腦提供這項硬體支援。

下圖顯示非巢狀的 Hyper-V。 Hyper-V Hypervisor 會完全掌控硬體虛擬化功能 (橘色箭號),且不會向客體作業系統公開它們。

已停用巢狀虛擬化的 Hyper V 層級圖表。

另一方面,下圖顯示已啟用巢狀虛擬化的 Hyper-V。 在此情況下,Hyper-V 會向其虛擬機器公開硬體虛擬化延伸模組。 啟用巢狀後,客體虛擬機器可以安裝自己的 Hypervisor,並執行它自己的客體 VM。

已啟用巢狀虛擬化的 Hyper V 層級圖表

第三方虛擬化 App

HYPER-V 虛擬機器不支援 HYPER-V 以外的虛擬化應用程式,而且可能會失敗。 這包括所有需要硬體虛擬化延伸模組的軟體。