Logo

Windows Server 2008 R2 - Automatisiertes Backup

Variable Datensicherung mit Windows Backup

In Windows Server 2008 ist erstmals serverseitig "Windows Backup" enthalten, der Nachfolger von "ntbackup". In beiden Versionen können zwar zeitgesteuerte Datensicherungen erstellt werden, jedoch wird man schnell feststellen, dass die Wahl eines variablen Zielverzeichnisses für die Sicherungsdatei(en) nicht möglich ist. Dieses Manko lässt sich bspw. mit einem Batch-Job lösen.

Unterschiedliche Backups an einem Speicherort

Anhand der Windows Backup Oberfläche (GUI) kann lediglich ein festes Backup-Ziel für die Datensicherung angegeben werden. Infolgedessen überschreibt eine wiederkehrende Datensicherungen die vorhergehende, sofern man nicht vorher durch Umbenennen oder Verschieben manuell eingegriffen hat.

Möchte man dennoch mehrere unterschiedliche Datensicherungen an einem Speicherort vorhalten, lässt sich dies bspw. durch die Nutzung der Kommandozeile erreichen, da dort die Flexibilität der Parameterübergabe höher ist als über die GUI.

Die Kommandozeile

Die in der Windows Backup GUI vorgenommen Einstellungen lassen sich ebenso anhand einer Parameterübergabe an die Kommandozeile anwenden. Das Ziel dieses beispielhaften Backup-Scripts ist es, die täglich ausgeführte Datensicherung automatisiert in einem adäquaten Verzeichnis zu speichern, ohne die Sicherung des Vortages durch überschreiben zu verlieren.

Festlegen des Sicherungsziels

Zunächst wird mit der Variable "targetServer" der Zielserver und der Freigabename festgelegt:

set targetServer=\\Servername\Freigabe\
set baseDir=%date:~6%\%date:~3,2%\%date:~0,2%\
set targetDir=%targetServer%%baseDir%
set BackupDirs=C:,D:
if not exist %targetDir% mkdir %targetDir%
wbadmin start backup -backuptarget:%targetDir% -include:%BackupDirs% -vssfull -systemState -quiet
if %errorlevel%==0 (goto Fertig) else (goto Fehler)

Um eine aussagekräftige und zugleich dynamische Verzeichnisstruktur zu erhalten, wählt man bspw. eine Struktur bestehend aus Jahr, Monat und Tag.

So würde eine am 11.12.2012 ausgeführte Datensicherung im Verzeichnis

\\Servername\Freigabe\2012\12\11\

abgelegt werden.
Der sich täglich ändernde Verzeichnisname im Format "Jahr\Monat\Tag (2012\12\11)" wird über den Wert der Systemvariablen %date% (in unserem Beispiel 11.12.2012) ermittelt und in der Variablen "baseDir" abgelegt.

set targetServer=\\Servername\Freigabe\
set baseDir=%date:~6%\%date:~3,2%\%date:~0,2%\
set targetDir=%targetServer%%baseDir%
set BackupDirs=C:,D:
if not exist %targetDir% mkdir %targetDir%
wbadmin start backup -backuptarget:%targetDir% -include:%BackupDirs% -vssfull -systemState -quiet
if %errorlevel%==0 (goto Fertig) else (goto Fehler)

Die Positionsangabe beim Extrahieren der Zeichen ist nullbasiert, d.h., dass bei der Durchnummerierung der Elemente mit dem Indexwert 0 begonnen wird und daher der Index des letzten Elements um den Wert 1 geringer ist, als die Anzahl der Elemente.

Nun wird das vollständige Zielverzeichnis in einer separaten Variablen (targetDir) abgelegt.

set targetServer=\\Servername\Freigabe\
set baseDir=%date:~6%\%date:~3,2%\%date:~0,2%\
set targetDir=%targetServer%%baseDir%
set BackupDirs=C:,D:
if not exist %targetDir% mkdir %targetDir%
wbadmin start backup -backuptarget:%targetDir% -include:%BackupDirs% -vssfull -systemState -quiet
if %errorlevel%==0 (goto Fertig) else (goto Fehler)

In dem Beispiel enthält %targetDir% nun den Wert "\\Servername\Freigabe\2012\12\11\".

Da die Ziel-Struktur komplett ist, fehlt noch die Angabe über die zu sichernden Verzeichnisse.
Im Beispiel sollen die Laufwerke C:\ und D:\ gesichert werden.

set targetServer=\\Servername\Freigabe\
set baseDir=%date:~6%\%date:~3,2%\%date:~0,2%\
set targetDir=%targetServer%%baseDir%
set BackupDirs=C:,D:
if not exist %targetDir% mkdir %targetDir%
wbadmin start backup -backuptarget:%targetDir% -include:%BackupDirs% -vssfull -systemState -quiet
if %errorlevel%==0 (goto Fertig) else (goto Fehler)

Zielverzeichnis bei Bedarf erstellen

Vor der eigentlichen Sicherung muss das Zielverzeichnis existieren. Um dies zu gewährleisten, wird mit den nachfolgenden Befehlen überprüft, ob die Verzeichnisstruktur vorhanden ist und ggf. angelegt.

set targetServer=\\Servername\Freigabe\
set baseDir=%date:~6%\%date:~3,2%\%date:~0,2%\
set targetDir=%targetServer%%baseDir%
set BackupDirs=C:,D:
if not exist %targetDir% mkdir %targetDir%
wbadmin start backup -backuptarget:%targetDir% -include:%BackupDirs% -vssfull -systemState -quiet
if %errorlevel%==0 (goto Fertig) else (goto Fehler)

Ausführen des Backups

Zum Starten der Datensicherung werden die vorher definierten Parameter an "Windows Backup" als Kommandozeilen-Parameter übergeben:

set targetServer=\\Servername\Freigabe\
set baseDir=%date:~6%\%date:~3,2%\%date:~0,2%\
set targetDir=%targetServer%%baseDir%
set BackupDirs=C:,D:
if not exist %targetDir% mkdir %targetDir%
wbadmin start backup -backuptarget:%targetDir% -include:%BackupDirs% -vssfull -systemState -quiet
if %errorlevel%==0 (goto Fertig) else (goto Fehler)

Erläuterung der verwendeten Kommandozeilen-Parameter:

Eine Liste der Parameter finden Sie im Microsoft Technet Artikel Nr. 742083.

Abschluss des Backup-Vorganges

Nach Abschluss des Backups kann eine Fehlerbehandlung mit Hilfe der Systemvariablen "ErrorLevel" durchgeführt werden.

set targetServer=\\Servername\Freigabe\
set baseDir=%date:~6%\%date:~3,2%\%date:~0,2%\
set targetDir=%targetServer%%baseDir%
set BackupDirs=C:,D:
if not exist %targetDir% mkdir %targetDir%
wbadmin start backup -backuptarget:%targetDir% -include:%BackupDirs% -vssfull -systemState -quiet
if %errorlevel%==0 (goto Fertig) else (goto Fehler)

Was bei den Sprungmarken :Fehler und :Fertig durchgeführt werden soll, kann je nach Anforderung entschieden werden.