Mittwoch, 3. August 2011

Inkrementelles Backup mit optionaler Verschlüsselung

"Das einzige Backup, das man je brauchen wird, ist das, welches man nicht gemacht hat." 
Dieser Satz dürfte dem ein oder anderen bekannt sein - zu Recht. Damit ihr das Problem fehlender Backups ab sofort nicht mehr bekommen könnt, zeige ich euch heute, wie man unter Windows 7 mit einem minimalen Batchscript ein vollautomatisches, inkrementelles Backup einrichtet, welches auf einer verschlüsselten Festplatte/Partition angelegt wird. Die Verschlüsselung kann natürlich auch weggelassen werden.
Die Anleitung sollte auch auf Windows Vista und Windows XP ähnlich funktionieren.



"Inkrementell" heißt in diesem Fall, dass nur seit dem letzten Backup geänderte Dateien oder neue Dateien ins Backup kopiert werden, und Dateien, welche auf dem Computer in der Zwischenzeit gelöscht wurden, auch auf dem Backup entfernt werden. Hierdurch ist es möglich, dass ein Backup, wenn es regelmäßig ausgeführt wird, am Tag nur wenige Minuten benötigt.

Mein Setup:

Auf meiner Festplatte befinden sich 2 Partitionen, die unbedingt gesichert werden müssen, da sich darauf sämtliche wichtigen Daten befinden. Auch die Nutzerdaten aus C:/ habe ich hierhin verschoben, weshalb ich keine Sicherung von C:/ benötige. Solltet ihr dies nicht getan haben, solltet ihr die wichtigsten Ordner innerhalb C:/ suchen (vermutlich euer Benutzerordner) und diesen ebenfalls in das Backup aufnehmen. Ich rate davon ab komplett C:/ zu sichern, da die meisten Daten darauf eh nicht wiederverwendet werden können, und unnötig Platz und Zeit verbrauchen.

Gesichert werden müssen bei mir also die Partitionen Y:/ und M:/. Beide sind zwar verschlüsselt, werden jedoch bereits bei Systemstart entschlüsselt, weshalb wir uns darum nicht weiter kümmern brauchen.
Das Backup soll auf einer externen Festplatte angelegt werden, welche voll verschlüsselt ist. Diese Festplatte soll zudem vom Backupscript automatisch eingebunden und entschlüsselt werden. (Das Passwort speichere ich aus Sicherheitsgründen nicht in dem Backupscript, sondern lasse mich zur Eingabe auffordern, das kostet keine 20 Sekunden am Tag, verhindert aber dass jemand das Passwort aus dem Script ausliest, da es dort im Klartext vorhanden wäre.)
Zudem muss vorher sichergestellt sein, dass die externe Festplatte überhaupt angeschlossen ist, weshalb ich noch eine Benutzerinteraktion erfordere, bevor das Backup gestartet wird.
Auf der externen Festplatte soll für jede meiner Partitionen ein Ordner angelegt werden, in den der Inhalt der jeweiligen Partition gespeichert wird.

Das Script:


Vorbereitungen:
Zuerst lege ich eine leere Batchdatei an. Diese speichere ich unter "Y:\batchscripts\Backupscripts\Backup-ext.bat". Diese öffne ich mit einem Texteditor, in meinem Fall mit Notepad++.

In die 1. Zeile schreibe ich
@echo off
um die Ausgaben auf ein Minimum zu begrenzen.
Als nächstes möchte ich eine Aufforderung einbauen, die mich daran erinnert die Festplatte, auf der die Sicherung gespeichert werden soll, anzuschließen bzw. einzuschalten:
echo "Bitte die externe Festplatte anschließen, wenn noch nicht geschehen, und anschließend beliebige Taste drücken."
PAUSE
Das "PAUSE" hält das Script an dieser Stelle solange an, bis der User eine Taste drückt. Möchte man das Backup zu diesem Zeitpunkt nicht machen, kann man einfach das Konsolenfenster schließen, dann wird das Script beendet.

Die Verschlüsselung:
Nun soll das Script, falls noch nicht geschehen, die externe Festplatte entschlüsseln. Soll keine Verschlüsselung verwendet werden, kann dieser Schritt einfach weggelassen werden.
Ich gehe davon aus dass die Verschlüsselung bereits eingerichtet ist, und ihr wisst, wie ihr diese Fesplatte manuell mounten könnt. Wir benötigen den Devicepfad für diesen Schritt, welchen Ihr in Truecrypt seht, wenn ihr "Select Device" auswählt. In meinem Fall kann ich die Partition immer mit "\Device\Harddisk2\Partition2" ansprechen, dies müsst ihr vermutlich anpassen.
Außerdem müssen wir die Partition immer auf den selben Buchstaben mounten, um sicherzustellen, dass das Script anschließend damit arbeiten kann.
 Ihr solltet euch also einen freien Laufwerksbuchstaben aussuchen, den ihr nur hierfür verwendet. Ich benutze Q:\ für die externe Festplatte.
Desweiteren müsst ihr den Pfad zu eurem Truecrypt Programm suchen, standardmäßig müsste das "C:\Program Files\TrueCrypt\truecrypt" sein, sollte dieser bei euch abweichen, muss auch dieser angepasst werden.
Der Befehl für die nächste Zeile lautet bei mir also:

IF NOT EXIST Q:\ "C:\Program Files\TrueCrypt\truecrypt" /lq /v \Device\Harddisk2\Partition2 /q
Der Laufwerksbuchstabe (Q bei mir), auf den die Festplatte gemountet wird, muss hier an 2 Stellen angepasst werden:
1. nach "EXIST" das Q:\
2. der Parameter "/lq", das q muss durch euren Buchstaben ersetzt werden.

Das Backup:
Nun widmen wir uns dem Backup der Daten. Für jeden Ordner, oder jede Partition, die gesichert werden soll, wird ein eigener Befehl verwendet, sowie ein eigener Ordner auf dem Ziellaufwerk angelegt. Zum kopieren verwende ich das Kommandozeilenprogramm "robocopy" welches bereits Bestandteil von Windows ist.

Meine erste Partition, die ich sichern möchte, ist Y:\, diese soll nach Q:\Y\ gesichert werden. (Das Q:\ muss angepasst werden, an den Buchstaben den ihr zum mounten verwendet habt, oder an den Laufwerksbuchstaben der externen Festplatte, wenn die Verschlüsselung übersprungen wurde).
Außerdem möchte ich ein paar Dateien und Verzeichnisse vom Backup ausschließen, und eine Logdatei anlegen.

Mein Befehl lautet demnach:

IF NOT EXIST Q:\Y\ MKDIR Q:\Y\
ROBOCOPY Y:\ Q:\Y\ /MIR /XJ /R:1 /W:1 /TEE /NC /NP /NS /NFL /NDL /A-:HS /X /FP /LOG:Y:\batchscripts\Backup_y.log /XF pagefile.sys /XD "$RECYCLE.BIN" "System Volume Information"
Die 1. Zeile kümmert sich darum, dass der Zielordner angelegt wird, wenn noch nicht geschehen.
Die ersten 2 Paramater (Y:\ Q:\Y\) die Robocopy erhält, müssen wieder an die zu sichernde Partition/Ordner, und deren Ziel angepasst werden.
Das Ziel der Logdatei wird mit /LOG:Y:\batchscripts\Backup_y.log angegeben,soll keine angelegt werden, kann dieser Teil entfernt werden.
Mit /XF pagefile.sys wird die unsichtbare Systemdatei "pagefile.sys" ausgeschlossen, welche sich auf jeder Partition befindet.
Mit /XD "$RECYCLE.BIN" "System Volume Information" werden 2 unsichtbare Systemordner ausgeschlossen, welche ebenfalls eine Menge Datenmüll enthalten, den wir nicht im Backup haben möchten.
Die Bedeutung der anderen Parameter, welche ich bei robocopy verwende, findet ihr in der (englischsprachigen) Dokumentation.

Das selbe wiederhole ich für die 2., zu sichernde Partition:
IF NOT EXIST Q:\M\ MKDIR Q:\M\
ROBOCOPY M:\ Q:\M\ /MIR /XJ /R:1 /W:1 /TEE /NC /NP /NS /NFL /NDL /A-:HS /X /FP /LOG:Y:\batchscripts\Backup_m.log /XF pagefile.sys /XD "$RECYCLE.BIN" "System Volume Information"
Optional: Zeiten loggen
Zuletzt möchte ich noch eine Möglichkeit haben, auf dem Backup nachzusehen, wann die letzte Aktualisierung stattgefunden hat. Hierzu speichere ich nach jedem Backup einfach aktuelles Datum und Zeit in eine Textdatei auf dem externen Datenträger:
echo Letztes Backup: %date% %time%. >> Q:\backuplog.log
Wenn das Konsolenfenster nach erfolgreichem Backup einfach geschlossen werden soll, ist man nun fertig. Möchte man jedoch eine Anzeige über Anzahl kopierter Dateien (diese Anzeige erzeugt robocopy automatsich) und/oder eine Nachricht, dass das Backup erfolgreich war, kann man noch folgende 2 Zeilen ans Ende hinzufügen:
echo Backup erstellt!
PAUSE

Möchte man jetzt ein Backup erstellen, kann man einfach dieses Batchscript starten (Doppelklick im Explorer).
Wie man dieses Backup regelmäßig (z.B. einmal täglich/wöchentlich) automatisch starten lassen kann, beschreibe ich im folgenden Abschnitt.


Automatisierung:


Windows bietet ein praktisches Tool zur Automatisierung solcher Scripte: Den Aufgabenplaner.
Unter Windows 7 muss man einfach im Startmenü in das Textfeld "Aufgaben" eingeben, und erhält als Vorschlag anschließend "Aufgaben planen", welches man anklickt. Unter Vista und XP heißt das Tool ähnlich, und sollte in Zubehör oder in der Systemsteuerung zu finden sein.

In der Aufgabenplanung wählen wir am rechten Rand "Einfache Aufgabe erstellen" aus.
Es öffnet sich ein Fenster, in welchem ein Name und eine Beschreibung der Aufgabe gefordert wird. Ich wähle "Backup" als Name, und lasse die Beschreibung leer.
Nach einem Klick auf weiter wird der "Trigger" abgefragt, also die Aktion welche das Script auslösen soll. Ich wähle "täglich", da ich das Script jeden Tag starten lassen möchte. (Ihr könnt natürlich auch wöchentlich oder etwas anderes wählen)
Wieder nach einem Klick auf "Weiter" werde ich noch nach einer Uhrzeit gefragt, an der ich das Script immer starten möchte. Diese wähle ich aus und klicke auf Weiter, um bei "Aktion" zu landen.
Dort wähle ich "Programm starten", und werde anschließend nach dem Programm und Argumenten gefragt. Als Programm müssen wir cmd.exe angeben, da es sich um ein Konsolenscript handelt. Als Argument gebe ich an:
/c Y:\batchscripts\Backupscripts\Backup-ext.bat

das /c ist zwingend erforderlich, danach wird der Pfad zum Backupscript angegeben, der bei euch vermutlich angepasst werden muss. (Siehe Schritt "Vorbereitung")

Anschließend nur noch auf "Weiter" und dann auf "Fertigstellen" klicken, und schon ist die Aufgabe angelegt.
Es wird jetzt immer zu der festgelegten Zeit das Script gestartet.

Somit vergesse ich nun nicht mehr ein Backup anzulegen, und habe so gut wie keine Arbeit damit.

Ich hoffe dem ein oder anderen kann dieser Beitrag helfen, seine Backups zu automatisieren.
Fragen stellt einfach in den Kommentaren, wie immer ;)

Keine Kommentare:

Kommentar veröffentlichen