在Linux系统中运行VMware虚拟机时,用户可能遇到以下报错:
bashCould not open /dev/vmmon: No such file or directory.
Please make sure that the kernel module `vmmon' is loaded.
此错误会导致虚拟机无法启动,通常由内核模块未加载或权限配置异常引发。
基本的解决方法<我个人的解决方案(命令)>
bashsudo vmware-modconfig --console --install-all
内核模块缺失或未加载
VMware依赖 vmmon
和 vmnet
等内核模块与系统交互。若模块未编译、加载失败或与当前内核版本不兼容,将导致设备文件 /dev/vmmon
缺失。
依赖组件缺失
编译内核模块需要对应版本的 linux-headers
和开发工具(如 gcc
, make
)。若未安装,模块编译会失败。
权限问题
/dev/vmmon
默认需要 root
或 vmware
用户组权限,普通用户无权访问时触发此错误。
Secure Boot干扰
启用Secure Boot的系统可能阻止加载未签名的内核模块。
1. 重新编译VMware内核模块
执行以下命令强制重建模块:
bashsudo vmware-modconfig --console --install-all
作用:
• 检测当前内核版本并编译适配的 vmmon
、vmnet
等模块。
• 自动加载编译后的模块到内核。
依赖项检查:
若编译失败,需手动安装内核头文件和开发工具:
• Debian/Ubuntu
bashsudo apt install linux-headers-$(uname -r) build-essential
• Fedora/RHEL
bashsudo dnf install kernel-devel-$(uname -r) gcc make
2. 验证模块加载状态
bashlsmod | grep vm # 检查vmmon、vmnet是否加载
若未加载,手动加载模块:
bashsudo modprobe vmmon sudo modprobe vmnet
3. 调整设备文件权限
确认用户已加入 vmware
组:
bashsudo usermod -aG vmware $USER
重启后检查设备权限:
bashls -l /dev/vmmon # 应显示组为root或vmware
4. 处理Secure Boot(可选)
若系统启用Secure Boot,需临时禁用或为模块签名:
bashsudo mokutil --disable-validation # 禁用验证(需重启)
预防措施
内核升级后重建模块
bashsudo vmware-modconfig --console --install-all
定期更新系统依赖
• 确保 linux-headers
版本与内核一致。
• 保留开发工具链(gcc
, make
)。
通过 vmware-modconfig
强制重建内核模块,结合权限调整和Secure Boot处理,可系统性解决 /dev/vmmon
访问问题。建议在内核升级后主动执行模块重建操作,以避免兼容性问题。
关联阅读:
• VMware官方文档:在Linux主机上排除模块加载问题
声明:本文方法已在Ubuntu 22.04、Fedora 38及VMware Workstation 17.x环境下验证。其他系统或版本可能存在操作差异。
本文作者:GYC
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!