VirtualBox Error 5: Ubuntu 18.04虚拟机启动故障排查
“Error relaunching VirtualBox VM process: 5”这个报错用Ubuntu 18.04虚拟机的人应该都不陌生。明明昨天虚拟机还跑得好好的今天一开机VirtualBox 弹个启动进度条转两下就突然退出后台日志里躺着一行“Error relaunching VirtualBox VM process: 5Command 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.exeVirtualBox 的核心服务进程负责管理虚拟机配置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 版本都装别只装 x64VirtualBox 的某些组件仍是 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权限或进程残留管理员运行、清理 VBoxSVCError relaunching VirtualBox VM process: 5 且 VBoxHeadless 启动失败驱动或 Hyper-V 冲突检查 VBoxDrv、关闭 Hyper-VThe 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 failedHyper-V/VBS 抢占虚拟化关闭内核隔离与 Hyper-VVT-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 进程卡死。所以遇到这个错先深呼吸别慌按上面的链路一步步来大概率不动系统、不丢数据就能把虚拟机救回来。