一招恢复开不起来的Vmware虚拟机(附py脚本文件)

相信做工控的很多工程师都在使用Vmware WorkStation虚拟机,虚拟机也给我们带来了很多的便利,可以同时运行很多的操作系统,你可以左手操作Rockwell Automation的PLC系统,右手调试SIEMENS 的 PCS7 DCS控制系统,比起曾经的双系统切换方便了很多,但是如果某一天你写了一个月的PLC程序,早上一到单位,发现虚拟机开不起来了,心情无法形容,今天我们的工程师王晓威同学就发生了这么一幕;早上一来一脸愁容,询问下才告知写了好久的程序,今天虚拟机开不起来了,里面有Studio5000程序还有FactoryTalk view SE程序;最终经过一顿猛如虎的操作,虚拟机恢复了挂起状态;成功开启到了昨天下班前的状态;

下面我们就将虚拟机的恢复过程给经常使用Vmware Workstation的工程师进行分享:当你开启虚拟机的时候弹出如下提示:

提示信息为:无法打开虚拟机“Studio5000” (H:\虚拟机\studio5000\Studio5000.vmx):

未找到文件。

是否从库中移除“studio5000” ?

图片

这时请勿点击“移除”按钮,请点击取消按钮;这时虚拟机Studio5000的状态变成了红色的×,我们进入到H:\虚拟机\studio5000的路径下查找,没有studio5000.vmx的文件,我们通过Everything在整个磁盘查找,也没有该文件。

图片

经过和王晓威同学沟通,说是昨天此移动硬盘在其他机器上开启过,因此分析可能是这个时候把studio5000.vmx文件丢失了。

那么为什么vmx文件丢失虚拟机就无法启动了?这里我们将vmWare的几个关键系统文件做个说明:

vmx文件:虚拟系统配置文件,虚拟机启动时先读取该文件信息,然后打开这个文件以启动虚拟系统。

vmem文件:虚拟内存文件,类似于Windows系统的pagefile文件。当虚拟系统执行关机操作后,vmem文件消失,但如果虚拟机挂起关闭时,该文件依旧在系统内不消失。

vmdk文件:虚拟机的一个虚拟磁盘文件,Vmware将其分割为多个文件。

vmss文件:执行挂起操作后产生的快照文件。

nvram文件:虚拟机非易变RAM。虚拟机的BIOS信息存在此文件。 

图片

下面内容为本文重点,如果vmx文件丢失,虚拟机启动不起来,怎么办?

Step1:找到虚拟机路径下的vmware.log日志文件,本文路径为:”H:\虚拟机\studio5000”,通过记事本或者写字板打开

Step2:打开vmware.log文件后找到DICT---Configuration这一行,从该行开始往下的内容全部是vmx文件配置信息,我们从这一行开始复制,一直复制到DICT---USER DEFAULTS这一行上面一行。 

图片

Step3:新建文本文档,将其重命名为studio5000.vmx (此处需要根据虚拟机名称进行命名)。

Step4:将Step2中复制的内容,全部粘贴到新建的studio5000.vmx文件内并保存。

Step5:删除文件中日期到DICT部分内容:

比如:文件第一行:

2022-11-29T09:55:14.440+08:00| vmx| I125: DICT  displayName = "studio5000"

修改为:

displayName = "studio5000"

修改后的studio5000.vmx文件如下图片:

图片

其中注意如下内容:

uestOS = "windows9-64"

nvram = "studio5000.nvram"

firmware = "efi"

scsi0:0.fileName = "studio5000-000011.vmdk"

说明如果有快照:这里并非studio5000.vmdk,要根据vmware.log文件中一点内容不动的修改,不可以擅作主张。

checkpoint.vmState = "studio5000-3e3b0f43.vmss"

checkpoint.vmState.readOnly = "FALSE"

snapshot.action = "autoCommit"

vm.genid = "-3322382931506441315"

vm.genidX = "-6432544295494043537"

以上五句可以恢复到虚拟机挂起前的状态,同样不可以根据自己理解修改,需按照vmware.log文件复制,不可以遗漏任何一个字符,包括“-” 号。

截止这里我们的主要工作就做完了,最后一步:

Step6:将修改好的studio5000.vmx文件复制到虚拟机路径下:”H:\虚拟机\studio5000”

在Vmware Workstation中双击studio5000,我们发现前面的红色x没有了,而且直接进入了挂起状态如下:

图片

文末彩蛋

本文中在修改studio5000.vmx文件过程中由于复制过来时行数比较多,一行一行的删除日期到DICT部分内容较多,本人写了一小段py脚本来快速执行;本文中的vmware.log和studio5000.vmx文件也有分享哦!

 

作 者 简 介

曹俊义

工业物联网资深构建专家

工厂智能化改造践行专家

资深工业网络通讯专家

工业自动化控制系统专家

ProSoft产品顶级技术专家

图片

工业通讯领域沉浸十数年,深喑各种工业通讯协议和工业网络架构以及国内外多种主流PLC应用和操作、熟知罗克韦尔、施耐德、西门子、GE等知名品牌的冗余系统,对工业无线通讯、工业物联网、工业IT与OT的融合,有着前瞻性的独到见解和务实的实践经验。

现任伟联科技董事长。努力为中国工业信息化、数字化、智能化的深入发展做出贡献。

图片