VirtualBox拒绝启动虚拟机:`设备助手结构版本已更改`。

VirtualBox突然开始拒绝启动现有的虚拟机,并在日志中出现以下内容:
00:00:03.946244 HDA: Reset
00:00:03.946359 AssertLogRel /mnt/tinderbox/extpacks-5.0/src/VBox/Devices/USB/DevEHCI.cpp(4955) int ehciR3Construct(PDMDEVINS*, int, CFGMNODE*): PDM_VERSION_ARE_COMPATIBLE((pDevIns)->pHlpR3->u32Version, PDM_DEVHLPR3_VERSION)
00:00:03.946378 DevHlp=0xffe700f1  mine=0xffe700e1
00:00:03.946407 PDM: Failed to construct 'usb-ehci'/0! VERR_PDM_DEVHLPR3_VERSION_MISMATCH (-2871) - The device helper structure version has changed.
00:00:03.946421 If you have upgraded VirtualBox recently, please make sure you have terminated all VMs and upgraded any extension packs. If this error persists, try re-installing VirtualBox.
00:00:04.037170 NAT: zone(nm:mbuf_cluster, used:0)
00:00:04.037303 NAT: zone(nm:mbuf_packet, used:0)
00:00:04.037317 NAT: zone(nm:mbuf, used:0)
00:00:04.037328 NAT: zone(nm:mbuf_jumbo_pagesize, used:0)
00:00:04.037422 NAT: zone(nm:mbuf_jumbo_9k, used:0)
00:00:04.037488 NAT: zone(nm:mbuf_jumbo_16k, used:0)
00:00:04.037530 NAT: zone(nm:mbuf_ext_refcnt, used:0)
00:00:04.039388 VMSetError: /build/virtualbox-JETMa8/virtualbox-5.0.14-dfsg/src/VBox/VMM/VMMR3/VM.cpp(365) int VMR3Create(uint32_t, PCVMM2USERMETHODS, PFNVMATERROR, void*, PFNCFGMCONSTRUCTOR, void*, VM**, UVM**); rc=VERR_PDM_DEVHLPR3_VERSION_MISMATCH
00:00:04.039394 VMSetError: The device helper structure version has changed.
00:00:04.039394 If you have upgraded VirtualBox recently, please make sure you have terminated all VMs and upgraded any extension packs. If this error persists, try re-installing VirtualBox.
00:00:04.039582 ERROR [COM]: aRC=NS_ERROR_FAILURE (0x80004005) aIID={872da645-4a9b-1727-bee2-5585105b9eed} aComponent={ConsoleWrap} aText={The device helper structure version has changed.
00:00:04.039587 If you have upgraded VirtualBox recently, please make sure you have terminated all VMs and upgraded any extension packs. If this error persists, try re-installing VirtualBox. (VERR_PDM_DEVHLPR3_VERSION_MISMATCH)}, preserve=false aResultDetail=0
00:00:04.116659 Console: Machine state changed to 'PoweredOff'
00:00:04.338867 Power up failed (vrc=VERR_PDM_DEVHLPR3_VERSION_MISMATCH, rc=NS_ERROR_FAILURE (0X80004005))
00:00:04.349471 GUI: UIMachineViewNormal::resendSizeHint: Restoring guest size-hint for screen 0 to 2789x1563
00:00:04.349542 ERROR [COM]: aRC=E_ACCESSDENIED (0x80070005) aIID={7303a66d-433b-25a4-f9a8-fcadf87e0c2a} aComponent={DisplayWrap} aText={The console is not powered up}, preserve=false aResultDetail=0
如何解决这个问题?

奇怪的是,我在启动一台机器时遇到了这个问题,但其他机器却没有。升级扩展包仍然有效,但我忘记检查旧版本。也许Windows 10依赖于新版扩展包的某些功能,而Linux则不依赖? - trysis
3个回答

这是Ubuntu在VirtualBox运行时升级后的典型行为。 解决方案: - 停止VirtualBox - 在https://www.virtualbox.org/wiki/Downloads下载最新的扩展包(适用于所有平台) - 安装扩展包 - 重新启动Ubuntu 现在,之前可正常工作的任何虚拟机都应该可以正常运行。 实际上,日志中已经提到了这个提示:如果您最近升级了VirtualBox,请确保终止所有虚拟机并升级任何扩展包

2你可能不需要重新启动Ubuntu。在安装扩展后,启动你的虚拟机就可以继续了。 - KhoPhi
3如果您需要让它运行但没有网络,您可以从“文件->首选项->扩展”中删除扩展包,并将USB控制器设置为1.0,这样应该就可以启动(不使用扩展)。 - rrosa
@rrosa:有趣!你能把那个发表为一个新的回答吗?谢谢! - Nicolas Raoul

如果你需要让这个运行起来,而且没有网络的话,你可以移除扩展包。
FIle->Preferences->Extensions
将要启动的机器中的USB控制器设置为1.1。选择它,然后:
Machine->Settings->USB->Set it to 1.1 (or disable it)
那样你就可以启动了。你将无法使用扩展功能,但这可能会帮助你度过没有网络的时期。当你上网后,请参考Nicolas Raoul的回答

允许我在将虚拟机从Ubuntu复制到Windows主机后启动。两台主机都安装了最新的扩展包。 - user18099

这是我在从Ubuntu 15.10升级到Ubuntu 16.04后的操作步骤:
  • 卸载VirtualBox sudo apt-get remove virtualbox
  • 卸载VirtualBox DKMS sudo apt-get remove virtualbox-dkms
  • https://www.virtualbox.org/wiki/Linux_Downloads下载最新版本的VirtualBox
    (如果你使用64位系统,请选择AMD64版适用于Ubuntu 16.04。否则选择i386版)
  • 安装下载的软件包 sudo dpkg -i virtualbox-5.0_...

现在你可以运行VirtualBox(在启动器中找到或者运行virtualbox),所有虚拟机都将正常工作!