喜大普奔!Hyper-V 和 VMWare 終於能夠無縫共存、同時運行了!

早期,Hyper-V 和 VMWare Workstation/Player 不能共存。若是在啓用了 Hyper-V 的 Windows 中強行運行 VMWare Workstation/Player,它會提示「VMWare Workstation/Player and Hyper-V 不兼容,請在運行 VMWare Workstation/Player 以前移除 Hyper-V 角色。」(VMWare Workstation/Player and Hyper-V are not compatible. Remove the Hyper-V role from the system before running VMWare Workstation/Player)html

VMWare Workstation 彈出的不兼容提示
VMWare Workstation 彈出的不兼容提示

(圖片來源:VMWare 官網[1]web

1. 緣由分析

Hyper-V 是一個type 1 hypervisor[2],當在 Windows 中啓用 Hyper-V 時,Windows 系統在硬件底層與 Windows 應用層之間插入了一層 Hyper-V,而原來的 Windows 應用層則變成了一個運行在 Hyper-V 上的虛擬機。windows

而 VMWare Workstation/Player 使用一種被稱爲虛擬機監視器(Virtual Machine Monitor,VMM)[3]的機制,直接訪問 CPU 內建的虛擬化功能,所以,它們自己不能在虛擬機環境中運行,換句話說,不支持嵌套虛擬化(nested virtualization)。安全

當 Windows 啓用 Hyper-V 時,原來的 Windows 變成了虛擬機環境,恰恰 VMWare Workstation/Player 不能在虛擬機環境中運行,所以,運行VMWare Workstation/Player 時會報錯。編輯器

2. 傳統的解決方法

傳統的解決方法是在選擇多系統的啓動菜單中新增一個選項,讓 Windows 在啓動時不加載 Hyper-V [4]flex

主要步驟以下:ui

解決辦法:this

以管理員身份打開命令提示符,運行以下兩條命令:spa

bcdedit /copy {default} /d "name"
bcdedit /set {ID-Number} HyperVisorLaunchType OFF 複製代碼

命令詳解:3d

第一條命令中 name 參數支持自定義。

若是第一條命令成功的話,就會有一串很長的 ID 出現,複製它,第二條命令中須要用到,即 ID-Number 參數,要把它複製到「{}」這個符號中間。

好比我執行的命令:

bcdedit /copy {default} /d "Windows Server 2012 Without Hyper-V"
bcdedit /set {ce54aea7-ad33-11e9-9022-f8edf66e1542} HyperVisorLaunchType OFF 複製代碼

執行成功後能夠用 msconfig 驗證是否成功建立啓動項,並將引導菜單超時時間修改大一些。

而後重啓系統,在選擇啓動項界面選擇"Windows Server 2012 Without Hyper-V"就能運行 VMWare 了。

這樣比裝雙系統方便些,並且這兩個引導進去的系統是同樣的,只是,有一>個只能運行 VMWare,另外一個只能運行 Hyper-V。

3. 遇到了新困難

Windows 引入的一些新功能,例如 WSL 二、 基於虛擬化的安全功能(Virtualization Based Security, VBS,包括Windows Sandbox、Credential Guard、 Application Guard 等)依賴 Hyper-V 環境[5],若是 Windows 系統不加載 Hyper-V, 這些功能也沒法使用。

古人有詩云,世間安得雙全法,不負如來不負卿。有沒有什麼雙全法能夠兼得魚與熊掌,讓 VMWare Workstation/Player 與 Hyper-V 真正共存呢?

4. VMWare 和微軟合做

從 VMWare Workstation/Player 15.5.5 版本開始,VMWare 公司重構了 VMM機制,將 VMM 機制調整爲在用戶級別運行[6],再也不直接訪問硬件,而是經過利用微軟的 Windows Hypervisor Platform (WHP) 的 API 來運行。從而完全解決了 VMWare Workstation/Player 與 Hyper-V 的衝突問題。

5. 如何讓 VMWare 和 Hyper-V 共存?

  1. 將 Windows 版本升級到 Windows 10 20H1 或更高版本。

  2. 將 VMWare Workstation/Player 升級到 15.5.5 或更高版本,本文以 VMWare Player 爲例。注意,在安裝時,須要在如圖所示的這一步勾選「自動安裝 Windows Hypervisor Platform (WHP)」。 Snipaste_2020-06-04_21-39-20

  3. 運行 VMWare Workstation/Player,新建或導入虛擬機。

  4. 打開虛擬機的設置選項,找到「處理器」,去掉如圖所示的三個選項前面的鉤,點擊「肯定」。 image 不然,在運行虛擬機時,VMWare Workstation/Player 會提示「開機時出錯: VMWarePlayer 在此主機上不支持嵌套虛擬化。模塊 MonitorMode 啓動失敗。未能啓動虛擬機。」(VMware Workstation does not support nested virtualization on this host. Module ‘MonitorMode’ power on failed. Failed to start the virtual machine.) image

至此,大功告成。

Hyper-V(左)和 VMWare(右)同時運行
Hyper-V(左)和 VMWare(右)同時運行

參考資料

[1]

VMware Workstation Zealot: https://blogs.vmware.com/workstation/2019/08/workstation-hyper-v-harmony.html

[2]

hyper-v 和 vmware 不兼容,是技術的緣由?仍是商業緣由?: https://www.zhihu.com/question/21260608

[3]

VMware Workstation 15.5 Now Supports Host Hyper-V Mode: https://blogs.vmware.com/workstation/2020/05/vmware-workstation-now-supports-hyper-v-mode.html

[4]

windows下vmware和Hyper-v共存方法: https://www.cnblogs.com/zqifa/p/11327539.html

[5]

VMware Workstation and Hyper-V: https://techcommunity.microsoft.com/t5/virtualization/vmware-workstation-and-hyper-v/ba-p/1419928

[6]

VMware Workstation 15.5 Now Supports Host Hyper-V Mode: https://blogs.vmware.com/workstation/2020/05/vmware-workstation-now-supports-hyper-v-mode.html

本文使用 mdnice 排版

相關文章
相關標籤/搜索