[廚餘回收] VirtualBox 與 Hyper-V 在 Windows 10 底下發生衝突的緩解辦法

過去我都是用 VirtualBox 安裝一些虛擬機器來做一些實驗及測試,還有體驗一些新的玩具,自從升上 Windows 10 之後,開啟 VirtualBox 的虛擬機器就會出現這個畫面,詳細資料寫著 VT-x is not available

原來 Windows 10 預設是開啟 Hyper-V 功能的,而 Hyper-V 會跟 VirtualBox 造成衝突。

由於 Hyper-V、VirtualBox、VMWare 這一類的虛擬機器管理軟體通常會搭配晶片廠商所開發的硬體虛擬化技術(例如:Intel VT-x、AMD SVM)來模擬 Host 的硬體設備給虛擬機器使用,透過這樣的硬體虛擬化技術我們才可以控制虛擬機器的 CPU 個數、記憶體數量、USB…等等。

但是很可惜,硬體虛擬化技術的資源同一時間只能給一個虛擬機器的管理軟體來佔用,而原本我就都是使用 VirtualBox 來管理虛擬機器的,所以把 Hyper-V 的功能關閉也就相安無事。

直到台灣時間 2016/04/01 微軟宣布 Xamarin 全面免費之後,我就把 Xamarin 裝了起來,在安裝的過程發生了一個嚴重錯誤 Microsoft Visual Studio Emulator for Android (2016 年 1 月) : 安裝程式失敗。安裝時發生嚴重錯誤。 錯誤碼: 1603

開發 Android 程式沒用模擬器跟下盲棋沒什麼兩樣,會安裝失敗的原因在於 Microsoft Visual Studio Emulator for Android 需要仰賴 Hyper-V 的服務,這時候只要開啟 Hyper-V,重新開機後再裝一次 Microsoft Visual Studio Emulator for Android 就可以了。

沒錯,我還有 VirtualBox 的問題要解決,找了一個下午,最後只能透過切換開機選項來使用 VirtualBox 或 Hyper-V 兩個之中的其中一個。

產生不載入 Hyper-V 服務的開機選項

透過命令提示字元輸入下面這行指令

bcdedit /copy {current} /d "Windows 10 (關閉 Hyper-V)"

這行指令是將現行的開機選項複製成一個新的,並重新命名為 Windows 10 (關閉 Hyper-V),指令執行成功之後會產生一串 GUID,請記下這一串 GUID,如果忘了也沒關係,可以再輸入 bcdedit 指令來查看。

2017-09-10 補充:感謝網友 Jed 提醒,記得用系統管理員權限開啟 CMD 視窗。

設定關閉載入 Hyper-V 服務

bcdedit /set {剛剛那一串 GUID} hypervisorlaunchtype off

重新開機後就可以看到我們新增加的開機選項,而我使用 VirtualBox 的頻率比較高,所以我將關閉 Hyper-V 服務的開機選項設為預設值。

其實這樣做只是一個折衷的手段,未來還是有可能會遇到在開發 Android 程式時,需要搭配虛擬機器來開啟一些服務提供給程式使用,不過到那個時候我就會考慮把虛擬機器移到 Hyper-V 執行,這樣就不必去煩惱衝突的問題。

參考資料

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學