在今年早些時候,微軟宣布將開發一種新技術,稱之為嵌套虛擬化技術,這樣用戶就可以在Hyper-V虛擬機中運行Hyper-V容器,即在Hyper-V虛擬機中跑Hyper-V虛擬機。現在,在微軟推送的Win10預覽版10565中已經開放了該功能的早期版本。需要說明的是,這項功能是針對系統自帶Hyper-V虛擬機的。
該功能本質上是把在虛擬機中運行虛擬機監控程序所需的一些硬件功能進行了虛擬化。
聽起來有點繞,Hyper-V虛擬機的運行依靠硬件虛擬化技術支持,例如Intel VT-x和AMD-V。通常,一旦Hyper-V在宿主機中安裝後,虛擬機監控程序會將該技術從客戶機中隱藏,阻止客戶虛擬機再安裝Hyper-V。如下圖所示,在之前的版本中,宿主機的Hyper-V虛擬機監控程序擁有虛擬化擴展功能的完全控制權限,功能不對客戶機開放。
而在最新版本中,宿主機的Hyper-V虛擬機監控程序則對客戶機開放虛擬化擴展功能,因此客戶機也可以擁有自己的虛擬機。
如下圖所示,你可以看到在一台電腦中運行了一個Hyper-V虛擬機,而這個Hyper-V虛擬機裡面又運行了一個虛擬機。
需要注意的是,該功能目前還處於預覽階段,因此不可避免的會出現一些問題,不可用於生產環境。以下是已知問題:
嵌套版本必須都是最新版本,Windows Server 2012 R 2以及Windows10預覽版10565之前的版本都不可以。
一旦開啟了虛擬化嵌套技術,以下功能將無法兼容,使用這些功能將導致虛擬機停止工作或功能不起作用:
-動態內存;
-Runtime內存調整;
-在虛擬機中應用checkpoints時將不起作用;
-動態遷移功能;
必須開啟MAC欺騙技術才能保證客戶機正常網絡連接;
目前只支持Intel VT-x虛擬化技術;
電腦需要有足夠大的內存!
開啟虛擬化技術嵌套的方法:
創建一個Hyper-V虛擬機,之後關閉;
運行虛擬化嵌套技術開啟腳本(點此下載):
Invoke-WebRequest https://raw.githubusercontent.com/Microsoft/Virtualization-Documentation/master/hyperv-tools/Nested/Enable-NestedVm.ps1 -OutFile ~/Enable-NestedVm.ps1
~/Enable-NestedVm.ps1 -VmName
在客戶機中啟用Hyper-V功能;
開啟客戶機網絡支持:
在宿主機中運行下面的Powershell命令即可:
Set-VMNetworkAdapter -VMName
此時就可以在客戶機中繼續安裝嵌套的客戶機了。