資訊無涯,回頭已不見岸

如何手動復原Hyper-V的虛擬機器設定 Part 1

「天有不測風雲,人有旦夕禍福」,就算伺服器硬體用了Raid 5 還是Raid 6,如果碰上八顆硬碟三天內先後陣亡四顆,也只能宣告不治。是的!我就是碰到這個狀況的苦主,導致練習了兩三個月的Exchange 移轉LAB ,主機在正式實際移轉前毀於一旦。唯一慶幸的是,有部分VM 的設定檔是位於另一顆陣列磁碟上並未損毀,所以在HP 不願意全數更換疑似雞瘟的Seagate 硬碟並重灌Serve 2008 後,我曾想盡辦法要匯入,無奈作業系統只允許正常的匯入匯出方式或VSS 備份進行復原。

「生命會自己找出路!」

觀察案發先後範例VM 設定檔及相關檔案位置。機器掛掉前的路徑及設定檔位置:
V:\HyperV\Gateway
V:\HyperV\Gateway\Virtual Machines\E9EA7716-8831-453C-A641-DE84291A0431.xml

重灌後的路徑及設定檔位置:
D:\HyperV\Gateway
D:\HyperV\Gateway\Virtual Machines\E9EA7716-8831-453C-A641-DE84291A0431.xml

請特別注意「E9EA7716-8831-453C-A641-DE84291A0431」這個XML 設定檔的SID 值,因為它將扮演下面復原步驟很重要的角色。(另外要提醒的是,不同VM 的XML 設定檔的SID 值是不一樣的,請替換上自己所找到的SID 值!)

準備工具(Server 2008 內建指令):
1. mklink
2. icacls

復原原VM 在Hyper-V 管理員的相關設定步驟如下:
1. 請用系統管理員身份執行 [命令提示字元],並切換到Hyper-V 系統的 [Virtual Machines] 目錄。
「cd\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines」

2. 建立Hyper-V 原VM 的Symbolic link及真實XML 檔案對應。
為清楚閱讀及瞭解,我將指令跟設定參數用斷行顯示,實際使用時請將用空格將各行連接,完整指令可參考灰色部分。
「mklink
E9EA7716-8831-453C-A641-DE84291A0431.xml
"D:\HyperV\Gateway\Virtual Machines\E9EA7716-8831-453C-A641-DE84291A0431.xml"」

完整指令:mklink E9EA7716-8831-453C-A641-DE84291A0431.xml "D:\HyperV\Gateway\Virtual Machines\E9EA7716-8831-453C-A641-DE84291A0431.xml" )

 

3. 授予服務SID 的權限至該VM Symbolic link 連結上。而這服務SID 也就是前面所提到的「E9EA7716-8831-453C-A641-DE84291A0431」。
「icacls
E9EA7716-8831-453C-A641-DE84291A0431.xml /grant
"NT VIRTUAL MACHINE\E9EA7716-8831-453C-A641-DE4291A0431":(F) /L」

完整指令:icacls E9EA7716-8831-453C-A641-DE84291A0431.xml /grant "NT VIRTUAL MACHINE\E9EA7716-8831-453C-A641-DE4291A0431":(F) /L )

做完上面步驟之後,會發現你的虛擬機器已經出現在 [Hyper-V 管理員] 了。但別開心的太早,因為還沒做完,貿然啟動只會送錯誤訊息給你看。原因在於,本來的VM 相關檔案也需要將權限授予服務SID。

4. 授予服務SID 的權限至該VM 設定檔及相關檔案所處的資料夾裡。
「icacls D:\HyperV\Gateway\ /T /grant
"NT VIRTUAL MACHINE\E9EA7716-8831-453C-A641-DE84291A0431":(F) /L」

完整指令:icacls D:\HyperV\Gateway\ /T /grant "NT VIRTUAL MACHINE\E9EA7716-8831-453C-A641-DE84291A0431":(F) /L )

 

這樣就恢復原本在Hyper-V 的相關設定啦!

不過事情還沒結束,因為前面提過,最早我是把該VM 的設定檔及相關檔案置於「V:\HyperV\Gateway」,卻在重灌作業系統後,原硬碟代號變成了 [D],因此位置也變成「D:\HyperV\Gateway」。

沒改的話,錯誤訊息如下圖。

因此,還需要修改該VM 的「E9EA7716-8831-453C-A641-DE84291A0431.xml」XML 設定檔內容,將相關路徑指回新的正確路徑。

最後,請記得啟動前修改虛擬機器的網路卡設定,否則一樣不給你啟動啦!因為在先前Hyper-V 系統的網路卡SID,勢必在重灌作業系統或移機使用後不相同,所以必須重新指定。

這裡介紹的復原方式,適合下面幾種狀況:
1. 作業系統或Hyper-V 不明損毀需重新安裝。
2. 手賤移除到Hyper-V 系統裡的Symbolic link,導致無法開啟原VM。
3. 手賤搬動原VM 設定檔的目錄位置,導致無法呼叫原VM。
4. 老闆沒預算給苦命的IT 人買SCVMM,想要異機還原又忘記先匯出Hyper-V 設定。
前提都是,原本的VM 設定檔及相關檔案要保存完好。

不過,範例中的VM 其實是沒有做過快照的,那萬一VM 有Snapshots 快照集能復原嗎?答案是可以的,小弟賣個小關子留到Part 2 解說。

或者,也推薦您參考另一位微軟MVP 保哥的大作:如何手動還原 Hyper-V 的 VM 與 Snapshots 到另一台主機

6 則留言

  1. kai_hsu

    蘇老,你上次教的FG 60B SSL VPN我現在有一個問題請教你一下,
    就是有沒有辦法設定限制用戶端連線多久就斷線,因為我設定了FG60B的設定沒用,WINDOWS SERVER裡我也設定了也是沒用不知是不是我那設定的問題,所以想請教你一下

  2. AskaSu

    To kai-hsu

    我沒印象Windows可以設定連線時間,
    只知道可以設定使用者在哪些時段能連上VPN,
    而且FG60B似乎也沒有看過可限制連線時間...

    如果你的機器還在保固內,
    可以跟台灣Fortigate或代理商尋求電話技術支援。 :)

  3. Victor

    我想應該第四項的人居多吧!,老闆預算通常都給的很少,而且也不認為要另外再買一個CONSOLE。像我就是先把VHD搞一搞,在手動重建新的VM,所有設定全部重設!!

  4. Eric

    蘇大,請教一下

    我最近剛好碰到這樣的狀況,把原先設定檔跟VM檔COPY到其他台電腦上,會出現一樣的錯誤訊息。
    但是我依照你的操作方式,在做完這段「icacls
    E9EA7716-8831-453C-A641-DE84291A0431.xml /grant
    "NT VIRTUAL MACHINE\E9EA7716-8831-453C-A641-DE4291A0431":(F) /L」
    就不大一樣了,在Hyper-V上只出現機碼的名稱,並沒有顯示我原本的名稱,結果我一路把設定做到底,現在竟然出現了「您可能沒有執行此工作的使用權限」。不知道你有碰過這樣的狀況嗎?

    另外我想請教的是,若我只COPY VM檔案去其他台,我若重新設定的話,是否代表我相關設定也要跟著改,因為似乎會有網卡綁設定的問題

    還請您指點,謝謝

  5. AskaSu

    如果會出現「您可能沒有執行此工作的使用權限」,
    代表 VM 的權限並沒有完全成功設定,
    導致無法正常執行。
    假使拷貝的 VM 有帶了快照,
    上面的方法是無法適用的。

    另外,拷貝 VM 到另一台後,
    VM 的網卡設定是一定要重新來過的。

  6. NL

    3. 手賤搬動原VM 設定檔的目錄位置,導致無法呼叫原VM。
    >>>忽然看到這一行,把VM搬回原目錄立馬正常

發佈回覆給「Eric」的留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

© 2024 蘇老碎碎唸

Theme by Anders NorenUp ↑