VirtualBox Linux内核驱动异常重启后复发,Fedora用户求助
VirtualBox驱动重启后失效的解决办法(Fedora系统)
问题根源是Fedora默认开启Secure Boot,且内核更新频繁,之前的CentOS 8签名步骤未做永久密钥导入+内核更新自动签名,导致重启或内核更新后模块签名失效。以下是针对性解决步骤:
1. 确认Secure Boot状态
先检查系统是否开启Secure Boot:
mokutil --sb-state
如果输出为SecureBoot enabled,必须完成后续签名配置。
2. 创建并永久导入签名密钥
生成有效期100年的密钥对(存放在/root目录下):
openssl req -new -x509 -newkey rsa:2048 -keyout /root/MOK.priv -outform DER -out /root/MOK.der -nodes -days 36500 -subj "/CN=VirtualBox Modules/"导入密钥到系统的MOK(Machine Owner Key)数据库:
mokutil --import /root/MOK.der执行后设置一个临时密码(重启时需要用到),然后立即重启电脑。
重启后会进入MOK管理界面,按以下操作:
- 选择
Enroll MOK→Continue - 输入刚才设置的临时密码 →
OK - 确认密钥导入,选择
Reboot完成。
- 选择
3. 配置内核更新时自动签名VirtualBox模块
- 创建签名脚本:
sudo mkdir -p /etc/vbox sudo tee /etc/vbox/sign-vbox-modules.sh <<EOF #!/bin/bash MODULE_DIR="\$(dirname \$(modinfo -n vboxdrv))" PRIV_KEY="/root/MOK.priv" PUB_KEY="/root/MOK.der" if [ -f "\$PRIV_KEY" ] && [ -f "\$PUB_KEY" ]; then for modfile in "\$MODULE_DIR"/*.ko; do echo "Signing module: \$modfile" /usr/src/kernels/\$(uname -r)/scripts/sign-file sha256 "\$PRIV_KEY" "\$PUB_KEY" "\$modfile" done else echo "Key files not found!" exit 1 fi EOF - 给脚本添加执行权限:
sudo chmod +x /etc/vbox/sign-vbox-modules.sh - 创建systemd服务,让内核更新后自动执行签名:
sudo tee /etc/systemd/system/vbox-module-sign.service <<EOF [Unit] Description=Auto-sign VirtualBox kernel modules after kernel update After=kernel-install.target [Service] Type=oneshot ExecStart=/etc/vbox/sign-vbox-modules.sh [Install] WantedBy=multi-user.target EOF - 启用服务:
sudo systemctl enable vbox-module-sign.service
4. 手动修复当前系统的驱动问题
- 卸载现有VirtualBox模块:
sudo modprobe -r vboxpci vboxnetadp vboxnetflt vboxdrv - 执行签名脚本:
sudo /etc/vbox/sign-vbox-modules.sh - 重新加载模块:
sudo modprobe vboxdrv vboxnetflt vboxnetadp vboxpci - 重启VirtualBox服务:
sudo systemctl restart vboxdrv
完成以上步骤后,无论重启还是内核更新,VirtualBox模块都会自动完成签名,不会再出现驱动加载失败的问题。
内容的提问来源于stack exchange,提问作者asdafdasdsfasdf
相关产品推荐
相关产品推荐

