Linux更新内核导致虚拟机不可用

报错提示

Virtualox:

1
2
3
4
5
6
7
8
9
10
11
Kernel driver not installed (rc=-1908)

The VirtualBox Linux kernel driver is either not loaded or not set up correctly. Please try setting it up again by executing

'/sbin/vboxconfig'

as root.

If your system has EFI Secure Boot enabled you may also need to sign the kernel modules (vboxdrv, vboxnetflt, vboxnetadp, vboxpci) before you can load them. Please see your Linux system's documentation for more information.

where: suplibOsInit what: 3 VERR_VM_DRIVER_NOT_INSTALLED (-1908) - The support driver is not installed. On linux, open returned ENOENT.

VMware:

1
2
3
Unable to change virtual machine power state: Transport (VMDB) error -14: Pipe connection has been broken.
Could not open /dev/vmmon: No such file or directory.
Please make sure that the kernel module vmmon' is loaded

问题产生原因

系统更新后启用了新的内核版本 而你使用的 VMware、VirtualBox驱动模块属于第三方闭源模块,默认是未签名的内核模块。在启用 Secure Boot 的情况下内核只能加载被可信密钥(Trusted Certificate)签过名的模块 所以像 vmmon.ko、vboxdrv.ko 这种自编译或闭源模块,会被直接拒绝加载 系统会报错:Key was rejected by service

解决

查看内核版本

$ uname -r
6.8.0-59-generic

Virtualbox

$ mokutil --sb-state

  1. 根据系统提示输入一个 Secure Boot 密码
  2. 确认密码
  3. reboot 重启
  4. 选择”Enroll MOK”
  5. 选择”Continue”
  6. 输入设置的密码
  7. 选择”Yes”确认注册
  8. 选择 reboot 重启

VMware

  1. 创建密钥对(私钥 + 公钥)
1
2
3
$ mkdir ~/module-signing
$ cd ~/module-signing
$ openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Custom Kernel Module Signing/"
  这个命令会创建两个文件:  
  MOK.priv:私钥(签名用)  
  MOK.der:公钥(导入 Secure Boot 用)
  1. 向系统注册你的公钥(MOK)
1
$ sudo mokutil --import MOK.der
  它会提示你设置一个密码(重启后会用)  
  记住这个密码!
  1. 重启并注册 MOK(步骤参考上面Virtualbox)

  2. 手动签名内核模块

1
2
3
4
5
6
7
8
9
10
11
12
13
$ cd ~/module-signing

# 获取 sign-file 脚本路径
$ SIGN_SCRIPT="/usr/src/linux-headers-$(uname -r)/scripts/sign-file"

# 模块路径
$ sudo $SIGN_SCRIPT sha256 ./MOK.priv ./MOK.der /lib/modules/$(uname -r)/misc/vmmon.ko
$ sudo $SIGN_SCRIPT sha256 ./MOK.priv ./MOK.der /lib/modules/$(uname -r)/misc/vmnet.ko

# 更新模块依赖、加载模块
$ sudo depmod -a
$ sudo modprobe vmmon
$ sudo modprobe vmnet

Linux更新内核导致虚拟机不可用
https://zhiting.cc/2025/05/14/Linux更新内核导致虚拟机不可用/
作者
至庭
发布于
2025年5月14日
许可协议