“Error relaunching VirtualBox VM process: 5”这个报错,用Ubuntu 18.04虚拟机的人应该都不陌生。明明昨天虚拟机还跑得好好的,今天一开机,VirtualBox 弹个启动进度条,转两下就突然退出,后台日志里躺着一行“Error relaunching VirtualBox VM process: 5,Command line: ‘C:\Program Files\Oracle\VirtualBox...’”,然后虚拟机就再也起不来了。这个报错在 Windows 宿主机上跑 Linux 虚拟机时出现频率很高,尤其是 Ubuntu 18.04 这种还在被大量使用的老版本系统。这篇文章围绕这个报错,把底层原理、常见触发原因和可落地的排查步骤都梳理一遍,适合正在被虚拟机启动问题卡住、又不想直接重装系统的朋友参考。
我先把话放前面:这个问题 90% 不是 Ubuntu 18.04 系统本身坏了,而是 VirtualBox 在 Windows 宿主机的环境出了问题。换句话说,修的是宿主机,不是虚拟机。如果你手头也正好碰到这个报错,别急着删虚拟机重装,先按下面的链路一步步查。
1. 先把报错读懂:Error 5 到底在说什么
1.1 报错里的每个字段分别代表什么
“Error relaunching VirtualBox VM process: 5”这句话,信息量其实不小。它说的是 VirtualBox 在尝试重新启动 VM 进程时失败了,失败的错误码是 5。在 Windows 的系统错误码表里,错误码 5 对应的含义是“Access Denied”,也就是访问被拒绝。
后面跟的那一长串 Command line,则是 VirtualBox 真正要拉起进程时使用的完整命令行,通常会指向 VBoxHeadless.exe 或 VirtualBoxVM.exe,并带上虚拟机的 UUID、启动模式等参数。如果你把整行命令复制下来,到 CMD 里手动执行,大概率也会弹出“拒绝访问”之类的提示。这就说明问题出在进程创建这个层级,还没轮到虚拟机内部的 Ubuntu 系统加载。
理解这一点很关键,因为它直接帮我们把排查范围圈定了:不用去折腾 Ubuntu 里头的配置,也不用怀疑 .vbox 文件是不是写坏了,重点要看 Windows 侧有没有阻止 VirtualBox 创建新进程的东西。
1.2 为什么偏偏是 Ubuntu 18.04 虚拟机容易碰到
从我这边的经验看,Ubuntu 18.04 虚拟机遇到这个报错的概率,确实比其他系统高一些。倒不是 Ubuntu 18.04 本身有什么特殊毛病,而是它的使用场景决定的。
Ubuntu 18.04 是 2018 年发布的老系统,现在仍然有大量开发环境、ROS 机器人项目、嵌入式交叉编译工具链跑在它上面。很多人装完这个虚拟机之后,VirtualBox 版本一放就是好几年不升级,或者干脆从 6.x 一路升级到 7.x,中间跨了好几个大版本。虚拟机配置文件、扩展包和主程序之间出现兼容性问题,是很自然的事。
另外,还有一类情况是 Windows 宿主机系统更新后,Hyper-V、内核隔离、基于虚拟化的安全(VBS)这些功能被自动打开,直接和 VirtualBox 抢 CPU 虚拟化指令。VirtualBox 的 VBoxDrv 驱动加载失败,就很容易报出这个“relaunch”错误。所以后面排查时,我会把 Hyper-V 冲突单独拎出来讲,这是最容易踩坑的地方。
2. 先用最简单的方法排除:权限、残留进程和驱动
2.1 以管理员身份运行 VirtualBox 试试
既然错误码 5 表示“访问被拒绝”,那第一件该做的事,就是用管理员权限重新运行 VirtualBox。
操作很简单:右键点击 VirtualBox 的桌面快捷方式或安装目录里的 VirtualBox.exe,选择“以管理员身份运行”,然后再启动 Ubuntu 18.04 虚拟机。如果这样能正常起来,那就说明是权限问题——VirtualBox 在创建 VM 进程时需要写入某些系统级资源,而当前用户权限不够。
不过说实话,管理员身份运行只能解决一部分情况。如果实测有效,建议顺手调整一下 VirtualBox 的兼容性设置:右键 VirtualBox.exe → 属性 → 兼容性 → 勾选“以管理员身份运行此程序”,这样以后双击启动就不用每次手动右键,能省不少事。
如果管理员权限下依旧报同样的错,那就往下面继续查。
2.2 干掉残留的 VBoxSVC 与 VBoxHeadless 进程
这是我遇到次数最多的原因:VirtualBox 主程序退出了,但后台的 VBoxSVC.exe 或 VBoxHeadless.exe 进程没有跟着退出,残留在系统里。下次启动虚拟机时,新的进程创建请求和残留进程发生冲突,VirtualBox 就会报 Error 5。
处理方式也很直接,打开任务管理器,切到“详细信息”标签页,按名称排序,把所有 VirtualBox 相关的进程全部结束掉,重点找这几种:
- VBoxSVC.exe(VirtualBox 的核心服务进程,负责管理虚拟机配置)
- VBoxHeadless.exe(无界面模式启动的虚拟机进程)
- VirtualBoxVM.exe(新版本里实际运行虚拟机的进程)
- VBoxNetDHCP.exe、VBoxNetNAT.exe(网络相关的辅助进程,偶尔也会残留)
全部结束之后,最好再打开任务管理器确认一遍进程列表,然后重新打开 VirtualBox 启动虚拟机。
如果任务管理器里找不到 VBoxSVC 进程,但它又确实在运行,可以用命令行强制结束。在 CMD 或 PowerShell 里执行:
taskkill /f /im VBoxSVC.exe taskkill /f /im VBoxHeadless.exe taskkill /f /im VirtualBoxVM.exe执行完再确认一下进程是否还在:
tasklist | findstr VBox没有输出就表示清理干净了。这个办法在我处理过的案例中,成功率大概能占到三成左右,属于性价比极高的一步。
2.3 VBoxDrv 驱动是否正常加载
VirtualBox 在 Windows 上需要加载一个内核驱动 VBoxDrv,如果这个驱动没被正确加载,虚拟机一样会启动失败,而且报错信息里经常带着 Error 5。
检查驱动状态,可以在 CMD 里执行:
sc query VBoxDrv如果返回结果是 STATE: 4 RUNNING 或 STATE: 1 STOPPED,都算正常。但如果提示服务不存在,或者状态异常,就需要重新安装驱动。
修复驱动的常用做法是重置 VirtualBox 的网络与驱动组件:安装目录下找到 VirtualBox 自带的卸载修复程序,或者直接重新运行安装包,选择 Repair(修复)。等它修复完,重启宿主机,再启动虚拟机。
提示:VBoxDrv 驱动和 Windows 的驱动签名机制相关性很强。如果你平时关掉了 Windows 强制驱动签名,系统更新后建议重新开启,否则 VBoxDrv 可能因为签名验证不通过而加载失败。
3. Hyper-V 与内核隔离:最容易忽略的系统级冲突
3.1 为什么 Hyper-V 会和 VirtualBox 打架
这个冲突在 Windows 10/11 上非常常见,而且极具迷惑性,因为报错不一定每次都指向它,可能只是偶尔启动失败,重启几次又好了,但实际上两者一直在底层互相抢资源。
Windows 的 Hyper-V 角色开启后,系统会把 CPU 的 VT-x/AMD-V 虚拟化指令接管过去,Windows 自身的 Hypervisor 层会运行在所有虚拟机监控器的最底层。而 VirtualBox 是 Type 2 虚拟机监控器,它需要直接访问 VT-x 指令来创建虚拟机。一旦 Hyper-V 抢占在先,VirtualBox 拿不到完整的硬件虚拟化资源,启动时就会报错,Error 5 就是常见的表现之一。
判断当前系统是否开启了 Hyper-V,最简单的办法是在 CMD 里执行:
bcdedit /enum | findstr hypervisorlaunchtype如果返回hypervisorlaunchtype Auto,说明 Hyper-V 自启动是开着的;如果是Off,则说明没开。还有一种情况是返回内容为空,这通常意味着系统状态比较复杂,需要继续往下查。
3.2 如何安全关闭 Hyper-V 和相关虚拟化功能
如果你平时不用 Windows 自带的 Hyper-V、WSL2、Windows Sandbox 这些功能,那直接把 Hyper-V 关掉是最省事的方案。
在管理员权限的 CMD 里执行:
bcdedit /set hypervisorlaunchtype off然后重启系统。重启后再次用bcdedit /enum | findstr hypervisorlaunchtype确认状态变成Off,再打开 VirtualBox 测试。
需要注意的是,这个方法只管 Hyper-V 自启动。如果系统还开着“内核隔离”和“内存完整性”功能,也需要一起处理。在 Windows 安全中心 → 设备安全性 → 内核隔离 → 内存完整性,把它关掉,重启后再试。内存完整性本身依赖 Hyper-V 的虚拟化安全特性,它和 VirtualBox 的冲突,很多人排查了半天也没发现。
另外,如果你在用 WSL2,关掉 hypervisorlaunchtype 之后 WSL2 会无法运行,需要留意一下,这是取舍问题。
3.3 通过“启用或关闭 Windows 功能”彻底关闭 Hyper-V
除了 bcdedit,还有一种更彻底的关闭方式:控制面板 → 程序和功能 → 启用或关闭 Windows 功能,把“Hyper-V”这一项前面的对勾去掉,同时把“虚拟机平台”、“适用于 Linux 的 Windows 子系统”、“Windows 沙盒”这些和 Hyper-V 强相关的组件也一并关掉。
改完后重启电脑。这种方式会把 Hyper-V 相关的服务、驱动、WMI 组件整个移除,给 VirtualBox 腾出最干净的环境。代价是如果后面要再开 WSL2,又得重新打开这些功能并重启,来回折腾一次大概要浪费十分钟。
> 注意:以上 bcdedit 和 Windows 功能开关都以管理员身份操作,改完必须重启才能生效。如果你不确定当前环境有没有在跑关键任务,建议把 Hyper-V 的开关放到最后再动,先试别的方案。
4. 配置文件、快照与磁盘空间:藏在深处的隐蔽坑
4.1 清理 VirtualBox 的全局配置文件
有时 VirtualBox 主程序自身的状态已经坏了,全局配置文件 VirtualBox.xml 记录着所有虚拟机的注册信息和全局设置,如果这个文件里出现异常条目,比如某台虚拟机的路径失效、UUID 冲突,主程序在启动任何虚拟机时都可能报错。
VirtualBox.xml 的位置在用户目录下,Windows 上通常在:
C:\Users\<你的用户名>\.VirtualBox\VirtualBox.xml在尝试修改前,先备份一份,改坏了还能还原。备份之后,有两种做法:
- 稳妥做法:用文本编辑器打开 VirtualBox.xml,检查里面是否有指向不存在路径的条目,把异常的部分删除。
- 粗暴做法:直接把这个文件重命名,比如改成 VirtualBox.xml.bak,再启动 VirtualBox。
推荐先试粗暴做法,因为 VirtualBox 在检测不到配置时会自动重建一个全新配置。重建之后,虚拟机列表会清空,但虚拟机磁盘文件(.vdi/.vmdk)都还在,利用菜单里的“添加”功能重新注册一下 .vbox 文件即可,熟悉的虚拟机会全部回来。
4.2 检查 .vbox 文件与快照链是否损坏
如果全局配置清理完还是老样子,那问题可能出在虚拟机自己的 .vbox 配置文件上。这个 XML 文件记录了虚拟机的硬件配置、磁盘控制器、网络适配器、快照链等信息。正常情况它不该被手动修改,但非正常关机、磁盘损坏或跨版本升级偶尔会让它出现缺失。
快速检查 .vbox 文件是否正常,可以看文件大小和内容完整性。正常情况下 .vbox 文件是结构完整、标签闭合的 XML。如果文件已经变成 0 字节,或者内容残缺,那就要考虑用备份恢复,实在没有备份就新建一台同配置虚拟机、挂载旧磁盘来救数据。
还有一类是快照链异常。Ubuntu 18.04 虚拟机的活跃快照节点如果损坏,会导致启动时无法组建造型。处理方式是在 VirtualBox 管理器里选中虚拟机,看“快照”标签页中是否存在状态异常的快照。如果快照模式显示“不可用”或“已损坏”,试试删除损坏快照(注意先导出重要数据);如果删除不了,可以尝试用 CLI 工具 VBoxManage 修复或删除快照节点。
4.3 磁盘空间与缓存盘符:容易被低估的环境条件
Windows 宿主机磁盘空间不足同样会导致虚拟机进程启动失败。VirtualBox 在启动虚拟机会创建内存映射文件和临时文件,如果页面文件所在分区空间不足,新进程很可能无法分配足够内存,表现为进程启动失败或者干脆被系统拒绝。
检查宿主机系统盘可用空间,建议至少保留 10GB 以上余量。如果是老机械硬盘,剩余空间不足 5GB 时,Windows 自身的虚拟内存文件都会受影响。这一点排查成本极低,看一眼“此电脑”就能确认,顺手做掉总没错。
另外,如果你的 VirtualBox 安装目录或虚拟机磁盘文件所在盘符是一个网络驱动器、BitLocker 加密盘或者权限受限的移动硬盘,也会被错误地当作“访问被拒绝”。把这些内容挪回本地 NTFS 分区,往往问题就消失了。
5. 杀毒软件、运行库与重装修复:最后的组合拳
5.1 排查杀毒软件与安全软件
杀毒软件拦截 VirtualBox 进程创建,是我印象里特别深的一类问题。尤其是一些国产安全软件,经常把 VirtualBox 的进程创建行为当成可疑操作,直接拦下来,于是 VirtualBox 尝试“relaunch”进程,结果被 Windows 拒绝,报出 Error 5。
如果你机器上装了第三方杀毒软件、安全卫士、或者公司统一的终端管控软件,可以先临时退出或者禁用它们,再启动虚拟机。如果问题消失,那就是安全软件误杀,把 VirtualBox 安装目录和虚拟机磁盘文件目录加入白名单即可。
有些时候,即便临时退出安全软件也不一定彻底,因为内核态驱动还会保留。这种情况下,Win + R 输入msconfig,在“服务”标签页里勾选“隐藏所有 Microsoft 服务”,然后把剩下的第三方服务全部禁用,重启后再试。如果这样能正常启动虚拟机,再逐个加回服务,定位是谁在搞鬼。
5.2 重新安装 VC++ 运行库
VirtualBox 主程序是 C++ 写的,依赖微软的 Visual C++ Redistributable 运行库。如果宿主机上的 VC++ 运行库损坏或缺失,VirtualBox 启动虚拟机时同样可能异常退出,报错五花八门,Error 5 也会出现。
修复方式很直接,去微软官网下载最新版的 Visual C++ Redistributable 合集包,把 x86 和 x64 都装一遍,重启后再试。这里建议 x86 和 x64 版本都装,别只装 x64,VirtualBox 的某些组件仍是 32 位的,缺少 x86 运行库一样会出问题。
安装运行库这个操作本身是无害的,即使不能解决问题,也不会给系统引入新毛病,所以排查顺序上可以放在偏后的位置,作为“顺手做掉”的一步。
5.3 修复安装或更换 VirtualBox 版本
如果上面所有方案都试过还不行,那就只能回到 VirtualBox 本身了。
先尝试修复安装:找到 VirtualBox 的安装程序,双击运行,选择 Repair(修复),等它修复完,重启宿主机,再测试。
如果修复无效,建议彻底卸载后重新安装。卸载时最好把残留目录也清理干净,包括安装目录和用户目录下的 .VirtualBox 文件夹。注意 .VirtualBox 文件夹里保存着 VirtualBox.xml 全局配置和各虚拟机注册信息,如果你要保留虚拟机的注册信息,先备份这个文件夹;只在意虚拟机磁盘数据的话,那么备份 .vdi/.vmdk 文件即可。
版本方面,我的建议是:如果你之前用的 VirtualBox 7.0.x 一直稳定,重装时尽量装回同一大版本的最新补丁版;如果你是从 6.x 升到 7.x 后开始报错的,那么退回 6.1.x 的最终版(比如 6.1.50)也是换回稳定环境的可行路径。Ubuntu 18.04 是老系统,在较新的 VirtualBox 7.x 上偶发兼容问题很正常,退回旧版往往比反复调试更省时间。
另外,检查一下你机器上安装的 VirtualBox Extension Pack 版本是否和主程序匹配。扩展包版本不匹配,可能导致 USB、RDP 等模块加载失败,间接触发启动异常。扩展包的卸载和重装,同样在 VirtualBox 全局设置 → 扩展里操作。
6. 问题排查顺序与经验速查表
6.1 我建议的排查顺序
Error 5 这个报错的原因比较杂,瞎试只会浪费时间。我处理这类问题时有一套固定顺序,基本上按这个顺序走一遍,大部分情况都能定位到根因:
第一步,先以管理员身份运行 VirtualBox,排查权限问题。
第二步,任务管理器清理所有 VBoxSVC、VBoxHeadless、VirtualBoxVM 进程,重启 VirtualBox。
第三步,检查宿主机磁盘空间,清理出至少 10GB 可用空间。
第四步,执行bcdedit /enum | findstr hypervisorlaunchtype,确认 Hyper-V 是否开启,必要时关闭。
第五步,检查并修复 VC++ 运行库。
第六步,临时禁用第三方安全软件,或用 msconfig 禁用第三方服务,测试是否误拦截。
第七步,备份 VirtualBox.xml 后重置全局配置,重新注册虚拟机。
第八步,修复安装或更换 VirtualBox 版本。
这套顺序的核心逻辑是:从成本最低、影响最小的操作开始,逐步扩大到系统级修改和软件重装。不要一上来就关 Hyper-V,更不要一上来就卸载重装 VirtualBox,那样一旦无效,你会很难判断到底是哪一步起了作用。
6.2 常见报错变体速查表
我在排查过程中,发现同样的问题根源,在不同机器上报错文字会有细微差别。下面这个表是我整理的几个常见变体和对应思路,方便你对照排查:
| 报错信息特征 | 典型触发点 | 优先排查方向 |
|---|---|---|
| Error relaunching VirtualBox VM process: 5 | 权限或进程残留 | 管理员运行、清理 VBoxSVC |
| Error relaunching VirtualBox VM process: 5 且 VBoxHeadless 启动失败 | 驱动或 Hyper-V 冲突 | 检查 VBoxDrv、关闭 Hyper-V |
| The virtual machine ‘Ubuntu18.04’ has terminated unexpectedly during startup with exit code 1 | 各种原因都可能导致 | 先看日志,再按本文顺序排查 |
| Failed to open a session for the virtual machine | 配置或版本兼容问题 | 检查 .vbox 文件、扩展包版本 |
| Call to WHvSetupPartition failed | Hyper-V/VBS 抢占虚拟化 | 关闭内核隔离与 Hyper-V |
| VT-x is not available | 虚拟化指令被占用 | 检查固件虚拟化开关、Hyper-V |
顺便说一个看日志的方法:在 VirtualBox 管理器里选中虚拟机,菜单栏找到“日志”,里面会显示最近几次启动的完整日志。报错现场就在日志里,搜索Error、Relaunching、Failed这几个关键词,能看到比弹窗更详细的上下文,特别适合在微信群里求助时截图用。
6.3 防止下次再踩坑的几条实操建议
问题修好之后,我还会顺手做几件事,降低以后再犯的几率:
一是定期整理 VirtualBox 版本。需要升级时,先备份所有虚拟机的 .vbox 配置和磁盘文件,再动手升级。别让 VirtualBox 主程序停留在某个测试版或过老版本上,一旦跨版本升级,优先查看官方 changelog 里关于宿主机兼容的说明。
二是把 Windows 更新造成的隐性问题纳入考虑。每次 Windows 大版本更新后,如果虚拟机突然启动失败,第一反应应该是 Hyper-V 或内核隔离又被打开了,而不是急着重装虚拟机系统。
三是给虚拟机做定期快照并清理过期快照。很多人只顾着创建快照,从不清理,快照链越来越长,一旦某个环节出问题,虚拟机启动就会变得异常脆弱。建议工作流相对固定时,删除中间无用快照,只保留稳定的基线和最近状态,这样就算碰到 Error 5 需要重置配置,恢复成本也低很多。
四是创建一个干净的“测试虚拟机”用于排障。遇到启动报错时,先拿这台空白虚拟机试,如果它也一样报错,那基本断定是宿主机环境问题,而不是你手里那台重要虚拟机坏了。这能帮你少走很多弯路,也能避免在重要虚拟机上反复试错,导致配置越改越乱。
处理过几次这个报错之后,我最大的感受是:VirtualBox 报错信息里的错误码,大多数时候已经把方向告诉你了,Error 5 就是“拒绝访问”,关键在于找到是什么在拒绝。我见过有人因为这台 Ubuntu 18.04 虚拟机起不来,折腾了一整个晚上,差点把系统重装了,最后发现问题只是 VBoxSVC 进程卡死。所以遇到这个错,先深呼吸,别慌,按上面的链路一步步来,大概率不动系统、不丢数据,就能把虚拟机救回来。