最近在 Ubuntu 上用 VMware 开了一个 Windows 10 虚拟机,但是在启动的时候却出现了“Cannot open /dev/vmmon: No such file or directory Please make sure that the kernel module `vmmon’ is loaded”的错误,导致虚拟机启动失败。在 VMWare 的 Knowledge Base 上找到了解决方法,这里记录一下。
原因
在启用了安全引导 UEFI 模式的 Linux 主机上,不允许加载任何未签名的驱动程序。因此,无法加载 VMware 驱动程序(如 vmmon 和 vmnet ),从而阻止虚拟机启动。
解决方法一
知道了原因,最直接的解决方法就是禁用安全引导模式,这个就要去 BIOS 里设置了,具体怎么禁用根据每个电脑型号去百度吧。如果要求必须使用安全模式引导,那就看方法二。
解决方法二
该方法的思想是:使用 openssl 生成密钥对来签署 vmmon 和 vmnet 模块,通过生成的密钥对来对这两个模块签名,最后再将模块导入到系统中。危险预警:此操作涉及到内核,请做好内核炸了的心理准备。(博主就差点翻车了 )
下面是具体的操作步骤(已经在 Ubuntu 16.04 18.04 上测试通过,一般适用于所有 Linux 发行版,但特定的 Linux 发行版可能在命令上有所不同。)
1.生成密钥对
这一步使用 openssl 生成密钥对来签署 vmmon 和 vmnet 模块:
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=VMware/"
2.签名
通过运行以下命令使用生成的密钥对模块进行签名:
sudo /usr/src/linux-headers-`uname -r`/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vmmon)
sudo /usr/src/linux-headers-`uname -r`/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vmnet)
3.导入
通过运行下面的命令将密钥导入到系统的 MOK 列表:
mokutil --import MOK.der
向系统 MOK 列表注册是需要密码的,因此在这一步中你需要指定一个密码,在运行上面的命令后会让你输入一个密码,该密码会在后续的导入过程中让你再次输入。之后就是重启电脑,由 UEFI 引导来进行接下来的步骤。
4.重启
这一步由于官方没有给出示例,我在折腾的时候也差点翻车,这里我尽量说的详细点。
这一步正常情况下应该是电脑重启时就自动进入 UEFI 控制台模式(如果是多系统引导,要选择正确的启动引导后才能进入 UEFI 控制台模式),它会引导着你进行 MOK 的注册(enroll)。博主为了做演示,又进行了一次操作,下面是截图:





重启之后就可以启动虚拟机了。结束
参考
“Cannot open /dev/vmmon: No such file or directory” error when powering on a VM (2146460)
本作品由 sunriseydy 采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
文章内容如未说明均为原创,欢迎转载,但请注明原作者(sunriseydy)和原文链接(https://blog.sunriseydy.top/technology/linux/vmware_cannot_open_vmmon/)
部分来自互联网的文章,如有侵权,请联系我,24小时内删除,谢谢
感谢您的支持,SunriseYDY 会继续努力的!



打开支付宝扫一扫,即可进行扫码打赏哦
日出一点一 | 在探索的路上永不止步