自 Hyper-V 3.0 R2 開始,新提供所謂的第二代(以下簡稱Gen2)虛擬機器,官方表列支援的客體作業系統目前僅有純 64 bit 的 Win8/Win8.1 及 Windows Server 2012/ Server 2012 R2,至於好處跟差異在哪裡,就不在前面贅述,有興趣的客官可參考文末的推薦閱讀。

回到本文。一直以來我有個習慣,大約每一季都會為我或公司的 Hyper-V 準備 Base VM,也就是先乾淨安裝不同版本的作業系統中英文版甚至是位元,徹底做完 Windows Update 後進行 Sysprep 關機,以後只要拷貝 VHDX 硬碟檔,再掛載起來,就會是一台全新乾淨且已經有包含最近更新的虛擬機器,不用每次啟一台新虛擬機器就要跑過一次 Windows Update 做更新,浪費測試時間跟美好人生。

但這次在準備 Windows Server 2012 的 Base VM 時,卻遇到了很奇怪的狀況,只要 Server 2012 是安裝在 Hyper-V 3.0 R2 的 Gen2 VM 環境中,就會無法正常做完更新。

容我簡單重現整個狀況。(想跳過的可以看後段的粗體紅字)
剛安裝好的 Windows Server 2012 Gen2 VM 檢查更新,本文時值 2014 年 3 月會跳出 77 個及 1 個選用,以無腦式選擇安裝只會裝 76 個,至於這 76 個是哪些不是重點。

而是,安裝後重開,開機過程會先套用更新,再重開兩次。

終於套用完更新進入作業系統,會發現還有三個更新要安裝。

這時我再做一次手動檢查(因為過去經驗,系統自動判斷跟手動檢查會有誤差),果然變成了 14 個更新及 2 個選用,再無腦式選擇做更新安裝。

重點來了,花了一堆時間在下載及安裝更新上,最後...會發生...更新失敗所以還原變更。

然後開機再告訴你有更新要裝,然後裝了還是失敗又還原。再開機,再鬼打牆告訴你有更新沒裝。

本來猜測會不會是虛擬機安裝 Windows Server 2012 中文版才發生,結果換英文版依舊同樣下場。甚至在 1 月就遇到這問題時,我也嘗試將更新一支一支安裝想找出關鍵點,但測了三十幾支實在受不了,因為非常浪費時間。當時,國外有人討論只要跳過 KB2871690 就好了,不過我測試多次,即便閃開 KB2871690 仍會有反覆更新且失敗的狀況。

直到前幾天稍微有點時間,重新檢視這個問題,發現微軟官方在二月底更新了 KB2871690 文件資料,內文「Known issues with this security update」一節中有提到「You receive a 0x800f0922 error when you try to install this security update 」的錯誤,在解決方法的附註說:「You do not have to configure BitLocker on any drive. It is only necessary for the BitLocker component to be present on Window Server 2012 when you install security update 2871690. 」,也就是微軟說,請您在 Windows Server 2012 中啟用 Bitlocker 磁碟加密功能也無需設定任何磁碟加密就沒事了。

好吧,我承認對於在 Server 2012 還要多啟用 Bitlocker 功能有點反感,於是重新檢視了文件,其中有一句:「Install the BitLocker optional component on the server that uses UEFI and that has the Secure Boot option enabled.」,看到「that has the Secure Boot option enabled」這段,讓我不禁反向思考,那如果關掉 Secure Boot 呢?

於是,我決定關閉 Gen2 虛擬機的 Secure Boot 選項。
請到虛擬機器的設定內容中,找到「韌體 (Firmware)」,在右邊取消勾選「啟用安全開機 (Enable Secure Boot)」。

果然,在關閉 Secure Boot 後,就不再發生反覆更新且失敗的問題。即便是之後再啟用 Secure Boot 回去,也未對開機造成任何影響。

可能有人會想問,那微軟官方的解法有用嗎?
說實話,我人比較犯賤也的確測試過,確定啟用「Bitlocker 磁碟加密」這方法有用,但...我就是不喜歡多啟用一個我幾乎不會在伺服器上用到的功能。 ╮(╯_╰)╭(攤手)

推薦閱讀:
TechNet 文件庫 - Generation 2 Virtual Machine Overview
TechNet 文件庫 - Secure Boot Overview
John Howard 部落格 - Hyper-V generation 2 virtual machines