internal error是个很蛋疼的问题,这里总结一下两年来使用 VMware Fusion 遇到的 internal error 和解决方法,日后方便他人 Google 百度什么的,也期望有经验的朋友讲一讲自己的看法。
TL;DR: 删除所有.vmem 文件。
使用 VMF 的时候,如果虚拟机没有关机,而且正在运行程序,你把笔记本盖子合上了,或者将虚拟机 suspend (挂起),那么你下次开启虚拟机的时候,常常会遇到“ internal error ”的错误。其结果就是你开不了机了。
如果你不去修改文件系统,在 GUI 层面的解决方法是 restore 你之前保存过的系统快照。系统快照有两种:关机状态的快照和挂起状态的快照。就我的经验来说,挂起快照是无法重载的(重载进度条跑到还剩一点的时候提示 internal error ),需要加载关机状态的快照。这种方法的缺点显然是整个系统将恢复到快照的时间点,如果时间太久远了,许多有用的更改会丢失。
最近在虚拟机上跑仿真,然后那个虚拟机的 Windows 死机了。我直接强退了 VMF ,重新开虚拟机的时候遇到了 internal error 。这次遇到了更严重的问题:所有快照都无法重载,即使是关机状态的快照也会重载失败,提示 internal error 。
这一段只是心理吐槽:好了,我进入了焦头烂额的状态。虚拟机里的东西具有学术重要性,重装系统的话,里面的资料和仿真系统都没有了。 Google 了一下,各类帖子很杂,讨论中各种套路都有。纵使楼主 GRE 考出来了,看了一堆带闲扯的帖子还是恶心地想吐。在申请季碰到个这事简直要哭了。
有不少人指出,先找到虚拟机系统所在的文件,比如我的是 Windows 7 x64 ,然后 Show Package Contents 进去,删除所有.lck 后缀的文件夹(是的是文件夹),这些文件夹含有虚拟磁盘分区和快照等等的日志文件。我不清楚为什么好多人推荐这个方法,我试了一下并没有卵用。
也有人尝试修复.vmdk 虚拟磁盘分区,我没有看到成功的记录。
最终找到了解决办法:仍然进到虚拟机系统所在的文件里,然后删除一切.vmem 后缀的文件。接着在任何一种状态下重启虚拟机,软件会提示说找不到快照云云,要 discard 当前状态。点击确定,虚拟机系统正常重启,高兴哭了。
重启后,系统的状态是你最近保存设置的状态,除了正在运行的程序结果没有保存,一切都是最新的状态。也就是说,.vmem 文件保存的不是虚拟机系统,而是完整的程序运行状态。我的感受是, VMware Fusion 的快照功能并没有必要恢复整个运行状态,以这种一不小心就会 internal error 的尿性,还不如只做已保存设置的快照。
根据我的经验,.vmem 文件除了每个快照有一个之外,你无论是以 OS X 睡眠还是以关机/挂起等方式退出虚拟机的时候, VMF 都会有一个记录你最近使用状态的.vmem 文件。该类文件保存的时候很容易出问题, VMF 并没有保证保存.vmem 文件时虚拟机不占用内存的机制。这大概是造成花式 internal errors 的根本原因。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.