在系统管理员日常管理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 �Cpath “HKLM:\SOFTWARE\Microsoft\Virtual Machine\Guest\Parameters”).PhysicalHostName
列出虚拟机位于的物理机FQDN
(Get-ItemProperty �Cpath “HKLM:\SOFTWARE\Microsoft\Virtual Machine\Guest\Parameters”).PhysicalHostNameFullyQualified
列出虚拟机的“虚拟机名称”
(Get-ItemProperty �Cpath “HKLM:\SOFTWARE\Microsoft\Virtual Machine\Guest\Parameters”).VirtualMachineName
经过查询,我们得到了物理机为 SYSVH-33-207,连接过去看到果然是2008R2
得知之后,我们就按照KB2744129中的要求,安装KB2744129补丁,即可规避此问题。
虽然说,在2008R2 物理机上安装KB2744129可以避免问题,但是仍然建议将hyper-v2.0升级至最新的3.0,再运行最新的操作系统。