Die Foren-SW läuft ohne erkennbare Probleme. Sollte doch etwas nicht funktionieren, bitte gerne hier jederzeit melden und wir kümmern uns zeitnah darum. Danke!

VMWare Backupscript mit VBScript

Hilfe bei Problemen mit der Installation oder Benutzung des VMware GSX Server und VMware Server 1.

Moderatoren: irix, Dayworker

Benutzeravatar
Member
Beiträge: 49
Registriert: 26.07.2004, 09:18
Wohnort: Potsdam

VMWare Backupscript mit VBScript

Beitragvon potsdam » 06.12.2006, 08:55

Neue Version eingestellt: V0.9.5



Angeregt durch Saxa: The ultimate VBScript for VM backup on Windows hosts im VMTN habe ich das dortige Script übersetzt und etwas erweitert.

Neu ist die Unterstützung des Packers LZOP. Dieser komprimiert fast in "WireSpeed", so das die BAckupzeit erheblich verkürzt wird. Negativer Nebeneffekt: die Archive werden ca. 10-20% größer. Aber mir ist die Zeitersparniss wichtiger - und 6 Minuten Komprimierung statt 35 Minuten sind ein kleiner Unterschied ... wer möchte kann weiter 7Zip nutzen

Eine kleine Einschränkung hat meine Einbindung von LZOP aber - in den Verzeichnissen der VMs dürfen keine Unterverzeichnisse vorhanden sein - sonst wird das Komprimieren als vom Script als fehlerhaft gemeldet.

Neu ist auch die Möglichkeit alle VMs eines Servers zu sichern.
Es werden die registrierten VMs des Servers ausgelesen und nacheinander runtergefahren, kopiert, gestartet. sind alle Kopiert werden die Kopierten Files komprimiert.

So - genug palaver, hier isses:

' Version: 0.9.5
' Description: Das Script Stoppt die per Parameter übergebene virtual Maschine eines VMWare-Serves,
' erstellt eine Kopie der vm, Startet die vm wieder und komprimiert anschließend
' die Kopie der vm mit 7Zip. Ergebnisse der Prozedur werden per Mail versendet und ins Eventlog
' eingetragen
'
'Vorraussetzungen: Server: VMWare Server ab 1.0
' Windows 2003 Server
' Client: (Scriptausführender Rechner)
' ab Windows XPSP2 (getestet auf Windows XP SP2)
' VMCom-API (wird mit VMWare Console installiert, auch einzeln downloadbar)
' installiertes 7Zip
'
' Syntax: backup_vm.vbs
' Ohne Parameterübergabe werden die notwendigen Daten für das BAckup einer VM interaktiv abgefragt, die Serverdaten müssen
' im Script konfiguriert werden
' backup_vm.vbs -all|-vm:<lokaler Pfad zur VMX-Datei> [-srv:<servername>] [-prt:<Portnummer>] [-usr:<Benutzername>]
' [-pwd:<Passwort>] [-dst:<UNC Zielpfad>] [-tmp:<TEMP-Pfad>] [-int]
'
' Nicht übergebene Parameter werden der Konfig im Script entnommen
'
' Beispiele:
' Backup_VM.vbs -all Sichert alle VMs des im Konfigteil des Scripts angegebenen Servers
'
' Backup_VM.vbs -all -srv:192.168.1.1 -usr:domain\user -pwd:password -tmp:\\server\freigabe\pfad -dst: \\server2\freigabe\pfad -int
' Sichert alle VMs des Servers 192.168.1.1 mit den übergebenen Anmeldedaten für den Server. Die temporären Kopien der VMs
' werden in \\server\freigabe\pfad und die Zipfiles in \\server2\freigabe\pfad abgelegt. Der Status wird interaktiv angezeigt.
'
' Backup_VM.vbs -vm:d:\vmguest1\guest1.vmx -srv:192.168.1.1 -usr:domain\user -pwd:password -tmp:\\server\freigabe\pfad -dst: \\server2\freigabe\pfad
' Sichert die VM "d:\vmguest1\guest1.vmx" vom angegebenen Server. Es erfolgen keine Bildschirmausgaben. Dieser Aufruf ist "Batch-geeignet"
'
' Backup_VM.vbs Die zu sichernde VM und der Zielordner werden interaktiv abgefragt.
' EndRegion

'Region Changelog
' 13.06.07 V0.9.5
' diverse Bugfixes
' alternativer Packer LZOP eingebunden - wesentlich schnellere Kompression, aber 10-20% größere Archive

' 13.06.07 V0.9.4
' Check, ob VM bei Herunterfahren hängt, hartes shutdown nach Timeout
' Backup All VMs eines Servers
' Einführung der Klasse VM_Guest um Backup aller VMs zu händeln
' Neue flexiblere Parameterübergabe (siehe Syntax)
' Errorhandling überarbeitet
' Diverse Bugfixes

' 12.12.06 V0.9.3
' Textnachrichten aus Quelltext in Konfigteil verschoben für bessere Übersicht
' Nicht laufende VMs werden gleich komprimiert, und nicht erst zum Backupdrive kopiert
' 11.12.06 V0.9.2
' Klasse iestatus integriert
' Im Interaktiven Mode wird der aktuelle Status in einem IE-Fenster ausgegeben
' RemoteBackup hinzugefügt
' Vor Backup nun Check ob noch genügend Plattenplatz auf Backupdrive ist
' diverse kleine Änderungen
' 08.12.06 Bugfix: Konfig AlertMail wurde nicht ausgewertet
' und Mails immer verschickt
' 07.12.06 V0.9.1
' Schreiben von Logfiles integriert
' Globales Log für Start-Stop und Errors
' Log je VM-Sicherung mit zusätzlichen Statusmeldungen
' Versand des Sicherungslog mit Abschlußmail
' Loglevel für Eventlog und Globales Logfile konfigurierbar

' 06.12.06 Funktion zum Löschen des tempFolders hinzugefügt mit Benachrichtigung bei
' erfloglosem Löschen
' Fehlerhafte Dateigrößenberechnung korrigiert
' Bug behoben: Löschen der Kopie von suspended VMs nicht möglich

' 05.12.06 Starte gleich mit V0.9 ;) Saxa hat schließlich gute Vorarbeit geleistet


Was noch geplant ist:
- Nutzung von ShadowCopy fürs Kopieren, um Downtime der VM zu reduzieren


Diskussion des Scripts, Bugmeldungen und Vorschläge bitte in meinem Forum unter Projekte.
Beitragstitel bitte mit <Bug>, <Vorschlag> oder <Featurerequest> beginnen.

Die aktuelle Version werde ich regelmäßig hier posten.

Nicht vergessen, die Konfiguration anzupassen

Der Vollständigkeit halber: Die Verwendung des Scriptes erfolgt auf eigene Gefahr! Ich übernehme keine Haftung für eventuelle Folgeschäden! Fragen Sie vor Verwendung Ihren Arzt oder Apotheker. :roll:
Dateianhänge
vmware_backup_V0_9_5.zip
Version 0.9.5
(66.94 KiB) 556-mal heruntergeladen

Member
Beiträge: 31
Registriert: 05.12.2006, 15:06

Beitragvon orga|kp » 07.12.2006, 13:58

Tester gefunden.

Ich werde heute Nacht mal das Script laufen lassen als Script. Dabei werden 1x Ubuntu und 1x Win2k3 "gebackuped".

Mal sehen was passiert :)

Benutzeravatar
Member
Beiträge: 49
Registriert: 26.07.2004, 09:18
Wohnort: Potsdam

Beitragvon potsdam » 07.12.2006, 14:34

orga|kp hat geschrieben:Tester gefunden.

OK - freu mich schon auf die (hoffentlich wenigen) Bugs

werde heute noch eine aktuellere Version online stellen ... 1-2 Stündchen brauch ich noch ...

Member
Beiträge: 31
Registriert: 05.12.2006, 15:06

Beitragvon orga|kp » 07.12.2006, 14:46

gut denn ... diese hier klappt nicht :/ muss aber auch sagen das die ubuntu kein vmware tools installiert hat.

setze mal eben ein winserver auf mit vmware tools.

Bild


Edit: ok mit sendmail aus klappt das. In der Zeile steht was von sendmail. Mache ich in der Konfiguration das mail schreiben aus scheint das zu klappen.

Edit2: klappt. also die Windows XP SP2 Vmware mit vmware tools wird heruntergefahren, kopiert und wieder hochgefahren. dafür erstmal gratulation. auch das zippen der vmwarebackup files klappt super. dauert gerade nur grad ewig. nur das mailinmg geht nciht. wenn ich automail auf true habe bricht er ab ...

Benutzeravatar
Member
Beiträge: 49
Registriert: 26.07.2004, 09:18
Wohnort: Potsdam

Beitragvon potsdam » 07.12.2006, 15:39

Mail wird per smtp auf Standardport 25 versended.

Der Konfigurierte SMTP-Server muss mails von deinem System annehmen dürfen .
Geht ein telnet auf port 25 des mmtp-servers?
Darf er deine konfigurierte absenderadresse relayen?

Komm grad nicht weiter mit dem Script - neue Version eventuell erst Morgen.

Gruß Stefan

PS: Bugmeldungen bitte in mein Forum- da kann zu jedem Bug oder Vorschlag ein eigener Thread aufgemacht werden. Macht das ganze etwas übersichtlicher. Hier wollte ich nur die jeweils aktuelle Version des Scripts veröffentlichen.

Member
Beiträge: 31
Registriert: 05.12.2006, 15:06

Beitragvon orga|kp » 07.12.2006, 15:50

ok, dann in deinem forum, aber:

Bild

:P

Benutzeravatar
Member
Beiträge: 49
Registriert: 26.07.2004, 09:18
Wohnort: Potsdam

Beitragvon potsdam » 07.12.2006, 16:33

na sieht doch gut aus :grin:

neue Version steht im 1. Beitrag

Benutzeravatar
Member
Beiträge: 49
Registriert: 26.07.2004, 09:18
Wohnort: Potsdam

Beitragvon potsdam » 12.12.2006, 13:49

aktuelle Version 0.9.3 im 1. Post verfügbar.
Changelog: ' 12.12.06 V0.9.3
' Textnachrichten aus Quelltext in Konfigteil verschoben für bessere Übersicht
' Nicht laufende VMs werden gleich komprimiert, und nicht erst zum Backupdrive kopiert

' 11.12.06 V0.9.2
' Klasse iestatus integriert
' Im Interaktiven Mode wird der aktuelle Status in einem IE-Fenster ausgegeben
' RemoteBackup hinzugefügt
' Vor Backup nun Check ob noch genügend Plattenplatz auf Backupdrive ist
' diverse kleine Änderungen

' 08.12.06 Bugfix: Konfig AlertMail wurde nicht ausgewertet
' und Mails immer verschickt

' 07.12.06 V0.9.1
' Schreiben von Logfiles integriert
' Globales Log für Start-Stop und Errors
' Log je VM-Sicherung mit zusätzlichen Statusmeldungen
' Versand des Sicherungslog mit Abschlußmail
' Loglevel für Eventlog und Globales Logfile konfigurierbar

' 06.12.06 Funktion zum Löschen des tempFolders hinzugefügt mit Benachrichtigung bei
' erfloglosem Löschen
' Fehlerhafte Dateigrößenberechnung korrigiert
' Bug behoben: Löschen der Kopie von suspended VMs nicht möglich

' 05.12.06 Starte gleich mit V0.9 Saxa hat schließlich gute Vorarbeit geleistet

Member
Beiträge: 31
Registriert: 05.12.2006, 15:06

Beitragvon orga|kp » 12.12.2006, 16:40

Sehr sehr fein :) Klasse Sache.

Nur wie hast du die das mit den Remotebackup vorgestellt bzw. gedacht? Ich habe da gerade eine denkblockade.

Wo soll ich das Script ausführen? Auf dem VM oder auf der backup station?
Welchen Pfad angeben?!

Benutzeravatar
Member
Beiträge: 49
Registriert: 26.07.2004, 09:18
Wohnort: Potsdam

Beitragvon potsdam » 12.12.2006, 17:28

Folgende Konstellation:
Rechner A:
- VMWare-Server mit x VMs
- den wollen wir ja etwas schonen damit die VMs ordentlich rennen ;)

Rechner B:
- Irgendein anderer PC oder Server mit 7Zip und VMCom-Api

[eventuell noch Rechner C:]
- reichlich Plattenplatz für die Backups (ist bei mir mit auf Rechner B)

und so läufts Backup

- Start des Scripts auf Rechner B
- Script fährt zu sichernde VM auf Rechner A runter und kopiert sie zum Backupdrive auf Rechner B/C
- Script Startet VM wieder
- Kopie der VM wird von 7Zip auf Rechner B komprimiert und dann gelöscht.
Fertsch

Vorteil:
Die ganze Zipperei einer VM von x GB belastet einen Rechner doch ein bisserl. (bis 100%CPU, vom Plattenrödeln ganz zu schweigen) Beim Remotebackup kann die Zipperei von einer anderen Maschine (B) übernommen werden, und Rechner A wird - zugunsten der Verfügbarkeit der VMs - ein bisserl entlastet.

Es fällt also nur die zu sichernde VM für ein paar Minuten aus. Dagegen muss beim lokalen Backup (Script wird auf Rechner A gestartet) der VMWareServer auch das Zippen übernehmen. Dann ist für eine geraume Zeit die Performance aller VMs auf dem Server , nun sagen wir mal "Im Keller" :D

Nachtrag: per Remote ist es eventuell auch möglich VMs von Linuxbasierten VMServern zu sichern. auf denen läuft ja kein VBScript. Hierfür müsste wahrscheinlich nur eine kleine Änderung im Script bei der Ermittlung der Pfade fürs Kopieren eingebaut und eine Samba-Freigabe auf dem Host erstellt werden.
Habe hier keinen Linuxhost um dies zu testen - und unsere Linux-Spezies haben sicher andere Möglichkeiten eine VM zu sichern!?

Member
Beiträge: 5
Registriert: 03.01.2007, 08:02

...

Beitragvon chaosgenie » 03.01.2007, 08:08

Hallo,

sehr interessant ...!!! Funzt bei einer VM sehr gut, bei der anderen bleibt das Skript immer hängen. Gast-System ist Debian, Host-System W2K3.

Folgende Fehlermeldung tritt auf:

Code: Alles auswählen

Windows Script Host

Skript:  d:\...\Backup_VM_0.9.3.vbs
Zeile:   735
Zeichen: 4
Fehler: Success
Code: 80040200
Quelle: (null)

Die Maschine fährt herunter, danach tritt die Fehlermeldung auf. Das Skript bricht an dieser Stelle ab.

Hat jemand dazu eine Idee?

Gruß - CG

Member
Beiträge: 31
Registriert: 05.12.2006, 15:06

Beitragvon orga|kp » 03.01.2007, 16:08

Kann es sein das die vmware-tools nicht hundertprozentig funktionieren? bei debian gibt es Probleme soweit ich weiß. denn Zeile 735 ist in dem Script Abschnitt:

Code: Alles auswählen

If use_suspend = False And vmtools_running = True Then
      Call LogDas (MSG_INF_Try_Shutdown,4)
      getoff = thevm.stop(2)
      isoff = False
      
      For tries_off = 1 To 10
         ps = thevm.ExecutionState


Ein Problem mit dem Suspend Modus ...

Member
Beiträge: 2
Registriert: 04.01.2007, 17:42

Beitragvon toaster789 » 04.01.2007, 17:47

Wirklich super Backup Script - Klasse !

Wie bekomme ich das hin das ich den Pfad der VMware und des Backup Verzeichnisses fest im Skript angeben kann ohne das die Abfrage erscheint ?

Ist das mit Automatic Mode gemeint und wie rufe ich den auf ?

Benutzeravatar
Member
Beiträge: 49
Registriert: 26.07.2004, 09:18
Wohnort: Potsdam

Beitragvon potsdam » 08.01.2007, 09:22

Hallo @All und ein gesundes Neues ,

nach ausgiebiger Weihnachtspause nun wieder online ... erstmal zu Euren Fragen:

Wie bekomme ich das hin das ich den Pfad der VMware und des Backup Verzeichnisses fest im Skript angeben kann ohne das die Abfrage erscheint ?

Durch Aufruf mit Backup_VM.vbs [vmx-File] [Zielverzeichnis]
Durch Übergabe der VM und des Zielverzeichnisses läuft das Script im Auto-Mode und fragt keine Eingaben ab. Es erfolgen dann aber auch keine Statusausgaben auf dem Bildschirm.

Folgende Fehlermeldung tritt auf:
Code:

Windows Script Host

Skript: d:\...\Backup_VM_0.9.3.vbs
Zeile: 735
Zeichen: 4
Fehler: Success
Code: 80040200
Quelle: (null)


Ich würde auch vermuten, das da ein Problem mit den VMWare-Tools vorliegt.
An dieser Stelle im Script wird die VM heruntergefahren (nicht suspendiert) und dann in einer Schleife kontrolliert, ob die VM wirklich Down ist. Fährt die VM sauber herunter, wenn in der VM-Konsole der "Powerbutton" gedrückt wird?

Member
Beiträge: 5
Registriert: 03.01.2007, 08:02

...

Beitragvon chaosgenie » 08.01.2007, 09:40

Moin,

ja, die VMWare fährt sauber herunter wenn ich den "Stop"-button drücke.

Ne Idee?

Gruß - CG

Benutzeravatar
Member
Beiträge: 49
Registriert: 26.07.2004, 09:18
Wohnort: Potsdam

Beitragvon potsdam » 08.01.2007, 10:55

Habe nicht wirklich eine Idee und hier auch keinen Debian-Gast zum Testen.

Schick mir doch mal die genaue Zeile aus dem Script, in der der Fehler auftritt (in meiner heißen Version stimmen die Zeilennummern nicht mehr ;) vieleicht klingelts dann ...

Member
Beiträge: 5
Registriert: 03.01.2007, 08:02

Beitragvon chaosgenie » 08.01.2007, 11:05

Hi,

hier ist die Stelle:

Code: Alles auswählen

'   Const vmPowerOpMode_Hard = 1
'   Const vmPowerOpMode_Soft = 2
'   Const vmPowerOpMode_TrySoft = 3
If was_on = True Then
   If use_suspend = False And vmtools_running = True Then
      Call LogDas (MSG_INF_Try_Shutdown,4)
      getoff = thevm.stop(2)
      isoff = False
     
      For tries_off = 1 To 10
        ps = thevm.ExecutionState    <==FEHLERZEILE
         If ps = 2 Then
            isoff = True
            Exit For
         End If
         WScript.Sleep 60 * 1000
         ps = 0
      Next
     
      If Not isoff Then
         Call SendSmtpMail (mailfrom, adminmail, adminmailcc, "", header & ":" & MSG_ERR_Shutdown_short, MSG_ERR_Shutdown_long, "")   
         Call LogDas (MSG_ERR_Shutdown_short,1)
         WScript.Quit
      End If
      Call LogDas (MSG_SUC_Shutdown,0)
   ElseIf use_suspend = True And vmtools_running = True Then
      Call LogDas (MSG_INF_Try_Suspend,4)
      getoff = thevm.suspend(2)
      is_suspended = False
     
      For tries_off = 1 To 10
         ps = thevm.ExecutionState
         If ps = 3 Then
            is_suspended = True
            Exit For
         End If
         WScript.Sleep 60 * 1000
         ps = 0
      Next
     
      If Not is_suspended Then
         Call SendSmtpMail (mailfrom, adminmail, adminmailcc, "", header & ":" & MSG_ERR_Suspend_short, MSG_ERR_Suspend_long, "")   
         Call LogDas (MSG_ERR_Suspend_short,1)
         WScript.Quit
      End If
      Call LogDas (MSG_SUC_Suspend,0)
   ElseIf vmtools_running = False And use_hart_suspend_if_no_VMTools = True Then
      Call LogDas (MSG_INF_Try_HartSuspend,4)
      getoff = thevm.suspend(3)
      is_suspended = False
     
      For tries_off = 1 To 10
         ps = thevm.ExecutionState
         If ps = 3 Then
            is_suspended = True
            Exit For
         End If
         WScript.Sleep 60 * 1000
         ps = 0
      Next
     
      If Not is_suspended Then
         Call SendSmtpMail (mailfrom, adminmail, adminmailcc, "", header & ":" & MSG_ERR_HartSuspend_short, MSG_ERR_HartSuspend_long, "")   
         Call LogDas (MSG_ERR_HartSuspend_short,1)
         WScript.Quit
      End If
      Call LogDas (MSG_SUC_HartSuspend,4)
   End If
End If
'EndRegion


Gruß - CG

Benutzeravatar
Member
Beiträge: 49
Registriert: 26.07.2004, 09:18
Wohnort: Potsdam

Beitragvon potsdam » 08.01.2007, 11:36

ps = thevm.ExecutionState <==FEHLERZEILE

An der Stelle wird der Status der VM beim VMWare Server abgefragt. Wenn thevm.ExecutionState den Wert 2 zurückliefert ist die VM "Heruntergefahren und abgeschaltet" und dann kann das Backup beginnen.
Warum hier ein Fehler auftritt kann ich mir aber nicht erklären. Versuch doch mal die VM auf dem Server neu zu registrieren (Shutdown, aus VMWare-Server entfernen, VM neu hinzufügen).

Über diese Funktion wird schon früher im Script geprüft, ob die VM läuft - da funktioniert es ja scheinbar. Mas passiert wenn du die VM manuell Herunterfährst und dann ein Backup startest?

Member
Beiträge: 5
Registriert: 03.01.2007, 08:02

Beitragvon chaosgenie » 08.01.2007, 11:39

bei manuellem start funktioniert das ganze.
er schreibt, dass die vm schon runtergefahren ist und beginnt zu komprimieren.

gruß

Benutzeravatar
Member
Beiträge: 49
Registriert: 26.07.2004, 09:18
Wohnort: Potsdam

Beitragvon potsdam » 08.01.2007, 11:54

:shock: Da hätte ich nun eigentlich den selben Fehler erwartet.

:roll: Sorry - da kann ich wohl nicht weiterhelfen - da ich das Problem nicht nachstellen kann. Vieleicht liegt es ja wirklich an VMTools-Problemen unter Debian.

Member
Beiträge: 5
Registriert: 03.01.2007, 08:02

Beitragvon chaosgenie » 08.01.2007, 12:39

ok -danke für die hilfe.
bau mir sonst mal eine krücke, die die vm runterfährt, das backup skript startet und dann wieder hochfährt.

cu - cg

Member
Beiträge: 4
Registriert: 11.01.2007, 13:14

Beitragvon olim77 » 11.01.2007, 13:17

hi zusammen

ich glaube, ich mache da noch was falsch. ich möchte mein backup komprimieren und habe deshalb 7-zip installiert und im script die parameter wie folgt gestellt:

compress = True 'Backupdaten komprimieren?
' Wahl der Komprimierung
seven_zip = True '7Zip nutzen?
seven_zip_switch = "" 'Parameter für 7Zip

winzip = False 'Winzip nutzen - noch nicht implementiert!!


mein problem ist jetzt, das die sicherung zwar durchläuft, aber das file nicht komprimiert.

was mache ich da falsch?

danke für eure hilfe!

oli

Benutzeravatar
Member
Beiträge: 49
Registriert: 26.07.2004, 09:18
Wohnort: Potsdam

Beitragvon potsdam » 11.01.2007, 15:18

wie rufst du das Script auf?
Sicherst du von Remote?
Wo ist 7zip installiert?

Member
Beiträge: 4
Registriert: 11.01.2007, 13:14

Beitragvon olim77 » 11.01.2007, 16:51

hallo potsdam

ich bin ein megadepp...

ich sollte wohl 7-zip nicht auf der vm maschine haben sondern auf dem remote pc, der auch das script aufruft...

es funzt also alles wunderbar. tolles script!

oli

Benutzeravatar
Member
Beiträge: 49
Registriert: 26.07.2004, 09:18
Wohnort: Potsdam

Beitragvon potsdam » 12.01.2007, 09:46

olim77 hat geschrieben:ich bin ein megadepp...

:D Einsicht ist der beste Weg zur Besserung

Freut mich das es tut und Danke für die Lorbeeren


Zurück zu „VMserver 1 und GSX“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste