在系统管理员日常管理Hyper-v中,可能会遇见各种各样的错误。
笔者这次遇见的错误现象是:一台DB虚拟机无故连接不上,重启,而且监控软件也没有监控到。
从这个描述来看,问题可能不光出在Hyper-v这边,也可能是出在监控软件一端,我们姑且先从Hyper-v虚拟机这边排查起,听到这个问题的时候,感觉很奇怪,hyper-v虚拟机突然无故重启,之前从没遇见过
初步分析,可能是由于虚拟网络或者Hyper-v宿主机相关因素导致
连接到VM虚拟机中,发现如下两个错误事件
经过google搜索,发现其中一个Event 2的事件日志,可能为罪魁祸首
以下为老外们的相关描述
通过描述,我们可以看到,出现这个错误的原因,很可能是因为我们在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,再运行最新的操作系统。
https://blog.51cto.com/wzde2012/1652742