﻿# IT 經驗談：關於網域主控站安裝在 VM 裡的慘痛教訓

我公司人不多，但還是有導入 AD 架構，運作幾年來其實也沒發生過什麼狀況，但昨天卻發生一件很瞎的 IT 事件，讓我處理這個問題處理到超過晚上 12 點，原因就出在一個非常瞎的原因，實在讓我又氣又恨，不知道要恨 Hyper-V 還是 AD 架構，不過再怎麼說這些都是自找的，只能吃苦當吃補了！

我前陣子買了壹台新主機，並安裝了 Hyper-V 與 Exchange Server 2007，而且也把舊的網域主控站 ( DC, Domain Controller ) 虛擬化，安裝在這台主機的 Hyper-V 裡。

首先，先將新安裝的 VM 設定成為第二台備援用的 DC，誰知道主要的 DC 主機在第二台虛擬化後的 DC 生效後沒幾天就 **自然身亡**（硬碟掛掉），不得已只好把虛擬化後的 DC 當成主要 DC 使用，而且這幾個月都是只有壹台 DC 的情況在運作，且由於是新機器，應該不會出什麼大問題，所以也沒有想到要弄另一台 DC 起來。

運作了快一年也沒出什麼大事，但小問題倒是不少，最常發生的問題如下：

\---

我的主機除了有 Hyper-V 之外，還有另一個依賴 AD 的大怪獸 “**Exchange Server 2007**”，所以該電腦必須加入網域才行。當 Hyper-V 主機重開機時，所有 VM 會先進入「儲存狀態」的狀況，然後進行重開機，重開機完後會自動回覆狀態，但開完機之後所有 Windows 服務與 Hyper-V 服務會同時啟動，Hyper-V 服務啟動後才會啟動所有之前儲存狀態的 VM（包括 DC 那台），所以 Exchange Server 2007 相關服務會先啟動，但因為 DC 這台 VM 尚未完全回覆狀態，所以 Exchange 會因為查不到 DC 而啟動失敗。

因此每次主機重開，我都要手動啟動一次 Exchange Server 2007 的 **Microsoft Exchange System Attendant** 服務，才能讓所有人登入 Exchange 使用。

\---

昨天，我手很癢的先將 Hyper-V 中所有的 VM 手動「儲存狀態」，然後再將 Windows Update 過後的主機重開，這卻導致在重開機後不會自動啟動這些被我手動**儲存狀態**的 VM，當我要手動啟動 DC 這台 VM 時，卻遇到了如下圖的錯誤：

![Hyper-V Manager: An error occurred while attempting to start the selected virtual machine(s).  The computer 'localhost' failed to perform the requested operation.](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/cdb3d82927d26263fca6-image.png "Hyper-V Manager: An error occurred while attempting to start the selected virtual machine(s).  The computer 'localhost' failed to perform the requested operation.")

所有 Hyper-V 中的 VM 都可以啟動，就唯讀 DC 這台主機無法啟動，非常怪異！

從事件檢視器中的 \[應用程式及服務記錄檔\] / \[Microsoft\] / \[Windows\] / \[Hyper-V-VMMS\] / \[Admin\] 發現如下的錯誤，這是因為找不到 DC 的關係才無法啟動的。

![Failed to register service principal name.](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/04b74ae485afb160e071-image.png "Failed to register service principal name.")

所以啦，一整個囧很大，第一次遇到這種服務啟動打死結的情況！

-   主機重開機
-   主機等 DC 上線
-   但 DC 在 Hyper-V 的 VM 裡
-   Hyper-V 等 DC 上線才能啟動 VM
-   但 DC 在 Hyper-V 的 VM 裡
-   Hyper-V 等 DC 上線才能啟動 VM
-   但 DC 在 Hyper-V 的 VM 裡
-   Hyper-V 等 DC 上線才能啟動 VM
-   ……

早知道手動將 DC 儲存狀態會有這種狀況，我就不會雞婆將 DC 手動儲存狀態了，但千金難買早知道阿！

這個教訓讓我學到 3 個寶貴的經驗：

1.  DC 可以安裝在 VM 裡，但只有壹台 DC 時，VM 的 **宿主**(**Host**) 不要加入網域！
2.  沒事不要手動將 DC 儲存狀態或關閉，反正主機重開機時會自動將 VM 重啟！
3.  DC 至少要兩台，兩台都在 VM 裡的話，不要一起關機！

最後，我的自救方法就是新增一個 VM，重新掛載原本 DC 那台 VM 的 VHD 虛擬硬碟，然後開機後重新設定網路，這才救了我一命！
