2016-04-26 6 views
2

Ich benutze die Vagrantfile unten als Grundlage für viele neue VMs (ich kopiere es in ein neues Verzeichnis), aber heute würde eine neue VM nicht korrekt beim Erstellen der Festplatte mit Fehler VERR_ALREADY_EXISTS. Die Disk-Datei (source_code_disk.vdi im lokalen vagrant 'tmp' -Verzeichnis) existierte am Anfang definitiv nicht und wird tatsächlich während des Vagrant-Starts erstellt, aber 'createhd' scheint zu glauben, dass sie trotz der FileExists-Prüfung bereits existierte, was bedeutete, dass sie nicht existierte existiert, wenn 'createhd' aufgerufen wird. Interessanterweise wird, wenn ich die neue VM "vagrant" zerstöre, die Datei nicht gelöscht. Bei anderen Installationen, die auf der gleichen Vagrant-Datei basieren, die gut funktionieren, wird die Disk-Datei sowohl während "vagrant up" erstellt als auch mit "vagrant destroy" gelöscht. Das Ausführen von "vagrant up - debug" ergab keine zusätzlichen Informationen und aus Platzgründen habe ich die Ausgabe hier nicht aufgenommen.vagrant up failing beim Aufruf von createhd mit Fehler VERR_ALREADY_EXISTS auf neuer VM

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

Antwort

3

FIXED: durch die relativen Pfadnamen zu ändern, die entfernen ‚./‘

file_to_disk = 'tmp/source_code_disk.vdi' 

Ich entfernte die ‚./‘ auf dem Weg zu der Plattendatei und ein zuverlässig installieren Fehler nun abgeschlossen ohne Probleme - ich vermute, es ist ein Weg mit einigen Zeitprobleme kombiniert Prüfungsfehler, wenn sie mit unschädlichen Begrenzer so ‚./‘

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

HINWEIS Präfix relative Pfade verwenden: die ursprüngliche Datei funktioniert i In den meisten Fällen, aber hin und wieder, wenn ich die Datei in ein neues Verzeichnis kopiere und "vagrant up" versuche, kann ich die VM nicht zur Verfügung stellen. Ich weiß, es klingt unwahrscheinlich, aber es ist wahr und hier ist das Debug zeigt einen Fehler, der funktioniert, wenn ich 'vagrant zerstören' und dann nur die './' aus dem Dateipfad entfernen - keine anderen Änderungen.

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

Das funktionierte auch für mich. 'Vagrant up' würde diesen Fehler erzeugen, wenn ich versuchte, die Box nach dem Neustart des Hosts hochzuziehen. – mjuopperi

Verwandte Themen