作为一个虚拟机,提供了可以在Windows、Linux、MacOS等操作系统运行的版本。用来在宿主操作系统上安装其他操作系统。
Window上的安装很简单,这里主要介绍在Ubuntu上安装后,运行在Window上创建的虚拟机时,遇到的问题和解决办法。
安装
sudo apt update
sudo apt install virtualbox virtualbox-ext-pack
加载已有虚拟机
通过菜单【控制】-【注册】打开的对话框,可选择已有的虚拟机文件(*.vbox),然后启动此虚拟机,会遇到错误。

安装相应模块
# 重新安装VirtualBox和相关内核模块
sudo apt update
sudo apt install --reinstall virtualbox-dkms virtualbox
# 加载内核模块
sudo modprobe vboxdrv因为系统打开了EFI Security Boot(这个是一个为确保系统安全建立的签名链),上述模块会被拒绝。主要是需要对模块签名。可通过如下指令看系统是否打开了此开关。
$ mokutil --sb-state
SecureBoot enabled
# 最简单的办法是在启动时进入BIOS将此选项关闭,但是会降低安全性。建议通过下面的【为模块签名】解决。为模块签名
为 VirtualBox 模块签名
创建密钥
# 安装必要工具
sudo apt install dkms build-essential linux-headers-$(uname -r)
# 生成签名密钥(如果尚未生成)
sudo mkdir -p /var/lib/shim-signed/mok/
sudo openssl req -new -x509 -newkey rsa:2048 -keyout /var/lib/shim-signed/mok/MOK.priv -outform DER -out /var/lib/shim-signed/mok/MOK.der -nodes -days 36500 -subj "/CN=VirtualBox/"
# 注册密钥
sudo mokutil --import /var/lib/shim-signed/mok/MOK.der系统会提示设置密码(记住这个密码)
重启计算机
在启动时会进入蓝色 MOK 管理界面:
1. 选择 "Enroll MOK"
2. 选择 "Continue"
3. 选择 "Yes" 确认注册
4. 输入之前设置的密码
5. 选择 "Reboot" 重启
签名并加载模块
进入系统后,执行如下指令。
# 为 VirtualBox 模块签名
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-signed/mok/MOK.der $(modinfo -n vboxdrv)
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-signed/mok/MOK.der $(modinfo -n vboxnetadp)
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-signed/mok/MOK.der $(modinfo -n vboxnetflt)
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-signed/mok/MOK.der $(modinfo -n vboxpci)
# 重新加载模块
sudo modprobe vboxdrv
sudo modprobe vboxnetadp
sudo modprobe vboxnetflt
sudo modprobe vboxpci
# 重启 VirtualBox 服务
sudo systemctl restart vboxdrv.service
验证解决方案
# 检查模块是否加载
lsmod | grep vbox
# 检查 VirtualBox 服务状态
systemctl status vboxdrv.service