当f:

时间:2016-06-13 13:56:25

标签: vagrant virtualbox

Windows 10

Vagrant文​​件位于云端硬盘E:\ Vagrant \ ubuntu-trusty-vb

Virtualbox机器文件夹F:

当vagrant up运行时,.vbox文件中的HardDisk条目不会更改为正确的目录,而是f:\ubuntu-cloudimg-trusty-vagrant-amd64_1465748344502_5020而不是实际创建的F:\ubuntu-trusty-vb_default_1465748361721_37792

<HardDisks>
        <HardDisk uuid="{e1fce00d-2c78-4d36-9bff-5fcb08ff1b32}" location="f://ubuntu-cloudimg-trusty-vagrant-amd64_1465855041577_18173/box-disk1.vmdk" format="VMDK" type="Normal"/>
</HardDisks>

E:\Vagrant\ubuntu-trusty-vb>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu/trusty64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/trusty64' is up to date...
==> default: Setting the name of the VM: ubuntu-trusty-vb_default_1465855058236_73527
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["startvm", "197fba85-e448-449d-a7d3-14565879a8e4", "--type", "headless"]

Stderr: VBoxManage.exe: error: Could not open the medium 'f:\\ubuntu-cloudimg-trusty-vagrant-amd64_1465855041577_18173\box-disk1.vmdk'.
VBoxManage.exe: error: VD: error VERR_PATH_NOT_FOUND opening image file 'f:\\ubuntu-cloudimg-trusty-vagrant-amd64_1465855041577_18173\box-disk1.vmdk' (VERR_PATH_NOT_FOUND)
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component MediumWrap, interface IMedium

这是一个错误还是我可以在vagrantfile或配置中更改某些内容?

由于

2 个答案:

答案 0 :(得分:0)

好的,这篇文章很老了,但我最近遇到了这个错误,并且使用了一种解决方法解决了这个问题。您必须最终将--uartmode1设置为disconnected,如下面的Vagrant配置文件中所示:

config.vm.provider "virtualbox" do |v|
        v.memory = 4096
        v.cpus = 4
        v.customize [ "modifyvm", :id, "--uartmode1", "disconnected" ]
end

问候,祝你好运!

答案 1 :(得分:0)

我偶然发现了同样的问题。奇怪的是,这两年还没有修复。

本质上,解决方法是应用此处提到的补丁: https://github.com/hashicorp/vagrant/issues/8275#issuecomment-291031171

问题-修补程序引用了version_5_1.rb文件中的代码片段,但该代码已移至version_5_0.rb。这意味着您不能按原样应用补丁。将来,它可能会发生更多变化,因此我的说明可能会过时...

我懒得编辑补丁并学习如何正确应用补丁,所以最终我按照补丁中所述将更改逐一应用到相关文件。在Windows上,我还必须更改文件权限,才能为计算机用户提供“修改”权限。

因此,步骤如下:

  1. 打开Vagrant Ruby文件的安装路径。例如,C:\Program Files\Vagrant\embedded\gems\2.1.2\gems\vagrant-2.1.2\plugins\providers\virtualbox

  2. 打开子文件夹action,然后向文件import.rbset_name.rb的Users组授予“修改权限”(权限可以照常通过上下文菜单编辑,在“属性”中,“安全性”选项卡,然后点击编辑..,选择用户,然后选中允许修改选项下的复选框)

  3. 打开文件import.rb并替换行

    id = env[:machine].provider.driver.import(ovf_file) do |progress|
    

    使用

    id = env[:machine].provider.driver.import(ovf_file,env) do |progress|
    

    应该只替换一行。

  4. 打开文件set_name.rb,找到def call(env)并在其下添加以下几行:

          return @app.call(env)
    
  5. 打开子文件夹driver,然后向文件version_5_0.rb的“用户”组授予“修改权限”

  6. 打开文件version_5_0.rb并替换行

    def import(ovf)
    

    使用

    def import(ovf,env)
    
  7. 在同一文件version_5_0.rb中替换行

    specified_name = "#{suggested_name}_#{(Time.now.to_f * 1000.0).to_i}_#{rand(100000)}"
    

    带有以下片段

      name = env[:machine].provider_config.name
      # If no name was manually set, then use a default
      if !name
        prefix = "#{env[:root_path].basename.to_s}_#{env[:machine].name}"
        prefix.gsub!(/[^-a-z0-9_]/i, "")
    
        # milliseconds + random number suffix to allow for simultaneous
        # `vagrant up` of the same box in different dirs
        name = prefix + "_#{(Time.now.to_f * 1000.0).to_i}_#{rand(100000)}"
      end
    
      specified_name = "#{name}_#{(Time.now.to_f * 1000.0).to_i}_#{rand(100000)}"
    
  8. 查找并删除损坏的虚拟机及其在其他磁盘上的所有文件,也从启动.vagrant\machines命令的vagrant up文件夹中查找并删除。然后再次运行vagrant up

现在应该使用适当的名称创建虚拟机,并且虚拟机应该可以正常工作。