︿
Top


更新 (20161110)

本文實作環境為 Windows Server 2016 TP4,目前最新 Windows Server 2016 已經正式發佈,作法上也稍有不同。詳細資訊請參考新文章「實作 Hyper-V Nested Virtualization」。



前言

在 Hyper-V 虛擬化化平台舊版本中,要實作出 Nested Virtualization 環境非常困難。現在,從 Windows Server 2016 TP4 (10565 之後) 版本,開始支援「Nested Virtualization in Windows Server Hyper-V」機制,往後要建置 Lab 環境將更加容易了。

簡單來說,若是舊版的 Hyper-V 虛擬化化平台,便僅支援 Level 0、Level 1 這樣的運作架構。


現在,可以在 Hyper-V Hypervisor (Level 1) 當中,再產生出一層 Hyper-V Hypervisor (Level 2),並且能夠運作 Guest OS。


下列為目前 Hyper-V Nested Virtualization 的環境需求:
  • Nested VM 至少要指派 4GB 虛擬記憶體空間。
  • VM 虛擬主機必須啟用 vCPU 的 Virtualization Extensions 功能。
  • VM 虛擬主機必須啟用 MAC Address Spoofing 功能。
  • Level 1 的 Hyper-V Hypervisor 及 Level 2 的 Hyper-V Hypervisor,應該要採用相同的版本。簡單來說,都採用 Windows Server 2016 TP4 版本即可,值得注意的是,目前支援 Hyper-V Hypervisor 而已,還支援其它 Hypervisor。

下列為 Level 2 上運作的 VM (Nested VM) 的相關限制:
  • 上層母體的 Device Guard 機制無法套用。
  • 上層母體的 VBS (Virtualization Based Security) 機制無法套用。
  • 必須要停用 VM 動態記憶體功能。
  • Runtime Memory Resize 機制會失敗。
  • 套用 Checkpoint 時會失敗。
  • Live Migration 動作會失敗。
  • Save / Restore 動作會失敗。



實作 Hyper-V Nested Virtualization

首先,我們可以看到在 Level 1Hyper-V Host 中,所建立的 VM 虛擬主機採用 Coreinfo 檢查後可以發現,目前的 VM 虛擬主機「尚未感知」到母體的虛擬化功能。


請在 Level 1 的 Hyper-V Host 中,執行下列指令將 Hyper-V Host 的硬體輔助虛擬化技術「傳遞」給 VM 虛擬主機 (此實作該 VM 的名稱為 TestVM)。 (當然,前提是 Hyper-V Host 支援 Intel VT-x / EPT 硬體輔助虛擬化技術)。
PS C:\tmp> Invoke-WebRequest https://raw.githubusercontent.com/Microsoft/Virtualization-Documentation/master/hyperv-tools/Nested/Enable-NestedVm.ps1 -OutFile ~/Enable-NestedVm.ps1
PS C:\tmp> ~/Enable-NestedVm.ps1 -VmName "TestVM"



執行後,在啟用 Nested VM 機制的指令碼中,將會詢問是否啟用 TestVM 虛擬主機的「vCPU Virtualization Extenstions」及「MAC Address Spoofing」功能,請鍵入 Y 確認啟用。


此時,開啟 TestVM 後再度使用 Coreinfo 檢查後可以發現,目前的 TestVM 已經可以「感知」到 Hyper-V Host 所傳遞過來的硬體輔助虛擬化技術。


因此,便可以放心安裝 Hyper-V 伺服器角色了。


Hyper-V Nested Virtualization 達成!!




參考資源

文章標籤: ,