2016-04-26 132 views
2

我使用下面的Vagrantfile作为许多新VM的基础(我将它复制到一个新目录中),但今天当创建磁盘时,错误VERR_ALREADY_EXISTS。磁盘文件(本地vagrant'tmp'目录中的source_code_disk.vdi)在开始时并不存在,实际上在vagrant启动时创建,但'createhd'似乎认为它已经存在,尽管FileExists检查意味着它没有在'createhd'调用时存在。有趣的是,如果我“迷路”销毁新VM,那么磁盘文件也不会被删除。在其他基于相同Vagrantfile的工作正常的安装中,磁盘文件既在“vagrant up”期间被创建,也被“vagrant destroy”删除。运行“vagrant up --debug”没有产生任何额外的信息,为了简洁起见,我没有在这里列出输出。在新虚拟机上调用带有错误VERR_ALREADY_EXISTS的createhd时,vagrant up失败

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

file_to_disk = './tmp/source_code_disk.vdi' 

Vagrant.configure("2") do |config| 

    config.vm.box = "ubuntu/trusty32" 
    config.vm.network "private_network", ip: "192.168.33.11" 
    config.vm.hostname = "testdisk" 
    config.ssh.forward_agent = true 
    config.ssh.shell = "/bin/bash -l" 

    config.vm.provision :shell do |shell| 
     shell.inline = "sudo chsh -s /bin/bash vagrant" 
    end 

    # create a disk for the source code 
    config.vm.provider "virtualbox" do | v | 
     unless File.exist?(file_to_disk) 
      v.customize ['createhd', '--filename', file_to_disk, '--size', 50 * 1024] 
      v.customize ['storageattach', :id, '--storagectl', 'SATAController', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', file_to_disk] 
     end 
    end  

end 

回答

3

固定:通过改变相对路径名来删除前导“./”

file_to_disk = 'tmp/source_code_disk.vdi' 

我在路径磁盘文件删除“./”和可靠的安装失败,现在完成没有问题 - 我怀疑有一条小路检查失败的一些时间问题结合使用带分隔符无害等“./”

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

file_to_disk = 'tmp/source_code_disk.vdi' 

Vagrant.configure("2") do |config| 

    config.vm.box = "ubuntu/trusty32" 
    config.vm.network "private_network", ip: "192.168.33.11" 
    config.vm.hostname = "testdisk" 
    config.ssh.forward_agent = true 
    config.ssh.shell = "/bin/bash -l" 

    config.vm.provision :shell do |shell| 
     shell.inline = "sudo chsh -s /bin/bash vagrant" 
    end 

    # create a disk for the source code 
    config.vm.provider "virtualbox" do | v | 
     unless File.exist?(file_to_disk) 
      v.customize ['createhd', '--filename', file_to_disk, '--size', 50 * 1024] 
      v.customize ['storageattach', :id, '--storagectl', 'SATAController', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', file_to_disk] 
     end 
    end  

end 

注意前缀相对路径时:原文件我的作品大多数情况下,但是现在当我将文件复制到一个新目录并尝试“流浪”时,我无法让虚拟机进行配置。我知道这听起来不太可能,但它是真实的,这里是调试显示失败,如果我'流浪'销毁',然后从文件路径中删除'./',没有其他更改。

==> default: Running 'pre-boot' VM customizations... 
INFO subprocess: Starting process: ["/usr/bin/VBoxManage", "createhd", "--filename", "./tmp/source_code_disk.vdi", "--size", "51200"] 
INFO subprocess: Command not in installer, restoring original environment... 
DEBUG subprocess: Selecting on IO 
DEBUG subprocess: stderr: 0%... 
DEBUG subprocess: stderr: 10%...20%...30%...40%...50%...60%...70%...80%...90%... 
DEBUG subprocess: stderr: 
Progress state: NS_ERROR_INVALID_ARG 
DEBUG subprocess: stderr: VBoxManage: error: Failed to create medium 
DEBUG subprocess: stderr: VBoxManage: error: Cannot register the hard disk '/home/stg38/vagrant/vstb/./tmp/source_code_disk.vdi' {0c2aa882-a1ef-427e-b7c4-85ef86c0f819} because a hard disk '/home/stg38/vagrant/vstb/./tmp/source_code_disk.vdi' with UUID {17da2b81-dd91-44a3-b60e-6c4921d8e75a} already exists 
VBoxManage: error: Details: code NS_ERROR_INVALID_ARG (0x80070057), component VirtualBoxWrap, interface IVirtualBox 
VBoxManage: error: Context: "RTEXITCODE handleCreateMedium(HandlerArg*)" at line 449 of file VBoxManageDisk.cpp 
DEBUG subprocess: Waiting for process to exit. Remaining to timeout: 32000 
DEBUG subprocess: Exit status: 1 
INFO retryable: Retryable exception raised: #<Vagrant::Errors::VBoxManageError: There was an error while executing `VBoxManage`, a CLI used by Vagrant 
for controlling VirtualBox. The command and stderr is shown below. 

Command: ["createhd", "--filename", "./tmp/source_code_disk.vdi", "--size", "51200"] 

Stderr: 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%... 
Progress state: NS_ERROR_INVALID_ARG 
VBoxManage: error: Failed to create medium 
VBoxManage: error: Cannot register the hard disk '/home/stg38/vagrant/vstb/./tmp/source_code_disk.vdi' {0c2aa882-a1ef-427e-b7c4-85ef86c0f819} because a hard disk '/home/stg38/vagrant/vstb/./tmp/source_code_disk.vdi' with UUID {17da2b81-dd91-44a3-b60e-6c4921d8e75a} already exists 
VBoxManage: error: Details: code NS_ERROR_INVALID_ARG (0x80070057), component VirtualBoxWrap, interface IVirtualBox 
VBoxManage: error: Context: "RTEXITCODE handleCreateMedium(HandlerArg*)" at line 449 of file VBoxManageDisk.cpp 
> 
INFO subprocess: Starting process: ["/usr/bin/VBoxManage", "createhd", "--filename", "./tmp/source_code_disk.vdi", "--size", "51200"] 
INFO subprocess: Command not in installer, restoring original environment... 


Please fix this customization and try again. 
A customization command failed: 

["createhd", "--filename", "./tmp/source_code_disk.vdi", "--size", 51200] 

The following error was experienced: 

#<Vagrant::Errors::VBoxManageError: There was an error while executing `VBoxManage`, a CLI used by Vagrant 
for controlling VirtualBox. The command and stderr is shown below. 

Command: ["createhd", "--filename", "./tmp/source_code_disk.vdi", "--size", "51200"] 

Stderr: 0%... 
Progress state: VBOX_E_FILE_ERROR 
VBoxManage: error: Failed to create medium 
VBoxManage: error: Could not create the medium storage unit '/home/stg38/vagrant/vstb/./tmp/source_code_disk.vdi'. 
VBoxManage: error: VDI: cannot create image '/home/stg38/vagrant/vstb/./tmp/source_code_disk.vdi' (VERR_ALREADY_EXISTS) 
VBoxManage: error: Details: code VBOX_E_FILE_ERROR (0x80bb0004), component MediumWrap, interface IMedium 
VBoxManage: error: Context: "RTEXITCODE handleCreateMedium(HandlerArg*)" at line 449 of file VBoxManageDisk.cpp 
> 

Please fix this customization and try again. 
+0

这也适用于我。如果我在重新启动主机后尝试重新启动盒子,“Vagrant up”会产生此错误。 – mjuopperi

相关问题