Windows Server 2008 Backup mit Bordmitteln und 7z

Eine serverbasierte Datensicherung speichert Kopien wichtiger Daten, läuft automatisch, verwaltet mehrere Versionsstände und stellt die Integrität der gesicherten Daten sicher. Microsoft Windows Server 2008 und Windows Server 2008 R2 haben bereits einen großen Teil dieser Funktionen mit an Bord. Den Rest liefert die Open Source Kompressionssoftware 7z.

Der Schlüssel für eine robuste Server Datensicherung ist eine Kopie von Dateien in einem konsistenten Zustand. Ab Windows Server 2003 und Windows Vista hat Microsoft den Volume Shadow Copy Service (VSS) eingebaut. Der Dienst erstellt die Kopie eines Laufwerks trotz geöffneter Dateien in einem konsistenten Zustand. Dadurch können in einem laufenden System geöffnete Dateien und Datenbanken kopiert werden, ohne dass ein Dienst beendet werden muss. So sorgen Microsoft SQL Server und Exchange Provider für einen konsistenten Zustand von Datenbankdateien in Schattenkopien auf Datenbank-, Exchange- und Small Business Servern.

Windows Server 2008 Backup mit Schattenkopien und 7z
Windows Server 2008 Backup mit Schattenkopien und 7z

Windows Server 2008 und 2008 R2 liefern mit Diskshadow einen Kommandozeilenbefehl, mit dem sich Schattenkopien verwalten lassen. Dank dem Engagement von Igor Pavlov existiert mit 7z ein freies Datenkompressionsprogramm mit einer 30-70% besseren Kompressionsrate als Zip-Archive. Mit diesen Werkzeugen und einigen Batch-Dateien lässt sich eine selbst gebaute Datensicherung für Windows Server automatisieren.

Das Verfahren setzt die Installation von 7z und einen Windows Server 2008 oder neuer voraus. In dem hier vorgestellten Beispiel wird ein tägliches Backup durchgeführt. Alle Batch-Dateien zum Herunterladen finden Sie im Abschnitt Downloads.

Im Folgenden werden die einzelnen Teile der Batch-Skripte näher erläutert. Die Datensicherung besteht im Wesentlichen aus einer Backup Batch-Datei, den Skripten für den DISKSHADOW-Befehl und einer 7z Batch-Datei:

Die Backup Batch-Datei „Daily.cmd“

Die Batch-Datei „Daily.cmd“ ist der Ausgangspunkt für die Datensicherung und kann z.B. über die Aufgabenplanung aufgerufen werden. Am Anfang des Skriptes werden alle Variablen für das Backup definiert:

::Backup Parameter
set Folder=Daily
set ShadowVolume=D:
set ShadowAlias=Q:
set ShadowCommand=Daily7z.cmd
VariableBeschreibung
%Folder%Verzeichnis, in dem die Archive gespeichert werden sollen. In dem Beispiel ist ein relativer Pfad zur Batch-Datei angegeben. Hier kann natürlich auch ein absoluter Pfad verwendet werden.
%ShadowVolume% Laufwerk, auf dem die zu sichernden Daten liegen. Derzeit wird nur ein Laufwerk verwendet, da auf einem Server alle Daten am besten auf einem Laufwerk zusammengefasst werden.
%ShadowAlias%Unter diesem Laufwerksbuchstaben wird die spätere Schattenkopie zur Verfügung gestellt. Hier muss ein noch nicht belegter Laufwerksbuchstabe angegeben werden.
%ShadowCommand%Dies ist die Batch-Datei, die die eigentliche Archivierung der Daten mit 7z übernimmt.

Im nächsten Schritt wird eine einfache Log-Datei für die aktuelle Sicherung erstellt, in der Anfangs- und Endzeit der Sicherung vermerkt wird:

::Backup Skript
echo Backup %1 started > %Folder%\Backup.log
date /t >> %Folder%\Backup.log
time /t >> %Folder%\Backup.log
echo. >> %Folder%\Backup.log

Die eigentliche Datensicherung erfolgt im nächsten Schritt:

::Create archives
DISKSHADOW /s ShadowRemove.dsh
DISKSHADOW /s Shadow.dsh >> %Folder%\Backup.log
del Backup.cab

Hier wird der DISKSHADOW-Befehl mit zwei Skript-Dateien über den Parameter „/s“ verwendet. Die Skript-Dateien sind einfache Textdateien und haben hier die Erweiterung „.dsh“ als Kennzeichnung. Das erste Skript „ShadowRemove.dsh“ entfernt eine möglicherweise noch vorhandene Schattenkopie. Diese kann z.B. nach einer abgebrochenen Sicherung vorkommen und sollte vor der nächsten Sicherung entfernt werden. Diese Methode führt zu einer robusteren und fehlertolleranteren Datensicherung.

Im zweiten DISKSHADOW-Befehl erzeugt das „Shadow.dsh“ Skript eine Schattenkopie des Laufwerks %ShadowVolume%, stellt diese als Laufwerk %ShadowAlias% zur Verfügung und sichert Dateien auf diesem Laufwerk im Verzeichnis %Folder% mit der Batch-Datei %ShadowCommand%. Alle Ausgaben des DISKSHADOW-Befehls landen in der Log-Datei.

Zum jetzigen Zeitpunkt haben Archiv und Log die Dateinamen „Backup.*“. Daher bietet es sich an, jetzt eine zusätzliche Sicherung auf ein weiteres Medium durchzuführen. Dieses optionale Verfahren dient der Wiederherstellung nach einem gleichzeitigen Totalausfall von Server und Sicherungssystem (Disaster Recovery). Dazu sollte die zusätzliche Sicherung in jedem Fall räumlich getrennt von der täglichen Sicherung ausbewahrt werden. Darüber hinaus sollte es sich immer um die aktuellste Sicherung handeln, damit der Datenverlust möglichst gering ist.

In diesem Beispiel werden die Dateien auf ein räumlich getrenntes NAS-System kopiert:

:: Copy archives to network share (optional)
ren \\Server\Share\Backup\Backup.7z.* Backup.old.7z.*
xcopy %Folder%\Backup.7z.*\\Server\Share\Backup\Backup.7z.* /c /y >> %Folder%\Backup.log
del /q \\Server\Share\Backup\Backup.old.7z.*

Als erstes wird eine bereits existierende Sicherung in „*.old.7z.*“ umbenannt, dann die neue Sicherung kopiert und zuletzt die alte Sicherung gelöscht. Dies Verfahren hat den Vorteil, auch im Fehlerfall keine Sicherung zu verlieren.

Im nächsten Schritt werden die Archivdateien entsprechend dem übergebenen Namen umbenannt. Sollte das Skript ohne Parameter gestartet worden sein, so entfällt dieser Schritt:

::Rename archives
IF "%1" == "" GOTO NORENAME
del /q %Folder%\%1.7z.*
ren %Folder%\Backup.7z.* %1.7z.*
:NORENAME

Zum Schluss wird der Endzeitpunkt der Sicherung im Log vermerkt und die Log-Datei entsprechend umbenannt:

echo. >> %Folder%\Backup.log
date /t >> %Folder%\Backup.log
time /t >> %Folder%\Backup.log
echo Backup %1 finished >> %Folder%\Backup.log

::Rename log
IF "%1" == "" GOTO NORENAMELOG
del /q %Folder%\%1.log
ren %Folder%\Backup.log %1.log
:NORENAMELOG

Das DISKSHADOW-Skript „Shadow.dsh“

„Shadow.dsh“ erzeugt mit dem Befehl DISKSHADOW eine Schattenkopie, stellt diese als Laufwerk zur Verfügung, führt die Sicherung durch und entfernt die Schattenkopie wieder:

#DiskShadow script file
set context persistent
set metadata Backup.cab
set verbose on
begin backup
add volume %ShadowVolume% alias DataVolumeShadow
create
expose %DataVolumeShadow% %ShadowAlias%
exec %ShadowCommand%
delete shadows id %DataVolumeShadow%
end backup
#End of script

Der Befehl „begin backup“ startet den Sicherungsvorgang, mit „add volume“ wird das Laufwerk %ShadowVolume% angegeben, das als Schattenkopie gesichert werden soll, und „create“ erstellt die Schattenkopie. Dabei werden alle Anbieter, wie z.B. SQL Server und Exchange angewiesen, ihre Dateien in einem konsistenten Zustand in die Schattenkopie zu schreiben. Die ShadowID der Schattenkopie wird in der Variablen „DataVolumeShadow“ zur späteren Verwendung zwischengespeichert.

Mit „expose“ wird die Schattenkopie über den Laufwerksbuchstaben %ShadowAlias% zugänglich gemacht.

Im nächsten Schritt ruft das DISKSHADOW-Skript eine weitere Batch-Datei %ShadowCommand% über den Befehl „exec“ auf. Damit werden alle zu sichernden Dateien aus der Schattenkopie in ein 7z-Archiv komprimiert.

Die restlichen Befehle räumen wieder auf, in dem sie die Schattenkopie löschen und das Backup beenden. Eine ausführliche Beschreibung des DISKSHADOW Befehls findet sich in Microsoft’s Technet.

Das DISKSHADOW-Skript „ShadowRemove.dsh“

Das Skript entfernt eine mögliche noch vorhandene Schattenkopie und besteht aus dem Aufräum-Schritt des „Shadow.dsh“ Skriptes:

#DiskShadow script file
delete shadows exposed %ShadowAlias%
#End of script

In %ShadowAlias% wird der Laufwerksbuchstabe der Schattenkopie angegeben.

Archivierung mit 7z in „Daily7z.cmd“

Die Archivierung der Dateien aus der Schattenkopie erledigt 7z in der %ShadowCommand% Batch Datei Daily7z.cmd:

@echo off
"C:\Program Files\7-Zip\7z.exe" a -v2g %Folder%\Backup.7z @Daily.lst
exit 0

In dem verwendeten Befehl werden alle in „@Daily.lst“ angegebenen Verzeichnisse in das mehrteilige Archiv „Backup.7z“ gesichert. Die Größe der Archivteile ist auf zwei Gigabyte beschränkt. Dadurch können die einzelnen Teile auch auf FAT-Laufwerken problemlos gespeichert werden. Die Datei „Daily.lst“ ist eine einfache Textdatei, in der alle Verzeichnisse durch einen Zeilenumbruch getrennt aufgeführt werden:

Q:\Folder1
Q:\Folder2
Q:\Folder3
Q:\Folder...

Manueller Aufruf der „Daily.cmd“ Batch-Datei

Die Batch-Datei kann manuell über die Kommandozeile aufgerufen werden und erwartet als Parameter die Bezeichnung des Backups, z.B. den Wochentag, an dem die tägliche Sicherung ausgeführt wird:

Daily "Montag"

Sollte kein Parameter übergeben werden, wird eine Sicherung mit dem Dateiname „Backup.*“ erstellt.

Automatisierung der Datensicherung über die Aufgabenplanung

Windows Server 2008 stellt mit der Aufgabenplanung einen leistungsfähigen Mechanismus für die regelmäßige Ausführung von Prozessen zur Verfügung:

Aufgabenplanung
Aufgabenplanung
Aktion der Aufgabenplanung
Aktion der Aufgabenplanung

In dem hier verwendeten Beispiel wird für jeden Tag eine Aufgabe mit einer Aktion erstellt, die die Batch-Datei „Daily.cmd“ mit dem entsprechenden Wochentag als Parameter zu einem bestimmten Zeitpunkt startet.

Hierbei sollten Sie beachten, dass je nach Datenmenge und Rechnerleistung die Komprimierung eine erhebliche Zeit in Anspruch nehmen kann und den Server stark auslastet. Daher sollte die Sicherung möglichst zu Zeiten erfolgen, in denen der Server nicht genutzt wird, wie z.B. Nachts.

Diskussion

Das hier vorgestellte Verfahren hat sich bereits seit langer Zeit in der Praxis bewährt. Trotzdem gibt es einige Punkte, die verbesserungswürdig sind: Zum einen handelt es sich hier um eine Vollsicherung. Inkrementelle Sicherungen sind mit diesem Verfahren nur schwer zu realisieren. Eine Möglichkeit wäre der Einsatz von Robocopy statt 7z.

Darüber hinaus wird nicht überprüft, ob das Backup mit den gesicherten Daten übereinstimmt. Dies ist in sofern kein echter Hinderungsgrund, da im Gegensatz zu einem Bandlaufwerk kaum ein Schreibfehler auftreten kann ohne dass die Integrität des 7z Archives beeinträchtigt wird.

Downloads

Sie können alle Batch-Dateien als Zip-Archiv hier herunterladen:

Backup7z.zip1,4 KBAlle Batch-Dateien und Skripte

Weitere Informationen