当在F盘上的默认VB机器文件夹上执行vagrant up命令时,出现“vboxmanage verr_path_not_found”的错误。

5

Windows 10

位于E盘的Vagrant文件:E:\Vagrant\ubuntu-trusty-vb

虚拟盒机器文件夹为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

这是一个bug还是我可以在vagrantfile或配置中做出更改?

谢谢


我有完全相同的问题!!我的开发文件都在D盘,但是我在虚拟机上没有足够的空间,所以我将VirtualBox的默认位置设置为F盘,结果出现了完全相同的问题。 - Robert
2个回答

0

好的,这篇文章很旧了,但我最近遇到了这个错误,并通过一个解决方法解决了它。您必须在Vagrant配置文件中像下面这样设置--uartmode1disconnected

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

你好,祝你好运!


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文件的修改权限(可以通过右键菜单,在“属性”选项卡中点击“安全”按钮,再点击“编辑”按钮,选择用户并在“修改”选项下勾选复选框来进行设置)

  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 !name
        prefix = "#{env[:root_path].basename.to_s}_#{env[:machine].name}"
        prefix.gsub!(/[^-a-z0-9_]/i, "")
    
        # 毫秒数和随机数后缀,以支持同时在不同目录中对相同的框执行`vagrant up`
        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 up命令的.vagrant\machines文件夹中删除它。然后再次运行vagrant up

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接