You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows Server 2016 Standard中Vagrant启动Oracle Linux实例报错求助

解决VirtualBox启动Oracle Linux实例时的VERR_NEM_NOT_AVAILABLEVERR_VMX_NO_VMX错误

看来你在Windows Server 2016虚拟机里用Vagrant+VirtualBox启动Oracle Linux实例时,踩了虚拟化资源冲突的典型坑。我帮你拆解下错误原因,再一步步给出解决办法:

错误原因解析

你看到的两个错误其实是关联的:

  • VERR_NEM_NOT_AVAILABLE:这是因为Windows Server 2016上的Hyper-V功能启用了,它会接管系统的虚拟化层,导致VirtualBox无法调用原生的虚拟化API(WinHvPlatform.dll是Hyper-V的组件,VirtualBox在Hyper-V环境下没法正常使用自己的驱动)
  • VERR_VMX_NO_VMX:要么是你的物理服务器(或嵌套虚拟机)的VT-x/AMD-V虚拟化扩展没在BIOS/UEFI里开启,要么就是这个扩展已经被Hyper-V独占,VirtualBox拿不到使用权

分步解决步骤

  • 第一步:禁用Hyper-V(核心解决动作)

    1. 打开控制面板程序程序和功能启用或关闭Windows功能
    2. 找到Hyper-V选项,取消勾选所有相关子项(包括Hyper-V管理工具和Hyper-V平台)
    3. 点击确定,重启服务器让设置生效。

    如果你不想彻底卸载Hyper-V,只是临时禁用让VirtualBox能用,可以打开管理员命令提示符,执行:

    bcdedit /set hypervisorlaunchtype off
    

    重启后就会关闭Hyper-V的启动项;之后要恢复的话,执行bcdedit /set hypervisorlaunchtype auto再重启即可。

  • 第二步:确认BIOS/UEFI中启用了虚拟化扩展

    1. 重启服务器,进入BIOS/UEFI界面(不同品牌服务器按键不同,一般是F2、Del、F10,看开机提示)
    2. 找到虚拟化相关选项(可能叫Virtualization TechnologyVT-xAMD-V这类名字)
    3. 把它设置为Enabled,保存设置后重启服务器。

    注意:如果你的Windows Server 2016本身运行在虚拟机里,还需要在宿主机的虚拟化软件(比如VMware、Hyper-V)里开启嵌套虚拟化功能,不然虚拟机内没法启用VT-x。

  • 第三步:验证VirtualBox的虚拟化状态
    重启后打开VirtualBox,点击顶部菜单栏的帮助关于VirtualBox,查看窗口底部的扩展区域,确认显示VT-x/AMD-V: Enabled,这就说明虚拟化功能已经正常可用了。

  • 第四步:重新启动Vagrant实例
    打开命令提示符,切换到你的Vagrantfile所在目录,执行:

    vagrant destroy -f
    vagrant up
    

    先销毁旧实例,再重新创建启动,应该就能正常运行了。

额外方案(如果需要保留Hyper-V)

要是你的服务器必须保留Hyper-V功能,那可以改用Hyper-V作为Vagrant的驱动:

  1. 修改你的Vagrantfile,把provider设置为hyperv:
    config.vm.provider "hyperv" do |hv|
      hv.memory = 2048
      hv.cpus = 2
    end
    
  2. 然后执行vagrant up,Vagrant就会用Hyper-V来创建和管理Oracle Linux实例了。

内容的提问来源于stack exchange,提问作者Mawy

火山引擎 最新活动