CentOS 下 VirtualBox 无法启动的排查与修复
一、先快速定位问题
- 查看内核与驱动日志,确认是否缺少内核模块或签名失败:
- 执行:dmesg | tail -n 50
- 执行:journalctl -xe | grep -i vbox
- 查看 VirtualBox 自身日志(虚拟机目录下的 Logs/ 文件夹,打开 VBox.log),优先搜索 Error / Failed / rc= 等关键词,可快速定位是驱动、网络、还是状态恢复导致的问题。
二、常见原因与对应修复
-
内核驱动未加载或编译失败(经典报错含:Kernel driver not installed (rc=-1908) 或提示运行 /sbin/vboxconfig)
- 安装构建依赖并重建模块:
- sudo yum install -y kernel-devel kernel-headers gcc dkms
- 重建模块:sudo /usr/lib/virtualbox/setup 或 sudo /sbin/vboxconfig
- 若仍失败,检查是否安装了与当前运行内核匹配的 kernel-devel/headers(版本号需与 uname -r 一致),必要时重启后再执行重建。
-
启用 EFI Secure Boot 导致内核模块未签名(报错会明确提示需签名 vboxdrv、vboxnetflt、vboxnetadp、vboxpci)
- 方案 A(简单):在 BIOS/UEFI 中临时关闭 Secure Boot。
- 方案 B(推荐保留 Secure Boot):使用 MOK 对模块签名
- 安装工具:sudo yum install -y mokutil
- 生成密钥并导入 MOK:
- mkdir -p /root/signed-modules && cd /root/signed-modules
- openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj “/CN=VirtualBox/”
- sudo mokutil --import MOK.der(重启后按蓝屏提示 Enroll MOK 并输入密码)
- 签名并加载模块:
- 内核更新后需对新模块再次签名并加载。
-
桥接网卡不存在(报错示例:Nonexistent host networking interface)
- 现象多为从其他主机迁移或网卡更换后,虚拟机的桥接仍指向旧接口。
- 处理步骤:
- 在虚拟机设置 → 网络中,将 桥接 改为当前主机存在的网卡(如 enp3s0/wlp2s0),或临时改用 NAT 验证。
- 也可直接编辑虚拟机的 .vbox 配置文件,将
改为
。
-
从挂起状态恢复失败(报错示例:VERR_SSM_LOAD_CPUID_MISMATCH 或 E_FAIL (0x80004005))
- 在 VirtualBox 管理器选中该虚机,点击上方黄色的 Discard(丢弃状态)按钮,再启动;必要时先备份当前状态或从快照启动。
三、验证与后续
- 确认模块已加载:lsmod | grep vbox,应看到 vboxdrv 等模块。
- 若仍异常,保留 VBox.log 与 dmesg 末尾的关键报错,便于进一步定位(如 CPU 特性不匹配、第三方软件干扰等)。