在系統管理員日常管理Hyper-v中,可能會遇見各種各樣的錯誤。
筆者這次遇見的錯誤現象是:一臺DB虛擬機無故連接不上,重啓,而且監控軟件也沒有監控到。
從這個描述來看,問題可能不光出在Hyper-v這邊,也可能是出在監控軟件一端,我們姑且先從Hyper-v虛擬機這邊排查起,聽到這個問題的時候,感覺很奇怪,hyper-v虛擬機突然無故重啓,之前從沒遇見過
初步分析,可能是由於虛擬網絡或者Hyper-v宿主機相關因素導致
連接到VM虛擬機中,發現如下兩個錯誤事件
經過google搜索,發現其中一個Event 2的事件日誌,可能爲罪魁禍首
以下爲老外們的相關描述
https://social.technet.microsoft.com/Forums/en-US/6ac83ecd-23cb-401a-931a-fc98e7285b2d/the-vm-and-host-networking-components-failed-to-negotiate-protocol-version-40?forum=winserverhyperv
https://social.technet.microsoft.com/Forums/windowsserver/en-US/d4dcdc8b-107b-4175-a8a6-c529f4833d18/the-vm-and-host-networking-components-failed-to-negotiate-protocol-version-50?forum=winserverhyperv
http://blogs.msdn.com/b/virtual_pc_guy/archive/2014/06/30/can-you-run-windows-server-2012-r2-on-windows-server-2008-r2.aspx
通過描述,我們可以看到,出現這個錯誤的原因,很可能是因爲我們在2008R2的Hyper-v上,運行了2012R2的虛擬機。
首先微軟是不建議這樣做的,微軟建議2012R2或者Win8.1最好在最新的hyperv平臺上運行,一旦我們在08R2的Hyper-v上運行了2012R2的虛擬機,就有可能會出現虛擬機停止響應或者重啓的情況
以下爲微軟相關的KB說明
https://support.microsoft.com/zh-cn/kb/2744129
看過了KB和老外的描述之後,我們再來確定一下,物理機到底是什麼操作系統,但是目前我們只知道虛擬機的連接方法,並不知道物理機的IP地址或者FQDN,那麼如何在虛擬機上知道 虛擬機是運行在那一臺物理機呢?重點來了。
相信這個也是很多朋友的需求,如何在虛擬機中,查詢到虛擬機位於那一臺物理機,實際上,如果虛擬機是Hyper-v虛擬機,會在虛擬機的註冊表中,寫入一些關於Hyper-v物理機的鍵值
打開註冊表位置:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Virtual Machine\Guest\Parameters
可以看到,關於物理機的相關信息,既然在註冊表中有鍵值,那就好說了,只需要打開註冊表,就可以看到虛擬機位於那一臺物理機了有沒有
你可以在來賓OS中通過Powershell進行查詢,命令格式如下
列出虛擬機位於的物理機
(Get-ItemProperty –path “HKLM:\SOFTWARE\Microsoft\Virtual Machine\Guest\Parameters”).PhysicalHostName
列出虛擬機位於的物理機FQDN
(Get-ItemProperty –path “HKLM:\SOFTWARE\Microsoft\Virtual Machine\Guest\Parameters”).PhysicalHostNameFullyQualified
列出虛擬機的“虛擬機名稱”
(Get-ItemProperty –path “HKLM:\SOFTWARE\Microsoft\Virtual Machine\Guest\Parameters”).VirtualMachineName
經過查詢,我們得到了物理機爲 SYSVH-33-207,連接過去看到果然是2008R2
得知之後,我們就按照KB2744129中的要求,安裝KB2744129補丁,即可規避此問題。
雖然說,在2008R2 物理機上安裝KB2744129可以避免問題,但是仍然建議將hyper-v2.0升級至最新的3.0,再運行最新的操作系統。