Hardlink-Backup mit rsync per Volumeschattenkopie unter Windows 7

Ein Backup machen kann richtig nerven!

1. Man muss man es regelmässig machen – immer wenn man mal ein Backup braucht ist die aktuelle Version vom Backup meistens schon zu alt
2. Bei Backup meckern viele Programme das Dateien nicht gelesen werden können da sie gerade von einem anderen Programm benutzt werden
3. Braucht man schnell eine bestimmte Datei muss erst wieder das Backupprogramm starten und die Datei aus dem Backuparchiv wiederherstellen

Mit einem kleinen Script, Windows Boardmitteln und zwei kostenlosten Programmen kann man sich all dies ersparen.
Die Daten kann dann ganz einfach aus dem Verzeichnis des letzten Backups wieder ans Ziel kopieren.
Links zu den Programmen finden Sie am Ende des Beitrags.

Das Script was ich hier vorstelle sichert die Dateien per „Volume Shadow Copy Service“ oder auf deutsch „Volumeschattenkopie“. Dateien können so auch gesichert werden wenn sie gerade geöffnet sind, Outlook.pst von MS-Outlook, die Profile Ordner von Mozilla Firefox oder Mozilla Thunderbird und und und…
Desweitern werden nur die Daten gesichert die sich seit dem letzen Backup geändert haben, der Zugriff auf das komplette Backup wird per Hardlinks aber sehr einfach gehalten.
Dabei wird auch der benötige Speicherplatz gering gehalten. Dateien die sich seit dem letzen Backup nicht geändert haben, werden nicht neu gesichert sondern per Hardlink aus dem vorherigen Backup ins aktuelle Backup eingebunden.

Hier soll als Beispiel den Ordner „d:\daten“ nach „e:\backup\daten“ gesichert werden.
Da im Backup auch alte Versionen erhalten bleiben sollen, wird das Backup dann in „e:\backup\daten\datum_uhrzeit“ erstellt.
Das sieht dann z.B. so aus „e:\backup\daten\2013-06-06_13-03\“.

Zwei externe Programme werden dafür gebraucht, zum einen rsync und zum anderen ShadowSpawn.
rsync ist ein Tool aus der Unix/Linux Welt welches auch nach Windows portiert worden ist. Auf NTFS formatierten Laufwerken hat es die Möglichkeit die erwähten Hartlinks zu erstellen.
Und man braucht noch eine Möglichkeit auf die Volumeschattenkopie von Windows zuzugreifen, das passiert hier per ShadowSpawn.

ShadowSpawn stellen nun das zu sicherde Verzeichnis per Volumeschattenkopie auf einem extra Laufwerksbuchstaben bereit (mountet es) und ruft dann rsync auf, welches die Daten sichert, alte ungeänderte Dateien durch vorherigen Backups verlinkt und nachdem rsync druchgelaufen ist entfernt es das Volumeschattenkopie Laufwerk wieder.
Hierbei muss man zwei Dinge beachten

-Das Script muss Administratoren Rechten aufgerufen werden, sonst ist kein Zugriff auf die Volumeschattenkopie möglich
-Es muss ein Laufwerksbuchstabe frei sein der im Script benutzt wird

Das Script wird später von Windows per „Aufgabenplaung“ mit Admin-Rechten aufgerufen, auf Wunsch kann man noch ein Link auf den Desktop anlegen um das Backup per Hand zu starten… später dazu mehr.
Und wir arbeiten mit dem Laufwerksbuchstaben t:, sollte der nicht frei sein, muss das Script und entsprechend angepasst werden. Es ist nur wichtig das dieses Laufwerk nicht existiert wenn das Script gestartet wird.
Kommen wir nun zum Script:

@echo off
rem setze Variablen fuer Jahr, Monat, Tag, Stunde und Minute
set jahr=%date:~6,4%
set monat=%date:~3,2%
set tag=%date:~0,2%
set stunde=%time:~0,2%
if "%stunde:~0,1%"==" " set stunde=0%stunde:~1,1%
set minute=%time:~3,2%
rem Backup von e:\Daten nach e:\backup\daten\
Set /p last_run= < e:\backup\daten\last.txt
ShadowSpawn.exe d:\daten t: rsync -rltDv --link-dest=/cygdrive/e/backup/daten/%last_run% /cygdrive/t/* /cygdrive/e/backup/daten/%jahr%-%monat%-%tag%_%stunde%-%minute%
echo %jahr%-%monat%-%tag%_%stunde%-%minute% > e:\backup\daten\last.txt

Der erste Teil ermittel per Set Befehle das aktuelle Datum und formatiert es so, das wir damit arbeiten können, es soll ja im Format 2013-06-06_13-03 erscheinen.

Dieser Teil kann so übernommen werden.

Set /p last_run= < e:\backup\daten\last.txt
Hier liest das Script die Datei e:\backup\daten\last.txt aus und weiss so wann das Backup zum letzen Mal gestarten worden ist, und auf welche alte Version es eventuelle Hardlinks erstellen soll.

ShadowSpawn.exe d:\daten t: rsync -rltDv –link-dest=/cygdrive/e/backup/daten/%last_run% /cygdrive/t/* /cygdrive/e/backup/daten/%jahr%-%monat%-%tag%_%stunde%-%minute%
Im ersten Teil, „ShadowSpawn.exe d:\daten t:“ wird hier das Verzeichnis d:\daten unter Laufwerksbuchstaben t: bereitgestellt, und war durch die Volumeschattenkopie.
Danch ruft ShadowSpawn rsync auf, welches dann das Backup erstellt.

Die Optionen, hier „-rltDv“, kann man sich per Aufruf von „rsync –help“ anzeigen lassen.
–link-dest=/cygdrive/e/backup/daten/%last_run% sagt rsync wo es nach dem letzen Backup schauen soll um dann eventuelle Hardlinks zu erstellen. %last_run% wurde aus der Datei last.txt ausgelesen.
/cygdrive/t/* ist das aktuelle Laufwerk von ShadowSpawn per Volumeschattenkopie bereitgestellt welches gesichert werden soll.

/cygdrive/e/backup/daten/%jahr%-%monat%-%tag%_%stunde%-%minute%  ist der Pfad wohin das Backup geschreiben werden soll.

Was man beachten muss, rsync kennt keine Laufwerksbuchstaben und Verzeichnisse wie c:\windows\ oder d:\daten\, sondern es arbeitet mit dem / aus der *nix Welt, wie auch z.B. der Webbrowser.
Den aktuellen Rechner spricht es per /cygdrive/ an, /cygdrive/c/ wäre dann c:\, /cygdrive/c/windows/ wäre c:\windows\, /cygdrive/d/daten/ ist also das Verzeichnis d:\daten, welches wir hier sichen wollen.

Im letzen Schritt schliesslich wird Datum und Uhrzeit des aktuellen Backup in der Datei last.txt gespeichert.

Zuletzt lassen wir das Script durch die Aufgabenplaung von Windows 7 mit Admin-Rechten starten.
Das kann zu festgelegten Zeiten erfolgen, wobei Windows das Backup auch nachholen kann – z.B. wenn das Script immer um 00:00 Uhr laufen soll, der PC zu diesen Zeitpunkt aber ausgeschaltet war.
Das Anlegen einer Verknüfung auf dem Desktop ist auch Möglich um das Script mal ebend schnell selbst zu starten.

Dazu tippt man einfach „aufgab“ in die Eingabezeile von Windows 7, das sucht dann den passenden Eintrag „Aufgabebplanung“ heraus.
aufga
Das Starten der Aufgabenplaung muss dann vom Benutzer bestätigt werden, da man dazu Admin-Rechte benöigt. Dann erstellt man eine neue Aufgabe
neue_aufgabe
Das Backup-Script wird im Beispiel hier unter C:\Programme\Scripte\vss_backup.cmd gespeichert.
Die Aufgabe soll auch vss_backup heissen, den Namen brauchen wir später noch um das Backup selbst aufrufen zu können.
mit_rechten
Hier ist wichtig, das das Script mit erhöhten Rechten ausgeführt wird.
Unter Trigger legt man fest wann das Script gestartet werden soll.
triggerUnter Aktionen wird festgelegt was gemacht werden soll, also das Backup Script wird aufgerufen.
aktionenUnter Einstellungen kann man noch festlegen das das Ausführen des Scriptes auch nachgeholt werden darf.
nachholenJetzt kann man noch eine Verknüpfung zu dem Script auf den Desktop oder im Startmenü erstellen.
Dazu wird eine neue Verknüpfung zu der Datei c:\windows\system32\schtasks.exe erstellt.
Dort müssen noch 3 Optionen angehängt werden.
link_erstellen/run /TN und „vss_backup“ oder wie man das Script sonst in der Aufgabenplaung genannt hat.
Dann sollte der Backup auch per Doppelklick und ohne Admin-Recht abfrage aufrufbar sein.

Viel Spass beim Backup.

Links zum Thema:
Volume Shadow Copy Service bei de.Wikipedia.org
rsync für Windows
ShadowSpawn