今天开机日常启动VMware发现自己的虚拟机不显示了,一直处于黑屏状态,以为是死机了,但是重启与回滚快照也没用,其他几个虚拟机也一样。找了一下网上原来是VMware Workstation 14 Pro的通病。试了好几个方法后终于解决,这里记录以备用。
由于具体原因不明,以下方法需要按顺序操作一下直到问题解决。
主要原因是14版本之后注册了两个LSP协议(vSockets DGRAM、vSockets STREAM)导致异常。
第一步
保存快照并关闭虚拟机电源,右键虚拟机-管理-更改硬件兼容性,将其改为workstation 12保存即可。打开虚拟机验证黑屏是否解决,未解决请执行第二步。
第二步
关闭并退出VMware,打开cmd(开始-运行-输出cmd),输入:
netsh winsock reset
后记
重启计算机
问题解决。
虚拟机和主机之间的通信,基本上是以 socket 的方式进行通信的(这里的 socket 泛指一切 socket,包括本地的、网络的等等)某个程序通过 LSP 给系统的 TCP/IP stack 注入了自己的 DLL,如果程序退出时,没有把这个 DLL 收回来,或者回收失败、没有彻底回收等,那么这个 DLL 残留的东西影响了整个 TCP/IP stack,而且是永久性的。每个 socket 收发的数据包是要经过 TCP/IP stack 的,这个 DLL 可能会对这些 socket 的数据包做了些什么操作(比如修改数据、直接丢弃等等),然后所以你的虚拟机就黑屏了……netsh winsock reset这条命令会重置,所以那些被注入的 DLL 就被清理掉了,所以一切都是最初的模样了……
作者:邱星翔
链接:https://www.zhihu.com/question/66422773/answer/257812909