相信做工控的很多工程师都在使用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没有了,而且直接进入了挂起状态如下: