2017-11-26 9 views
2

Ich versuche, ein Bash-Skript so einfach wie möglich zu Klonen virtueller Maschinen von einer "übergeordneten" virtuellen Maschine (mit dem Namen peer00) zu schreiben. Um diese Maschinen zu klonen, brauche ich zuerst einen Snapshot.Bash-Skript zum Löschen und Erstellen von Snapshots mit virtualbox

vboxmanage snapshot peer00 delete "MySnapShot" 
vboxmanage snapshot peer00 take "MySnapShot" 

# for loop to create several machines 

Nun, wenn ich dieses Skript ausführen, wenn kein MySnapShot Schnappschuss ich folgende Fehlermeldung erhalten, ist (natürlich):

VBoxManage: error: Could not find a snapshot named 'MySnapShot' VBoxManage: error: Details: code VBOX_E_OBJECT_NOT_FOUND (0x80bb0001), component SessionMachine, interface IMachine, callee nsISupports VBoxManage: error: Context: "FindSnapshot(Bstr(a->argv[2]).raw(), pSnapshot.asOutParam())" at line 514 of file VBoxManageSnapshot.cpp

Auf der anderen Seite, wenn ich es laufen, während der Schnappschuss ist bereits vorhanden I erhalten diese andere Ausgabe:

0%... Progress state: NS_ERROR_FAILURE VBoxManage: error: Snapshot operation failed VBoxManage: error: Hard disk '/home/pietro/VirtualBox VMs/peer00/Snapshots/{0183ad41-71b6-41bf-af74-38db828b2d82}.vdi' has more than one child hard disk (7) VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component SessionMachine, interface IMachine VBoxManage: error: Context: "RTEXITCODE handleSnapshot(HandlerArg*)" at line 532 of file VBoxManageSnapshot.cpp

Wie eine Art „if-Anweisung“ schreiben, die bereits, wenn der Snapshot, bevor sie versuchen, es zu löschen existiert überprüfen wird? Außerdem, warum bekomme ich den zweiten Fehler? Ich verstehe wirklich nicht,

+0

Es gibt einen * - uniquename * -Parameter (der Number, Timestamp, Space, Force-Werte unterstützt). Es könnte sich lohnen, sein Verhalten zu überprüfen. –

Antwort

0

Sie können prüfen, ob ein Schnappschuss mit Liste subcommand:

vboxmanage snapshot peer00 list |\ grep "MySnapshot" &&\ vboxmanage snapshot peer00 delete "MySnapShot" ||\ echo "No snapshot"

Eine Alternative ist nur Ausfall ignorieren löschen:

vboxmanage snapshot peer00 delete "My Snapshot" ||\ echo "No snapshot"

Verwandte Themen