虛擬化應用程式無法運作:該怎麼辦?

當您在已安裝 Hyper-V 或相關服務的 Windows 電腦上安裝虛擬化應用程式時,往往會發生錯誤。若在非 Hyper-V 虛擬化應用程式上執行虛擬機器時發生錯誤,將會造成嚴重的問題。這篇部落格文章將說明這些錯誤的成因、解決方法,以及如何在已安裝 Hyper-V 的電腦上執行其他虛擬化應用程式。

NAKIVO for Hyper-V 備份

NAKIVO for Hyper-V 備份

適用於 Hyper-V 的無代理程式、具備應用程式感知能力的備份解決方案。具備防勒索軟體防護、從備份即時啟動虛擬機器,以及支援其他虛擬/實體平台等功能。

背景與運作原理

在 Windows 電腦上安裝 VMware Workstation、VMware Player 或 Oracle VirtualBox 後,您在這些虛擬化應用程式中啟動虛擬機器時,可能會遇到錯誤。即使當時 Hyper-V 虛擬機器並未運行,這些錯誤仍會發生。您可以在同一台電腦上安裝 VMware Workstation 和 VirtualBox,並分別運行 VMware 虛擬機器和 VirtualBox 虛擬機器,但無法同時運行。造成此 Hyper-V 問題的原因是什麼? 讓我們來深入探討。

VMware Workstation、VMware Player 和 VirtualBox 屬於第 2 型虛擬化管理程式,而 Hyper-V 則是第 1 型虛擬化管理程式。第 2 型虛擬化管理程式安裝於運行於硬體上的作業系統之上;第 1 型虛擬化管理程式則直接安裝於硬體之上。所有虛擬化管理程式都需要處理器虛擬化擴充功能,這些是用於硬體虛擬化的指令集——Intel VT-x 或 AMD-V。 Hyper-V 會在 Windows 啟動時接管虛擬化擴充功能。當 Windows 載入時,VMware 工作站和 VirtualBox 將無法使用這些虛擬化擴充功能。每次僅能有一個軟體元件使用 Intel VT-x 或 AMD-V。

How Hyper-V and Windows applications work on a computer

這種不相容性是由 Hyper-V 造成的,因為在已啟用 Hyper-V 角色的 Windows 電腦上,安裝的第二代虛擬化程式管理員無法存取虛擬化擴充功能。

VMware 工作站錯誤:

VMware Workstation and Hyper-V are not compatible. Remove the Hyper-V role from the system before running VMware Workstation.

VMware Workstation and Device/Credential Guard are not compatible. VMware Workstation can be run after disabling Device/Credential guard.

VirtualBox 錯誤:

BSOD, such as BSOD with SYSTEM_SERVICE_EXCEPTION

VT-x is not available (VER_VMX_NO_VMX). E_FAIL (0x80004005).

A VirtualBox VM works too slowly and uses the paravirtualisation (emulation) mode.

最耐人尋味的情況是,當使用者未安裝 Hyper-V,卻在使用 VMware Workstation 或 VirtualBox 時,仍會遇到前述的其中一種錯誤。此錯誤發生於啟用 Windows 自動更新時。隨著更新(Windows 10 v1607 及從 Windows Server 2016 開始的相應 Windows Server 版本),某些新的 Hyper-V 相關特點會在未經 Windows 使用者同意的情況下自動安裝並啟用。這些特點包括 Device Guard 以及 Credential Guard。 Windows 更新雖能修補已知漏洞,但也可能引發新問題並破壞原本運作正常的設定。這正是許多使用者不喜歡自動更新的原因。

Device Guard 是 Windows 中的一組安全性特點,其設計理念在於強化惡意程式碼執行的防護機制。 Device Guard 適用於 Windows 10、Windows Server 2019 及 Windows Server 2019。主要需求包括:UEFI 需以原生模式運行,且須啟用 Secure BootCredential Guard 是一個特點,旨在通過隔離系統和用戶的秘密來減少如果惡意代碼已經運行時攻擊的影響,使得妥協更加困難。

Virtual Secure Mode (VSM) 是一個特點,利用處理器虛擬化擴展在內存的隔離區域中保護數據。HVCI 是虛擬機器保護的代碼完整性。LSA 是本地安全授權。

基於虛擬化的安全性(VBS) 是一類技術,使用虛擬化擴展,包括 VSM,在 Windows 中提供安全性。需要 Hyper-V 角色來實現這些特點(不需要 Hyper-V 管理工具)。

超級管理程式(Hyper-V) 首先加載,然後操作系統(Windows)加載。Hyper-V 提供硬件和操作系統之間的抽象層。VSM 允許將特定關鍵程序和它們使用的內存標記為屬於由 Hyper-V 控制的獨立操作系統。該原則類似於在 Hyper-V 主機上運行的兩個虛擬機器的隔離,每個虛擬機器只能使用分配給它的硬件資源。

Virtualization Applications Are Not Working: What Do You Do?

注意: 如果需要來自 VMware 的類型 1 超管理程式,請使用 VMware ESXi 和 VMware vSphere 環境。在這些博客文章中了解更多信息:Hyper-V 與 VMware 比較, VMware 工作站與 VMware Player 比較, 以及 如何在 Hyper-V 上安裝 ESXi

讓我們深入探討如何解決 Hyper-V 和其他虛擬化應用程式的兼容性問題。

方法 1: 在 GUI 上解除安裝 Hyper-V

通過在 CMD 中運行以下命令檢查 Windows 組態的系統資訊:

msinfo32.exe

系統資訊窗口打開。在以下截圖中,您看到 Hyper-V 已啟用(已檢測到超管理程式),並且Device Guard Virtualization-基於的安全性正在運行。現在您可以移除這些特點。

Viewing system information in Windows

應該注意的是,移除 Hyper-V 後,以下與 Hyper-V 相關的特點將不再可用:

  • Hyper-V
  • Credential Guard and Device Guard
  • Virtual Machine Platform
  • Windows Sandbox
  • WSL2.

在圖形用戶界面(GUI)中使用Control Panel, Add Roles,Features向導移除 Hyper-V 特點。

在 Windows 10 中,打開Control Panel,點擊Programs and Features,然後點擊Turn Windows features on or off

Windows Features窗口打開。

取消選擇Hyper-V複選框,然後點擊OK

要完成 Hyper-V 的移除,請重新啟動計算機。

Removing Hyper-V in Windows 10 to allow other virtualization applications to work properly

在 Windows 10 和 Windows Server 2016 上移除 Hyper-V 的步驟相似。

在 Windows Server 2016 中,打開Server Manager 並點擊 Manage > Remove Roles and Features。 在Remove Roles and Features向導中,移至Server Roles步驟,取消選中Hyper-V。在每個步驟中按Next繼續。需要重新啟動才能完成移除 Hyper-V 角色。

Removing Hyper-V in the Remove Roles and Features wizard

方法二:使用 PowerShell 停用 Hyper-V 功能

您可以使用命令行界面執行類似的操作,而不是 GUI。

以管理員身份登入 PowerShell,並執行命令以停用 Hyper-V 功能:

Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Hypervisor

重新啟動您的主機機器:

shutdown -r -t 0

方法三:使用 BCDedit 停用 Hyper-V

此方法的想法是編輯啟動配置數據並停用 Hyper-V 的啟動而不解除安裝 Hyper-V 角色。

以管理員身份登入 PowerShell,或者從提升的命令提示符執行命令以停用 Hyper-V:

bcdedit /set hypervisorlaunchtype off

如果需要重新啟用 Hyper-V 並將預設值恢復,請執行以下命令:

bcdedit /set hypervisorlaunchtype auto

為了更多控制和便利,在 Windows 10 中停用快速啟動。開啟 Windows Registry Editor,然後移至:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerPower 

HiberbootEnabled參數設置為0

如果您有時需要使用 Hyper-V 虛擬機器,可以為 Windows 啟動管理器創建兩個入口:一個是啟動具有 Hyper-V 的 Windows,另一個是不具有 Hyper-V 的 Windows。然後在啟動 Windows 之前選擇所需的選項。此方法防止您每次需要啟用或停用 Hyper-V 時在 PowerShell 中手動運行命令。

bcdedit /copy "{current}" /d "No Hyper-V"

"The entry was successfully copied to {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}."
複製並取代值的部分用於xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.

bcdedit /set "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" hypervisorlaunchtype off

Editing boot configuration in Windows

重新啟動計算機。

計算機重新啟動後,您應該在 Windows 啟動管理器中看到兩個選項。

Two boot options in Windows Boot Manager

如果要刪除No Hyper-V 啟動項,請對/delete使用bcdedit.選項

獲取當前啟動項的列表:

bcdedit /v

輸出中顯示所有項及其標識符的列表。複製您希望移除的項的 ID,然後運行以下命令:

bcdedit /delete "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"

方法四:在 PowerShell 中使用 dism.exe 解除安裝 Hyper-V 角色

此方法的想法是使用命令行界面的部署映像服務和管理工具來解除安裝 Hyper-V。

以管理員身份登入 CMD 或 PowerShell。運行以下指令以解除安裝 Hyper-V:

dism.exe /Online /Disable-Feature:Microsoft-Hyper-V

如果想要再次安裝 Hyper-V,可使用此命令:

dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All

How to uninstall Hyper-V in the command line interface

方法五:關閉 Windows 中基於虛擬化的安全性

此方法用於停用Device GuardCredential Guard,這些是與 Hyper-V 相關的功能。 開啟本機電腦的”群組原則編輯器”。”群組原則編輯器”可於 Windows 10 Pro, EnterpriseEducation取得。在命令提示字元中,執行 gpedit.msc

前往 Local Computer Policy > Computer Configuration > Administrative Templates > System > Device Guard

雙擊 Turn On Virtualization Based Security. 預設情況下,此設定的狀態為 Not configured.

Turn Off Virtualization Based Security that uses Hyper-V

在開啟的視窗中,選取 Disabled ,然後按下 OK 儲存設定,並關閉視窗。

Close the Group Policy Editor and restart your computer to make changes take effect

另一種方法是編輯登錄檔

在未內建”群組原則編輯器”的 Windows 10 Home 版本中,您可透過 Windows 登錄檔停用”基於虛擬化的安全性”。

在變更登錄設定前,請先備份 Windows 登錄檔,以避免發生錯誤與問題。

開啟登錄編輯程式。在 regedit 命令列中執行 (請以系統管理員身分開啟)。

前往 HKEY_LOCAL_MACHINE > SYSTEM > CurrentControlSet > Control > DeviceGuard

若缺少 EnableVirtualizationBasedSecurity 項目,請建立此項目。要建立新項目,請在 DeviceGuard 目錄中的空白處按右鍵,並在快顯選單中點選 New > DWORD (32-bit) Value。為此登錄項目輸入 EnableVirtualizationBasedSecurity 名稱。預設情況下,此項目的資料應設定為 0 (參見以下螢幕截圖)。您可以雙擊 EnableVirtualizationBasedSecurity 並手動設定 0

Editing registry to disable Virtualization Based Security in Windows

前往 HKEY_LOCAL_MACHINE > SYSTEM > CurrentControlSet > Control > Lsa

Lsa 目錄中建立一個新的登錄項目。在 Registry Editor 視窗的右側窗格中,右鍵點擊空白處。在快顯選單中,點擊 New > DWORD (32-bit) Value.

為此值輸入名稱 LsaCfgFlags 。此值必須設定為 0

How to disable LSA in Windows Registry

關閉登錄編輯程式,並重新啟動電腦。

您可以在 PowerShell 中(以系統管理員身分)執行以下命令,以在下次 Windows 啟動時停用 Device GuardCredential Guard

將 UEFI 系統分割區掛載至 X: 磁碟機(選擇一個未使用的磁碟區):

mountvol X: /s

複製 C:WindowsSystem32SecConfig.efi to X:EFIMicrosoftBootSecConfig.efi ,並設定若檔案已存在則覆寫的選項。此檔案是 Windows 安全性設定工具的開機映像檔。

copy %WINDIR%System32SecConfig.efi X:EFIMicrosoftBootSecConfig.efi /Y

在開機選單中建立一個新選項,ID 為 {0cb3b571-2f2e-4343-a879-d86a476d7215} ,名稱設定為 DebugTool :

bcdedit /create {0cb3b571-2f2e-4343-a879-d86a476d7215} /d "DebugTool" /application osloader

將前一步驟建立的開機選項設定為 EFIMicrosoftBootSecConfig.efi:

bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} path "EFIMicrosoftBootSecConfig.efi"

將 Windows 開機管理員設定為在下次重新開機時將新項目設為預設選項。 之後,重新啟動 Windows 應可恢復正常開機。

bcdedit /set {bootmgr} bootsequence {0cb3b571-2f2e-4343-a879-d86a476d7215}

設定開機載入程式,使其在啟動 DISABLE-LSA-ISO,DISABLE-VBS 檔案時,將選項傳遞給 SecConfig.efi 檔案。

bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} loadoptions DISABLE-LSA-ISO,DISABLE-VBS

將已開機磁碟的分區設定為 X: 磁碟:

bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} device partition=X:

從系統中卸載 X: 磁碟:

mountvol X: /d

方法 6: 更新 VMware Workstation

若您的實體電腦上安裝的是 Windows 10 版本 2004 (20H1) 建置 19041 或更新版本,您可以將 VMware Workstation 升級至 VMware Workstation 15.5.6 或更新版本,並在 Windows 電腦上執行 VMware 虛擬機器,無需停用或解除安裝 Hyper-V 及基於虛擬化的安全性 (VBS) 特點(包括 Device Guard 和 Credential Guard)。

由於收到許多客戶的投訴,微軟與 VMware 決定共同開發一項專案,採用 Microsoft Windows Hypervisor Platform (WHP) API,讓 VMware 工作站等第 2 類虛擬化程式管理員(type 2 hypervisors)能夠在已啟用 Hyper-V 的主機上運行。這些 API 允許應用程式管理 CPU 資源、讀寫登錄值、終止 CPU 運作,以及產生中斷訊號。

15.5.5 版本之前的 VMware Workstation 採用一種可直接存取 CPU 及虛擬化指令集(Intel VT-x 或 AMD-V)的虛擬機器監控程式(VMM)。 VMM 是在特權模式下運作的。若在 Windows 主機上啟用了”基於虛擬化的安全性”特點,則會在硬體與 Windows 之間新增一個虛擬管理程式層(Hyper-V)。Hyper-V 可直接存取用於硬體虛擬化的 CPU 功能,而 VMM 則無法存取 CPU 虛擬化功能。

VMware 針對 VMware 工作站 15.5.6 的架構進行了調整,使該產品能使用 Microsoft WHP API 並解決相容性問題。現在,VMM 可透過 WHP API 在使用者層級(而非特權模式)運行,並在無需直接存取 CPU 虛擬化擴充功能的情況下執行虛擬機器。此模式稱為”使用者層級監控程式”(ULM)或”主機 VBS 模式”。 若您從 Windows 主機上解除安裝與 Hyper-V 相關的特點,VMware Workstation 會自動偵測到此情況,並將 VMM 切換為直接存取 CPU 虛擬化擴充功能(於特權模式下執行)。

Windows Hypervisor Platform (WHP) 必須安裝在已啟用 Hyper-V 的實體 Windows 機器上,才能讓 VMware Workstation 在該機器上執行 VMware 虛擬機器。 請透過”控制台”中的” Windows Hypervisor Platform“選項,安裝” Turn Windows features on or off “特點。

因此,您可以將實體機器上的 Windows 10 和 VMware Workstation 更新至支援在同一台機器上同時執行 Hyper-V 相關功能及 VMware Workstation 虛擬機器的版本。

主機 VBS 模式的限制:

  • Windows Hypervisor Platform 不支援 Windows Server 2016 及其他 Windows Server 版本和發行版。 因此,VMware 工作站無法在執行 Windows Server 的實體機器上,以主機 VBS 模式執行虛擬機器。
  • 不支援嵌套虛擬化。您無法執行嵌套虛擬機器(即位於 VMware 工作站虛擬機器內的虛擬機器)。
  • VMware 虛擬機器的執行速度可能會變慢。
  • 不支援 x86 效能監控計數器 (PMC)。
  • 不提供使用者模式保護金鑰 (PKU) 功能。
  • 不提供受限事務性記憶體 (RTM) 及硬體鎖定省略 (HLE) 功能。

VirtualBox 與 Hyper-V

自 VirtualBox 6.0 起,VirtualBox 可與 Hyper-V、Device Guard 及 Credential Guard 共存。 VirtualBox 6 可在 Windows 10 v1803 x64 系統上,與 VMware 工作站類似地使用 Hyper-V API。

為使 VirtualBox 能與 Hyper-V API 配合運作,必須在主機 Windows 電腦上啟用以下特點:

  • Hyper-V
  • Windows 虛擬化平台

若已啟用 Hyper-V 功能,但 Windows 虛擬化平台功能處於停用狀態,則在 System > Acceleration 的虛擬機器設定摘要中,您會看到 Paravirtualisation mode 處於啟用狀態。 若嘗試啟動虛擬機器,VirtualBox 會提醒您應啟用 Windows Hypervisor Platform,並顯示錯誤訊息:

錯誤訊息如下:
WHvCapabilityCodeHypervisorPresent is FALSE! Make sure you have enabled the 'Windows Hypervisor Platform' feature.

(VERR_NEM_NOT_AVAILABLE).

VT-x is not available (VERR_VMX_NO_VMX).

若 Windows 中所需的 Hyper-V 特點已啟用,則在”系統”區段中會針對該虛擬機器顯示以下資訊:

Acceleration: VT-x/AMD-v, Nested Paging, Paravirtualization Hyper-V

Hyper-V and VirtualBox are installed on the same Windows host

虛擬機器應能成功啟動。VirtualBox 視窗的底部面板中會顯示一個綠色的烏龜圖示。 此圖示表示虛擬機器正在 Hyper-V 半虛擬化模式下運行,而非 VirtualBox 通常在直接與 CPU 虛擬化擴充功能互動時所使用的原生模式。在已啟用 Hyper-V 及相關特點的電腦上,VirtualBox 虛擬機器的效能會下降。您可以依照前述說明停用或移除 Hyper-V,以便在 VirtualBox 上以原生模式運行虛擬機器,並直接使用 CPU 虛擬化擴充功能。

另請參閱 VirtualBox 與 Hyper-V 比較 的比較分析,以及 VirtualBox 與 VMware 比較 的比較分析。

結論

諸如”基於虛擬化的安全性”(Device Guard 和 Credential Guard)、Windows Sandbox 以及 WSL 等新 Windows 特點,由於使用 Hyper-V 引擎,會為在 Windows 電腦上使用其他虛擬化平台(如 VMware Workstation、VirtualBox、QEMU 及 Google Android 模擬器)的用戶、系統管理員和軟體開發人員帶來許多問題。 解決這些不相容問題有兩種方法:停用/解除安裝 Hyper-V,或使用支援 Hyper-V API 的新版虛擬化應用程式,例如微軟提供的 Windows Hypervisor Platform API。

若在配備 Hyper-V 的電腦上,透過 API 在 VirtualBox、VMware Workstation 及其他超管理程式上執行虛擬機器,可能會降低非 Hyper-V 虛擬機器的效能。當虛擬化應用程式發生故障時,資料備份至關重要。 若您尚未為您的環境選擇最適合的 Hyper-V 備份解決方案,不妨考慮 NAKIVO Backup & Replication。此解決方案提供強大的備份、勒索軟體防護、災難還原等功能。下載免費版本,親身體驗此解決方案的實際運作效果。

試試 NAKIVO Backup & Replication

試試 NAKIVO Backup & Replication

立即申請免費試用,全面探索本解決方案的所有資料保護功能。15 天免費試用。無任何特點或容量限制。無需提供信用卡資訊。

People also read