在 Ubuntu 上升级 VirtualBox 内核的正确做法
一、先明确目标与原则
- 升级内核后,需要让 VirtualBox 的内核模块(vboxdrv/vboxnetflt/vboxpci) 针对新内核重新编译并加载;这通常通过 DKMS 自动完成。
- 不要手动编译 VirtualBox 内核模块;使用包管理器安装 virtualbox-dkms 并执行重建命令即可。
- 若你只是想“升级内核”,请使用发行版仓库或主线内核 PPA;若是“升级 VirtualBox 程序”,请使用官方仓库的 VirtualBox 包,二者不要混淆。
二、升级内核的标准流程
- 更新索引并安装最新通用内核与头文件(推荐):
- sudo apt update
- sudo apt install linux-image-generic linux-headers-generic
- sudo reboot
- 如需更新到“主线”最新内核(可选,适合需要新特性的场景):
- 前往 kernel.ubuntu.com/~kernel-ppa/mainline/ 下载对应架构的 linux-image-…_amd64.deb、linux-headers-…all.deb、linux-headers-…-generic…_amd64.deb
- 安装:sudo dpkg -i linux-*.deb
- 更新引导:sudo update-grub
- 重启后选择新内核启动
- 说明:安装新内核时通常会自动处理 DKMS 模块;若未生效,再按第三节手动重建 VirtualBox 模块。
三、在新内核上重建 VirtualBox 内核模块
- 安装或修复 DKMS 与头文件(确保与新内核版本一致):
- sudo apt install --reinstall virtualbox-dkms linux-headers-$(uname -r)
- 重建并加载 VirtualBox 内核模块:
- 推荐:sudo /sbin/vboxconfig(较新的封装入口)
- 或:sudo /etc/init.d/vboxdrv setup(旧入口,部分系统仍可用)
- 验证模块就绪:
- lsmod | grep vbox
- systemctl status vboxdrv.service
- 若重建失败,检查日志定位问题:
- less /var/log/vbox-install.log
- 常见原因是缺少当前内核头文件或编译环境,按提示安装对应 linux-headers-$(uname -r) 后重试。
四、常见报错与快速修复
- 报错示例:
- “Kernel driver not installed (rc=-1908)” 或 “/dev/vboxdrv 不存在”
- “modinfo vboxdrv” 找不到模块
- “vboxdrv: version mismatch” 版本不一致
- 快速修复步骤:
- 安装头文件与 DKMS:sudo apt install linux-headers-$(uname -r) virtualbox-dkms
- 重建模块:sudo /sbin/vboxconfig 或 sudo /etc/init.d/vboxdrv setup
- 若仍提示版本不一致,检查 VirtualBox 程序版本与内核模块版本是否匹配,必要时升级 VirtualBox 到与模块一致的版本后再重建
- 查看详细错误:cat /var/log/vbox-install.log
- 临时回退:在 GRUB 启动菜单选择旧内核启动,确认问题后再处理新内核模块重建
五、补充建议
- 优先使用发行版仓库或 HWE 内核,减少与 VirtualBox 的兼容性问题。
- 避免混用不同来源的 VirtualBox 包(如同时从 Ubuntu 仓库与 Oracle 官网安装)。
- 若你是在虚拟机里升级内核,确保宿主机虚拟化支持开启,并为虚拟机分配足够资源(编译内核非常耗时耗资源)。