Sonntag, 31. August 2008

Windows: Dateien synchronisieren mit RoboCopy

Jeder kennt das: In der heutigen Zeit, in der (riesige) Festplatten verhältnismäßig billig sind, wird es immer schwieriger, wichtige Daten zu sichern. Die Rede ist von (automatischen) Backups.

Seit Jahre verwende ich dafür das Programm Total Commander, dessen Synchronisationsfunktion wirklich sehr gut (d.h. sauber, schnell und zuverlässig) ist. Da ich mehrere Verzeichnisse synchronisieren muss (z.B. Eigene Dateien, Recovery-Ordner), muss ich jeweils das Quell- und Zielverzeichnis manuell auswählen, danach die Synchronisation starten usw.

Das in Windows Vista integrierte Programm RoboCopy, welches mit den Windows Server 2003 Resource Kit Tools auch für andere Windows-Systeme erhältlich ist, bringt endlich eine Ablöse für das Problem.

RoboCopy (Robust File Copy) ist ein Kommandozeilenprogramm, welches mit unzähligen Parametern genauestens konfiguriert werden kann. Es existiert auch eine grafische Oberfläche (von Microsoft) für das Programm: Robocopy GUI.

Ich beziehe mich hier lediglich auf RoboCopy selbst. Dafür habe ich folgendes Script geschrieben. Startet man dieses Script, so werden 2 Verzeichnisse komplett synchronisiert (Mirror).

@echo off
echo Starte Sicherung...
set Quelle01="E:\Daten\Eigene Dateien"
set Ziel01="K:\Daten\Backups\Eigene Dateien"
set Quelle02="E:\Daten\Recovery"
set Ziel02="K:\Daten\Backups\Recovery"
set Logfile="c:\robo_log.txt"
c:
cd C:\Programme\Windows Resource Kits\Tools
echo.
echo Sicherung 1: Eigene Dateien
robocopy %Quelle01% %Ziel01% /MIR /R:10 /W:10 /V /XD ".svn"
/XD "thumbs.db" /COPY:DAT /LOG:%Logfile% > NUL
echo Sicherung 1: Eigene Dateien - fertig
echo.
echo Sicherung 2: Recovery
robocopy %Quelle02% %Ziel02% /MIR /R:10 /W:10 /V /XD ".svn"
/XD "thumbs.db" /COPY:DAT /LOG+:%Logfile% > NUL
echo Sicherung 2: Recovery - fertig
echo.
echo Sicherung abgeschlossen.
echo.
pause


Das Script im einzelnen, kurz erklärt:

1. Anlegen von Variablen für die Quell- und Zielverzeichnisse sowie Log-Datei:
set Quelle01="E:\Daten\Eigene Dateien"
set Ziel01="K:\Daten\Backups\Eigene Dateien"
set Quelle02="E:\Daten\Recovery"
set Ziel02="K:\Daten\Backups\Recovery"
set Logfile="c:\robo_log.txt"

2. Navigation zum Verzeichnis, in dem sich robocopy.exe befindet (nicht nötig, sofern PATH-Variable von Windows angepasst):
c:
cd C:\Programme\Windows Resource Kits\Tools

3. Erstes Verzeichnis synchronisieren:
robocopy %Quelle01% %Ziel01% /MIR /R:10 /W:10 /V /XD ".svn"
/XD "thumbs.db" /COPY:DAT /LOG:%Logfile% > NUL

4. Zweites Verzeichnis synchroniseren:
robocopy %Quelle02% %Ziel02% /MIR /R:10 /W:10 /V /XD ".svn"
/XD "thumbs.db" /COPY:DAT /LOG+:%Logfile% > NUL


Die Schalter kurz erklärt:
/MIR            - Mirror-Funktion (Löschen von Dat./Ordnern in Quelle im Ziel nachvollz.)
/R:10 /W:10 - [R] Mal erneut versuchen nach [W] Sekunden
/V - wortreiche Ausgabe
/XD ".svn" - Alle Verzeichnisse namens ".svn" nicht beachten
/XF "thumbs.db" - Alle Dateien namens "thumbs.db" nicht beachten
/COPY:DAT - Dateiinhalt, -Attribute und Zeitstempel kopieren
/LOG:%Logfile% - Logdatei erstellen (falls vorhanden: ersetzen)
/LOG+:%Logfile% - Logdatei erstellen (falls vorhanden: erweitern)
>> NUL - Bildschirmausgabe deaktivieren


Dieses Script kann als *.bat-Datei gespeichert werden und ist somit per Doppelklick ausführbar. Außerdem kann ein Windows-Task angelegt werden, um die Sicherung zu automatisieren.

1 Kommentar:

intermayer hat gesagt…

Aber warum mit der Option /MIR? /MIR ist identisch mit /E /PURGE, löscht also im Zielverzeichnis Dateien die im Quellverzeichnis nicht vorhanden sind. Die Option /E alleine kommt einer Synchronisation da wesentlich näher.
Just sayin.