Anbei ein Beispiel-Skript, wie man mit Hilfe der Tools weekday.exe, smtpsend.exe und der Software Drive Snapshot eine automatische Datensicherung realisieren kann.
Eine neuere Version des Skripts ist hier verfügbar!
@echo off rem Fenstertitel anzeigen title Datensicherung... rem Netzlaufwerk verbinden net use V: \\BACKUPSERVER\backup KENNWORT /user:BENUTZERNAME /persistent:no rem Woche Auslesen set /p week=< week.txt if %week%==1 set week=1 if %week%==2 set week=2 rem Tag Auslesen weekday.exe > day.txt set /p weekday=< day.txt rem Sicherungsart/Tag für die Voll-Sicherung festlegen if %weekday%==Monday goto full goto diff rem Voll-Sicherung :full snapshot.exe C: V:\Backup\%computername%\Full-%week%-%weekday%-$disk.sna -oV:\Backup\%computername%\Full-%week%-$disk.hsh -RWT -L307200 > %week%-%weekday%.txt goto email rem Differentielle-Sicherung :diff snapshot.exe C: V:\Backup\%computername%\Diff-%week%-%weekday%-$disk.sna -hV:\Backup\%computername%\Full-%week%-$disk.hsh -RWT -L307200 > %week%-%weekday%.txt rem Wochenwechsel if %weekday%==Sunday goto week-change goto email :week-change if %week%==1 echo 2 > week.txt if %week%==2 echo 1 > week.txt rem E-Mail :email smtpsend.exe -fABSENDER -tEMPFÄNGER -hMAILSERVER -sBackup -i%week%-%weekday%.txt -lBENUTZERNAME -lKENNWORT goto end :end rem Netzlaufwerk trennen net use V: /d
Erklärung
Das Skript wird als Geplanter Task eingebunden. Ausgeführt wird es immer täglich um 22:00 Uhr.
Die Sicherungen werden auf einem Backup-Server gespeichert.
Montags wird die Vollsicherung erstellt. Dienstag bis Sonntag werden differentielle Sicherungen erstellt.
Es handelt sich um eine Rotationssicherung, d.h. es gibt immer die aktuelle Woche und eine vorherige Woche.
Das Limit für eine Sicherungsdatei, bevor gesplittet wird, ist auf 300 GB festgelegt.
Zum Schluss wird das aktuelle Protokoll via E-Mail versendet.
Update 16.08.2012
Norbert hat mir per E-Mail seine Version einer Rotationssicherung mit Drive Snapshot zukommen lassen. Am besten gefällt mir folgende Vereinfachung:
set numberOfWeeksToKeep=4 set /A week=week %% numberOfWeeksToKeep + 1
Diese zwei kleinen Zeilen stellen (natürlich) nur einen kleinen Teil dar, aber dadurch wird es erheblich einfacher, das Skript anzupassen.
Nachfolgend der Download des gesamten Skripts:
runSnapshot.txt (Von *.txt in *.cmd umbenennen.)
So oder so müssen die Skripte für die eigene Umgebung und Anforderung angepasst werden.
Danke an Norbert für das Skript und die Änderungen.
Einen Teil der Änderungen übernehme ich bereits bei einem Kunden.
Verheiratet, Vater von zwei Kindern, eines an der Hand, eines im Herzen. Schon immer Technik-Freund, seit 2001 in der IT tätig und seit über 10 Jahren begeisterter Blogger. Mit meiner Firma IT-Service Weber kümmern wir uns um alle IT-Belange von gewerblichen Kunden und unterstützen zusätzlich sowohl Partner als auch Kollegen.
Hallo Andy,
vielen Dank für Deinen ausführlichen Artikel.
Wollte Dein Script für mich umfunktionieren aber bisher ohne Erfolg vielleicht kannst Du mir dabei helfen.
Hier mein Anliegen:
1. Die Sicherungen sollen auf G:\Sicherung gespeichert.
2. Sonntags wird die Vollsicherung erstellt.
3. Montag bis Samstag sollen differentielle Sicherungen erstellt.
4. Sicherung möglichst für 3 Wochen
5. Das Limit für eine Sicherungsdatei, bevor gesplittet wird, ist auf 300 GB festgelegt.
6. Zum Schluss wird das aktuelle Protokoll via E-Mail versendet.
Möglicherweise ist das auch für andere User interessant.
Viele Grüße
Klaus
Hallo Klaus,
das ist ja alles auf Grundlage meines Skripts machbar. Wo kommst du denn nicht weiter?
Handelt es sich bei Laufwerk G: um ein Netzlaufwerk oder lokales bzw. USB-Laufwerk?
Bei den Punkten 5 und 6 ist das ja bereits so, wie du es brauchst.
Hallo Andy,
habe alles mögliche probiert und am Ende klappte nichts mehr.
Laufwerk G:\ ist meine externe USB Festplatte.
Habe Drive Snapshot zum booten auch schon auf meinen Rettungsstick mir fehlt nur noch das richtige Script.
Gruß Klaus
Ich gehe mal davon aus, das du die Tools weekday.exe und smtsend.exe wie im Artikel beschrieben heruntergeladen und im gleichen Ordner wie Drive Snapshot und das Skript hast.
Auf die schnelle angepasst, aber ungetestet sieht das Skript dann so aus (Der E-Mail-Teil muss natürlich mit deinen Angaben konfiguriert werden):
@echo off
rem Fenstertitel anzeigen
title Datensicherung...
rem Woche Auslesen
set /p week=< week.txt if %week%==1 set week=1 if %week%==2 set week=2 if %week%==3 set week=3 rem Tag Auslesen weekday.exe > day.txt
set /p weekday=< day.txt rem Sicherungsart/Tag für die Voll-Sicherung festlegen if %weekday%==Sunday goto full goto diff rem Voll-Sicherung :full snapshot.exe C: G:\Sicherung\%computername%\Full-%week%-%weekday%-$disk.sna -oG:\Sicherung\%computername%\Full-%week%-$disk.hsh -RWT -L307200 > %week%-%weekday%.txt
goto email
rem Differentielle-Sicherung
:diff
snapshot.exe C: G:\Sicherung\%computername%\Diff-%week%-%weekday%-$disk.sna -hG:\Sicherung\%computername%\Full-%week%-$disk.hsh -RWT -L307200 > %week%-%weekday%.txt
rem Wochenwechsel
if %weekday%==Saturday goto week-change
goto email
:week-change
if %week%==1 echo 2 > week.txt
if %week%==2 echo 3 > week.txt
if %week%==3 echo 1 > week.txt
rem E-Mail
:email
smtpsend.exe -fABSENDER -tEMPFÄNGER -hMAILSERVER -sBackup -i%week%-%weekday%.txt -lBENUTZERNAME -lKENNWORT
goto end
:end
erst mal vielen Dank für Deine Hilfe.
Momentan läuft es noch nicht, werde mich am Mittwoch nochmals daransetzen.
Danke Klaus
Bis zu welcher Stelle kommst du denn?
Also ich hab’ das mal auf die Schnelle unter Windows XP getestet. Bei mir läuft es wie erwartet. Vielleicht ist irgendeine Voraussetzung noch nicht erfüllt. Starte mal alle *.exe-Dateien per Hand, und deaktivier evtl. Sicherheitswarnungen von Windows (Haken rausnehmen, damit die Meldung nicht noch mal kommt). Ferner muss am Ziel, also “G:\Sicherung” ein Ordner mit dem Computernamen existieren ODER man das Skript entsprechend abändern (“\%computername%” entfernen). Du hast ja geschrieben, das du die Tools auf einem Rettungsstick hast. Evtl. stimmt der Laufwerksbuchstabe nicht. Bei Boot-CDs/DVDs/Sticks ist die Laufwerkszuordnung mitunter anders, als es im normalen Windows-Betrieb der Fall ist. Dann bleibt noch die Frage, welche Windows-Version gesichert wird. Ab Windows Vista gibt es da noch zusätzlich eine 100 MB große “System-reserviert”-Partition, die man ebenfalls mitsichern sollte.
Hallo Andy,
hier mein Fehler
rem Woche Auslesen
set /p week=< week.txt
"Das System kann die angegebene Datei nicht finden"
Hier komme ich leider nicht weiter.
Ist doch richtig es als *.cmd abzuspeichern und irgendwie (habe noch keine Ahnung wie ?) als Task einzubinden.
Wann und wie löscht Du die alten Daten ??
Gruß Klaus
Die Datei “week.txt” gibt es in deinem Ordner? Falls nein, einfach mit Notepad anlegen, eine “1” reinschreiben und abspeichern.
Alte Daten, sofern du die Backups meinst, braucht man nicht zu löschen, da Drive Snapshot Diese überschreibt, wenn wieder z.B. Woche Nr. 1 mit Tag “Monday” kommt.
Hallo Andy,
vielen Dank – nun läuft alles sauber durch.
Gibt es die Möglichkeit daß nur die diif’s überschrieben werden und 3 full’s stehen bleiben ?
Gruß Klaus
Kleine Ursache, große Wirkung 😉
Als Schnellschuss könnte man einfach das Full-Backup (Voll-Sicherung) auskommentieren, dazu einfach im entsprechenden Abschnitt ein “rem” für snapshot.exe setzen.
Es müsste aber erstmal die drei Vollsicherungen geben. Nachteil dieser Methode ist aber, das von Woche zu Woche (und in Abhängigkeit der Änderungen) die Diff-Sicherungen immer größer werden!
rem Voll-Sicherung
:full
REM snapshot.exe...
Erst mal vielen Dank werde am Wochenende weiterprobieren.
Hallo Andy,
ich will nun einen neuen Versuch starten.
Meine Wunschvorstellung wäre folgende:
1. Nach 3 FullBackups wird das jeweils älteste mit delage gelöscht
http://www.horstmuc.de/win/delage-de.htm
2. Die DiffBackups werden nach einem FullBackup ebenfalls gelöscht.
3. Mein modifizierter Full Aufruf:
snapshot.exe C: F:\Backup\Full-%date%-%weekday%-%computername%-$disk.sna -oF:\Backup\Full-%date%-$disk.hsh -RWT -L307200 > %date%-%weekday%.txt
Irgendwie komme ich nun nicht mehr weiter ??
Kannst Du mir nochmals “Unter die Arme greifen” ??
Gruß Klaus
Das Tool “delage” kenne ich nicht. Damit muss ich mich erstmal auseinandersetzen und das kann dauern, hab’ da grad ein Projekt am köcheln.
Sicherst du nun doch nicht nach “G:\Sicherung”?
Fehlermeldung?
Hallo Andy,
set “Ordner=F:\Backup”
::: Löschen mit for /f geht unter FoxproW nicht
:: http://www.horstmuc.de/win/delage-de.htm
DelAge32 %Ordner%\*.* 15
Bin wegen der Platzprobleme auf F:\umgestiegen.
Gruß Klaus
Sorry, aber mit dieser Antwort kann ich gerade nicht viel anfangen.
Also F:… ist klar.
set “Ordner=F:\Backup” <- Das soll wohl die Variable für das Backup-Ziel sein?!
Dann müsste die Zeile für Drive Snapshot quasi so anfangen:
snapshot.exe C: %Ordner%\Full….
Was ist damit?
::: Löschen mit for /f geht unter FoxproW nicht
:: http://www.horstmuc.de/win/delage-de.htm
DelAge32 %Ordner%\*.* 15
Wie gesagt, das Tool kenne ich nicht. Ist dein Problem gerade wegen der Variablen und DelAge?
Ich kann jetzt nur raten, aber vielleicht muss die Variable für DelAge ebenfalls in Anführungszeichen gesetzt werden:
DelAge32 "%Ordner%\*.*" 15
Zumindest in meinem Schnelltest hat's erst so funktioniert. Vorher gab's immer die (Fehler-)Meldung: "DelAge32 – Age (number of days) required".
Ich habe es jetzt allerdings nicht in Verbindung mit Drive Snapshot getestet, sondern einfach nur mit ein paar alten Dateien in einem Test-Ordner.
Sorry ich habe mich wohl etwas undeutlich ausgedrückt.
Bin zum löschen nur auf delage umgestiegen weil ein 16 bit Programm mit der for /f Klausel nicht klar kam.
DelAge32 F:\Backup\Full*.* 4
Gruß Klaus
OK.
16 bit, holy shit, das ist ja richtig old school.
Mit dem DelAge32-Befehl willst du nun die alten Full-Backups löschen?
So wie das jetzt da steht, werden alle Dateien mit Full… die älter als 4 Tage sind gelöscht.
In meinen Schnelltest ist das zumindest so.
Hallo Andy,
dein Script ist toll und funktioniert gut, nur leider der Versand der E-mail mit dem Protokoll am Ende klappt nicht. Als Absender gebe ich meinen Namen oder eine E-Mail-Adresse, Empfänger eine meiner E-Mail-Adressen, als Mail-Server den pop3-Server des E-Mail-Anbieters, dann Benutzer und Passwort – klappt aber nicht.
Gerne würde ich auch im Script einen bestimmten Ordner von der Sicherung ausschließen – geht das
Danke und Gruß
Carl
Hi Carl,
erstmal danke.
Absender und Empfänger sind immer E-Mail-Adresse, bei Mailserver den SMTP-Server des Anbieters.
Das Ausschließen von Ordner und Dateien ist auch recht einfach, muss man nur in die snapshot.exe-Zeile integrieren.
Schau dazu mal hier:
http://drivesnapshot.de/de/commandline.htm
Komfortabler ist es, eine Variable zu definieren und Diese dann in die snapshot.exe-Zeilen zu integrieren. So muss man nicht alles doppelt machen.
Hallo Andy,
vielen Dank für deinen Tipp. Ich habe noch relativ wenig Erfahrung mit Scripten und Kommandozeile. Daher meine Frage: Wie und wo genau füge ich dieses exclude usw. in die Zeile ein?
Also ich sichere Laufwerk “E”, darin befindet sich der Ordner “VMs” (virtuelle Maschinen, die viel Platz brauchen), den ich samt Unterordner und Inhalt von der Sicherung ausschließen möchte. Ich Sichere in den Pfad “G:\Backup\Daten\”.
Grüße
Carl
Zum einen müssen die zwei Zeilen, die mit “snapshot.exe C:…” von “C:” auf “E:” geändert werden.
Ferner muss aus “V:\” “G:\Backup\Daten\” gemacht werden.
In den gleichen Zeilen fügst du “–exclude:%ex%” vor (!) ” > %week%-%weekday%.txt” ein.
Unterhalb von “@echo off” fügst du folgende Zeile ein:
set ex=”\Vms”
Damit wird eine neue Variable definiert, die dazu benutzt wird, sowohl bei der Voll- als auch bei der differentiellen Sicherung den Ordner auszuschließen.
Bei den Zeilen, die mit “net use…” beginnen, stellst du ein “REM” voran, damit werden diese Befehle auskommentiert.
Hallo Andy,
das sichern klappt wunderbar nur die E-Mail kommt aus irgendeinem Grund nicht an??
Was mache ich falsch?
Absender “cpn2@gmx.de” Empänger “cpn2@gmx.de” Smtp-Mail-Server “mail.gmx.net” Benutzername “mein E-Mail-Konto-Benutzername” Passwort “mein E-Mail-Konto-Passwort”
Ist doch richtig oder?
Danke und Grüße
Carl
Sieht prinzipiell schon mal gut aus. Was bekommst du denn für eine Fehlermeldung von smtpsend.exe?
Ich kann keine Fehlermeldung erkennen. Die Konsole schließt sich sofort und so schnell nach Beenden des Sicherungsauftrags, dass man nichts erkennen kann.
Hier nochmal die letzten Zeilen meines Skriptes:
.
.
.
rem E-Mail
:email
smtpsend.exe -fcpn2@gmx.de -tcpn2@gmx.de -hmail.gmx.net -sBackup -i%week%-%weekday%.txt -lMEINMAILKONTOBENUTZER -lMEINMAILKONTOPASSWORT
goto end
:end
Hm, sieht erstmal soweit gut aus, aber ich weiß grad nicht, ob GMX vor dem Mailversand erstmal eine POP-Abfrage (SMTP-after-Pop3) haben möchte.
Alternativ kannst du die smtpsend-Zeile aus dem Skript kopieren und direkt in der Eingabeaufforderung in dem Ordner wo sich die smtpsend.exe befindet ausführen. Da sollte dann auf jeden Fall eine Meldung zu sehen sein. Oder du hängst an die smtpsend-zeile mal ” > mailreport.txt” an und lässt mal das backup-skript laufen und prüfst dann den Inhalt der mailreport.txt.
Vielleicht hilft das noch weiter:
http://faq.gmx.de/messages/email/optionen/sicherheit/1.html
Hi Andy, jetzt klappt alles.
Ich Blödmann hatte einen Tippfehler in der E-Mail-Zeile, was bisher nicht gemerkt hatte. (Tja, wer lesen kann ist eindeutig im Vorteil!)
Vielen Dank für alles!
Grüße
Carl
Kleine Ursache, große Wirkung. Freut mich das es nun klappt.
Hallo,
erstmal danke für das Skript! Ich hab es ein wenig erweitert und vereinfacht um es variabler einsetzbar und stabiler zu machen.
Konkret hatte ich Probleme mit der Anzahl der Wochen die gesichert werden sollen (wenn sich das ändert ist an mehreren Stellen was anzupassen) sowie mit dem Tag an dem das Full-Backup passieren soll. Da ist es so, dass der week-Wechsel unbedingt mit dem Full-Backup zusammen fallen muss weil sich sonst die Diff-Backups auf eine nicht vorhandene Hashdatei aus dem Full-Backup bezieht. Gefährliche Falle weil an 2 Stellen – bei der Entscheidung ob ein Full- oder Diff- Backup gemacht werden soll sowie beim Wochenwechsel – die Tage richtig angepasst werden müssen, und ein Fehler erstmal nicht auffällt…
Deshalb habe ich den oberen Teil des Skripts folgendermaßen angepasst:
@echo off
rem Fenstertitel anzeigen
title Datensicherung...
rem Parameter und Pfade setzen
set numberOfWeeksToKeep=4
set fullBackupDay=Monday
set targetDrive=V:
set targetDir=%targetDrive%\Backup\%computername%
rem Netzlaufwerk verbinden
net use %targetDrive% \\BACKUPSERVER\backup KENNWORT /user:BENUTZERNAME /persistent:no
rem Woche und Tag auslesen (and remove any spaces)
set /p week= day.txt
set /p weekday= week.txt
snapshot.exe C:+E: %targetDir%\...
goto email
rem Differentielle-Sicherung
:diff
...
rem E-Mail
:email
...
Der Abschnitt 'Wochenwechsel' aus dem Originalskript entfällt, da schon in :full mit eingebaut
Damit brauchts den etwas seltsamen und vor allem nicht für verschiedene Anzahl von Wochen geeigneten Code für das Setzen und Inkrementieren des week-Wertes nicht mehr, und die Gefahr von Inkonsistenzen bei Full-Backup und week-Wechsel ist auch weg.
Vielleicht kann’s ja noch jemand brauchen…
Oups, leider ist vom Code einiges verschluckt worden. Hier nochmal ohne Code-Tag, vielleicht klappts da besser…
@echo off
rem Fenstertitel anzeigen
title Datensicherung…
rem Parameter und Pfade setzen
set numberOfWeeksToKeep=4
set fullBackupDay=Monday
set targetDrive=V:
set targetDir=%targetDrive%\Backup\%computername%
rem Netzlaufwerk verbinden
net use %targetDrive% \\BACKUPSERVER\backup KENNWORT /user:BENUTZERNAME /persistent:no
rem Woche und Tag auslesen (and remove any spaces)
set /p week= day.txt
set /p weekday= week.txt
snapshot.exe C:+E: %targetDir%\…
goto email
rem Differentielle-Sicherung
:diff
…
rem E-Mail
:email
…
Sorry, es scheint der Inhalt zwischen einem kleiner- und einem größer- Zeichen zu verschwinden. Meine letzten beiden Posts sind dadurch leider unbrauchbar, sorry 🙁
Vielleicht kannst du nochmal das ganze Skript posten oder per Mail schicken.
Im Moment fehlt mir irgendwie der Durchblick bei der Modifikation.
Kein Thema. Das passiert leider bei der Kommentarfunktion von WP. Ist halt nicht so ohne weiteres drin, Code zu posten. Wie gesagt, kannst es ja grad per Mail schicken.
Hallo,
kannst du vielleicht das angepasste Skript nochmal posten? Würde es gerne mal ausprobieren.
Vielen Dank!
Die aktuelle Version gibt es hier:
Windows: Rotationssicherung mit Drive Snapshot – Version 3.0