早期,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 官網[1])web
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 時會報錯。編輯器
傳統的解決方法是在選擇多系統的啓動菜單中新增一個選項,讓 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。
Windows 引入的一些新功能,例如 WSL 二、 基於虛擬化的安全功能(Virtualization Based Security, VBS,包括Windows Sandbox、Credential Guard、 Application Guard 等)依賴 Hyper-V 環境[5],若是 Windows 系統不加載 Hyper-V, 這些功能也沒法使用。
古人有詩云,世間安得雙全法,不負如來不負卿。有沒有什麼雙全法能夠兼得魚與熊掌,讓 VMWare Workstation/Player 與 Hyper-V 真正共存呢?
從 VMWare Workstation/Player 15.5.5 版本開始,VMWare 公司重構了 VMM機制,將 VMM 機制調整爲在用戶級別運行[6],再也不直接訪問硬件,而是經過利用微軟的 Windows Hypervisor Platform (WHP) 的 API 來運行。從而完全解決了 VMWare Workstation/Player 與 Hyper-V 的衝突問題。
將 Windows 版本升級到 Windows 10 20H1 或更高版本。
將 VMWare Workstation/Player 升級到 15.5.5 或更高版本,本文以 VMWare Player 爲例。注意,在安裝時,須要在如圖所示的這一步勾選「自動安裝 Windows Hypervisor Platform (WHP)」。
運行 VMWare Workstation/Player,新建或導入虛擬機。
打開虛擬機的設置選項,找到「處理器」,去掉如圖所示的三個選項前面的鉤,點擊「肯定」。 不然,在運行虛擬機時,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.)
至此,大功告成。
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 排版