【问题标题】:How can I create a VM in Vagrant with VirtualBox with two CPUs?如何使用具有两个 CPU 的 VirtualBox 在 Vagrant 中创建 VM?
【发布时间】:2018-02-15 09:30:24
【问题描述】:

在 Windows 7 64 位上尝试启动 VM(Ubuntu 32 位)。尽管在我的 Vagrantfile 中添加了 modify vm 命令,但我无法让我的 VM 显示两个内核。我的 Vagrant 版本是 1.2.2。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "precise32"
  config.vm.box_url = "http://files.vagrantup.com/precise32.box"

  config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--memory", "2048"]
    vb.customize ["modifyvm", :id, "--cpus", "2"]   
  end  
end

有了这个 Vagrantfile,我发出了vagrant up 命令。然后我发出vagrant ssh,然后是lscpu,产生:

Architecture:          i686
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                1
On-line CPU(s) list:   0
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 58
Stepping:              9
CPU MHz:               2565.513
BogoMIPS:              5131.02
L1d cache:             32K
L1d cache:             32K
L2d cache:             6144K

我认为 CPU(s) 应该显示 2,所以我的虚拟机现在只有一个 CPU。当我运行lscpu 时,如何让 2 个 CPU 显示出来?

【问题讨论】:

  • 所有 vb.* 选项都记录在案 here.

标签: vagrant


【解决方案1】:

将 vb.customize ["modifyvm", :id, "--ioapic", "on"] 添加到 Vagrantfile 中的 config.vm.provider 块中。

看看它提到的 VirtualBox documentation:

"注意 64 位客户机操作需要启用 I/O APIC 系统,尤其是 Windows Vista;如果你想,它也是必需的 在一台虚拟机中使用多个虚拟 CPU。”

【讨论】:

  • 我有一些问题。当我尝试将 ioapic 启用时,我的 VM 会显示一条错误消息...
  • 我在CentOS 6.5 盒子上尝试了上述方法,但lscpu 仍然显示 1 个 CPU。然后,我尝试了以下失败:vb.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
  • @Rob3:从您阅读该错误消息开始。错误消息没有说“它坏了”。它旨在帮助您了解问题所在。所以最重要的错误信息是阅读它。此外,当您寻求帮助并且不发布错误消息时,没有人会尝试帮助您。
  • @KevinMeredith:你的主机(物理)系统有多少个 CPU?
  • @TopherHunt - 是的,好文章,如果在 Windows 上还记得禁用 Hyper-V!我在文章中添加了评论
【解决方案2】:

如果您使用 Oracle Virtualbox 运行 vagrant,那么最常见的问题是 Windows 7、8 或 10 中的 Hyper-V。这将限制您使用 32 位和一个 cpu。

运行或搜索“Windows 功能”并选择“打开或关闭 Windows 功能”。

在复选框中确保 Hyper-V 已关闭 - 您无法在 Microsoft Hyper-V 占用它的情况下为 Virtualbox 启用 VT-x。

然后,您可以通过以下方式使您的 Vagrantfile 启动非常用户友好:

  config.vm.provider "virtualbox" do |vb|
    vb.memory = "2404"
    vb.cpus = "2"
  end

假设您想要运行两个内核并且内存略多于 2 Gig

ps - 不要忘记添加您的端口转发。对于 PHPStorm(xdebug、mysql 和 web),我使用:

  config.vm.network "forwarded_port", guest: 80, host: 8080
  config.vm.network "forwarded_port", guest: 3306, host: 3306
  config.vm.network "forwarded_port", guest: 9000, host: 9000

【讨论】:

  • 有什么方法可以动态查询主机的可用cpu和内存并根据条件分配,即如果host_cpus = 16然后v.cpus = 8?我想在两个不同的系统上分配一半的 cpus 和 ram,即一个是 8 cpus 和 8gb ram,另一个是 16 cpus 和 16gb ram。
  • @radtek:这都是 ruby​​,所以至少你可以只输入一段代码来检测 CPU 数量(例如stackoverflow.com/questions/891537/…)并将其减半。
  • 谢谢,我认为会有更本地化的检查方式。
【解决方案3】:

您似乎没有提到您使用的是哪个提供商。从 Vagrant 1.7 开始,许多 VM 提供程序(例如 VirtualBox、HyperV)在您的 Vagrantfile 中支持以下配置:

config.vm.provider "virtualbox" do |v|
  v.memory = 1024
  v.cpus = 2
end

在vagrant documentation 中查看您正在使用的特定提供程序。

【讨论】:

    猜你喜欢
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    相关资源
    最近更新 更多