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

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

NAKIVO Hyper-V 備份解決方案

NAKIVO Hyper-V 備份解決方案

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

背景與工作原理

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

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

How Hyper-V and Windows applications work on a computer

此不相容性是由 Hyper-V 所導致,因為在已啟用 Hyper-V 角色的 Windows 電腦上,虛擬化擴充功能並未對安裝於該電腦上的第 2 類虛擬化程式介面提供存取權限。

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 Boot 已啟用。

Credential 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) 中移除 Hyper-V 特點: Control Panel, Add Roles, 以及 Features 精靈。

在 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

方法 2:使用 PowerShell 停用 Hyper-V 特點

您也可以透過命令列介面(而非圖形使用者介面)執行類似的操作。

以系統管理員身分登入 PowerShell,並執行以下命令以停用 Hyper-V 特點:

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

重新啟動主機:

shutdown -r -t 0

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

此方法的原理是透過編輯開機設定資料,在不解除安裝 Hyper-V 角色的情況下停用 Hyper-V 的開機功能。

以系統管理員身分登入 PowerShell,或從提升權限的命令提示字元執行以下命令,以停用 Hyper-V:

bcdedit /set hypervisorlaunchtype off

若需重新啟用 Hyper-V 並將預設值恢復原狀,請執行以下指令:

bcdedit /set hypervisorlaunchtype auto

為了獲得更完善的控制與便利性,請在 Windows 10 中停用快速啟動。開啟 Windows 登錄編輯程式,並前往:

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}"

方法 4:使用 dism.exe 在 PowerShell 中解除安裝 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

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

此方法用於停用 Device Guard 以及 Credential Guard,這些是與 Hyper-V 相關的特點。

開啟本機電腦的"群組原則編輯器"。群組原則編輯器位於 Windows 10 Pro, Enterprise,以及 Education. 在命令提示字元中,執行 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 中(以系統管理員身分)執行以下指令來停用 Device Guard 以及 Credential Guard 在下一次 Windows 啟動時。

將 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-VBSSecConfig.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 工作站

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

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

VMware Workstation 15.5.5 版本之前,所使用的虛擬機器監控程式 (VMM) 可直接存取 CPU 及虛擬化指令集(Intel VT-x 或 AMD-V)。 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 Workstation 無法在執行 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 系統上透過 Hyper-V API 運作,其運作方式類似於 VMware 工作站。

若要讓 VirtualBox 能透過 Hyper-V API 運作,必須在主機 Windows 電腦上啟用以下特點:

  • Hyper-V
  • Windows 虛擬化平台

如果已啟用 Hyper-V 特點,但 Windows Hypervisor Platform 特點已停用,則在 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 等使用 Hyper-V 引擎的新 Windows 特點,為在 Windows 電腦上使用其他虛擬化平台(如 VMware Workstation、VirtualBox、QEMU 及 Google Android Emulator)的用戶、系統管理員和軟體開發人員帶來許多問題。 解決這些不相容問題有兩種方法:停用/解除安裝 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