2016-04-26 2 views
2

Я использую Vagrantfile ниже в качестве основы для многих новых виртуальных машин (я копирую его в новый каталог), но сегодня новая виртуальная машина не будет корректно предоставляться при создании диска с помощью Ошибка VERR_ALREADY_EXISTS. Дисковый файл (source_code_disk.vdi в локальном vagrant каталоге tmp) определенно не существовал в начале и фактически создан во время запуска бродяг, но «createhd», похоже, считает, что он уже существует, несмотря на проверку FileExists, что означало, что он не существуют при вызове 'createhd'. Интересно, что если я «бродяжничаю уничтожу» новую виртуальную машину, то файл диска также не будет удален. В других установках, основанных на том же Vagrantfile, который отлично работает, файл диска создается во время «бродяги» и удаляется с помощью «бродячего уничтожения». Запуск «vagrant up -debug» не дал никакой дополнительной информации, и для краткости я не включил здесь результат.vagrant up failing при вызове createhd с ошибкой VERR_ALREADY_EXISTS на новой виртуальной машине

# -*- 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 

Примечание: исходный файл ТРУДЫ В большинстве случаев, но время от времени, когда я копирую файл в новый каталог и пытаюсь «бродяжничать», я не могу заставить VM обеспечить. Я знаю, это звучит маловероятно, но это правда, и вот отладка, показывающая неудачу, которая работает, если я «бродяжничать», а затем удаляю только «./» из пути к файлу - никаких других изменений.

==> 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