{{commentsTotalLength}}

Backup mit Robocopy

Daten spiegeln mit Robocopy

Aufwendige Kopierjobs, bei denen der Explorer versagt, erledigt Microsofts Robocopy mit links. Es spiegelt große Verzeichnisbäume inkrementell auf externe Festplatten und Netzlaufwerke, setzt unterbrochene Übertragungen fort und lässt sich per Taskplaner automatisieren - vorausgesetzt, Sie haben keine Scheu vor kryptischen Parameterlisten.

Artikel aus c't 25/06

Um Gigabyte-große Datenberge zuverlässig von A nach B zu schaufeln, etwa auf einen zweiten Rechner im Netzwerk, sind die Windows-Bordmittel nicht die erste Wahl. Der Explorer gibt schon beim kleinsten Problem auf - sei es etwa, dass eine Datei nicht lesbar ist, der Anwender keinen Zugriff auf sie hat oder die WLAN-Verbindung für einen kurzen Moment zusammenbricht. Zuverlässiger ist das bordeigene Kommandozeilenwerkzeug xcopy; doch auch dieses lässt Wünsche offen, wenn es etwa Verzeichnisse exakt spiegeln und inkrementell aktualisieren soll.

Im kostenlosen Ressource Kit für den Windows Server 2003 liefert Microsoft einen potenten Replikator, der für viele Administratoren bereits ein alter Bekannter ist: das Kommandozeilenwerkzeug Robocopy. Die im Ressource Kit enthaltene Version funktioniert auch mit Windows 2000 und XP, Vista bringt robocopy.exe bereits als Bordmittel mit.

Robocopy arbeitet stets inkrementell: Es vergleicht zunächst den Inhalt des Quellordners mit dem Ziel, um dann nur solche Dateien zu übertragen, die noch nicht im Zielordner vorhanden oder neuer sind. Das Programm verlässt sich dabei nicht auf Archivbits: Um zu entscheiden, ob eine Datei im Zielordner bereits identisch mit der Quelldatei ist, betrachtet Robocopy standardmäßig den Zeitpunkt der letzten Änderung sowie die Größe der Datei.

Das Werkzeug ist gut geeignet, um zum Beispiel große Foto- oder MP3-Sammlungen auf einen externen Datenträger zu spiegeln und die Kopie später schnell auf den aktuellen Stand zu bringen. Seine Stärken spielt Robocopy bei der Replikation von Daten über Netzwerkverbindungen aus. Damit lassen sich etwa Arbeitsdaten regelmäßig auf einen weit entfernten Server spiegeln.

Microsoft bietet eine grafische Oberfläche separat an, die ein installiertes .NET-Framework 2.0 voraussetzt. Bei den ersten Gehversuchen ist die Microsoft Robocopy GUI hilfreich: Sie gruppiert die vielen kryptischen Schalter thematisch auf wenigen Registerkarten. Für alltägliche Aufgaben genügt es, eine Handvoll davon zu kennen. Im Software-Verzeichnis sind noch weitere grafische Bedienoberflächen für Robocopy eingetragen, die zum Teil mehr Möglichkeiten bieten, etwa RobocopyMonitor, RoboGUI (derzeit nicht erhältlich) oder YARCGUI, allesamt kostenlos.

Das Installationspaket für die Bedienoberfläche bringt das Kommandozeilenwerkzeug nicht mit. Kopieren Sie robocopy.exe aus dem Ressource-Kit am besten ins Windows-Verzeichnis, damit es im Suchpfad liegt. So lässt es sich auch in einer Eingabeaufforderung direkt nutzen. Auf dem ersten Reiter wählen Sie Quell- und Zielordner für die Kopieraktion. Robocopy akzeptiert auch UNC-Netzwerkpfade, Sie müssen ein Netzlaufwerk also nicht erst mit einem Laufwerksbuchstaben verbinden. Wenn Sie die Konfiguration mit einem Klick auf "Run" starten, ohne weitere Schalter zu setzen, wird robocopy nur Dateien ins Ziel übertragen, die sich direkt im Quellordner befinden. Um auch die Unterordner zu kopieren, müssen Sie weitere Optionen auf der Seite "Copy Options" setzen. Wenn Sie mit der Maus über einen der Schalter fahren, liefert ein Tooltip eine knappe englische Erklärung.

Um das Quellverzeichnis mit sämtlichen Unterordnern ins Ziel zu spiegeln, genügt es schon, den Schalter /MIR (Mirror) zu aktivieren. Vorsicht: Nachdem Robocopy den Befehl ausgeführt hat, werden Quelle und Ziel mit identischen Ordnern und Dateien gefüllt sein. Das gilt auch dann, wenn Sie versehentlich ein falsches Zielverzeichnis auswählen - Robocopy wird den alten Inhalt gnadenlos entsorgen! Der Schalter /MIR fasst zwei Optionen zusammen (was die GUI aber nicht widerspiegelt): /E kopiert alle Unterverzeichnisse (auch leere); gleichzeitig löscht /PURGE im Zielorder alles, was in der Quelle nicht vorhanden ist.

Mit der Mirror-Option lässt sich Robocopy auch ohne viel Schreibarbeit per Kommandozeile nutzen:

robocopy <Quelle> <Ziel> /MIR

Pfade, die Leerzeichen enthalten, müssen Sie dabei in Anführungszeichen setzen. Wenn Sie große Dateien über eine wacklige Netzwerkverbindung kopieren, ist der Schalter /Z nützlich: Sollte die Übertragung abbrechen, ergänzt Robocopy unvollständige Dateien beim nächsten Durchlauf im Zielordner, ohne sie erneut vollständig zu kopieren. Dieser "Restartable Mode" funktioniert aber nur im Netzwerk.

Für den Fall, dass der Zugriff auf Dateien schiefgeht, trifft die GUI die Voreinstellungen /R:10 und /W:30. Sobald Robocopy auf einen Fehler stößt, legt es damit eine Pause von 30 Sekunden ein und versucht es bis zu zehn Mal erneut. Diese Option ist sinnvoll für instabile Netzwerkverbindungen oder wenn Robocopy auf Dateien stößt, die ein Anwender momentan exklusiv geöffnet hat. Ruft man das Programm auf der Kommandozeile auf, ohne einen sinnvollen Wert für /R vorzugeben, wählt es eine Million - und probiert es bis zum Sanktnimmerleins-Tag, wenn es für eine Datei keine Zugriffsrechte hat. Kopierfehler kann Robocopy in einer ausführlichen Log-Datei vermerken, dazu später mehr.

Mit dem Parameter /COPY bestimmen Sie, welche Dateiattribute Robocopy kopiert. In der GUI ist er zunächst nicht aktiviert; Robocopy verwendet aber die Default-Parameter /COPY:DAT, wenn man hier keine Angaben macht. D steht für den Inhalt einer Datei, A für seine Attribute und T für die Zeitstempel, welche die Zeitpunkte der Erstellung, der letzten Änderung und des letzten Zugriffs festhalten. Auf NTFS-Laufwerken kann es sinnvoll sein, die Zugriffsrechte mitzukopieren, die in ACLs hinterlegt sind. Das gelingt mit der Copy-Option S (der Schalter /SEC bewirkt dasselbe). Die Option O überträgt zusätzlich auch den Besitzer der Dateien, und A kopiert die Zweit-ACL, in der sich Windows merkt, welche Dateizugriffe überwacht werden sollen. Der Schalter /COPYALL ist synonym zu /COPY:DATSAO, aktiviert also sämtliche Optionen.

Die Schalter auf dem Reiter "Filters" beeinflussen, welche Dateien Robocopy überträgt. Mit Hilfe von Suchmustern kann man festlegen, welche Dateien (/XF) und Verzeichnisse (/XD) das Programm weglassen soll (etwa *.bak). /XJ überpringt sogenannte Junctions; dabei handelt es sich um spezielle Ordnerverknüpfungen im NTFS-Dateisystem. Lässt man den Schalter weg, kopiert Robocopy den Inhalt des Ordners, auf den die Junction verweist. Auch Hard Links, eine weitere NTFS-Spezialität, kann Robocopy als solche nicht kopieren und behandelt sie wie herkömmliche Dateien.

Weitere Filter-Optionen schränken die Menge der kopierten Dateien ein, etwa anhand des Status, den Robocopy beim Vergleich von Quelle und Ziel ermittelt hat - in der Praxis sind diese Schalter aber nur selten nützlich. /MAX und /MIN schließen Dateien aus, deren Größe die angegebene Zahl von Bytes über- oder unterschreiten. Mit den Optionen /MAXAGE, /MINAGE sowie /MAXLAD und /MINLAD, die in der GUI fehlen, selektiert Robocopy Dateien anhand ihres Alters beziehungsweise des Zeitpunkts des letzten Zugriffs.

Robocopy kann ein detailliertes Protokoll seiner Aktionen führen, was sehr nützlich ist, wenn Sie einen Kopierjob regelmäßig vom Taskplaner ausführen lassen. Die GUI widmet den Log-Optionen einen eigenen Reiter. Im unteren Bereich geben Sie den Speicherort der Log-Datei vor. Mit dem Schalter /LOG+ hängt Robocopy sein Protokoll an die Datei an, ohne "+" verwirft Robocopy die älteren Aufzeichnungen. Wichtig ist hier der Schalter /NP, der die für den Bildschirm bestimmten Informationen unterdrückt, wie viel Prozent einer Datei Robocopy bereits kopiert hat; ohne ihn ist die Log-Datei kaum lesbar. Mit /TEE schreibt Robocopy seine Ausgabe gleichzeitig in die Konsole und in der Logdatei. Die Option /V (Verbose) listet auch übersprungene Dateien auf, die auf beiden Seiten identisch sind.

Im Monitor-Modus läuft Robocopy dauerhaft und überwacht den Inhalt des Quellordners, um die Kopie automatisch auf den aktuellen Stand zu bringen. Mit dem Schalter /MON:<Zahl> wird Robocopy aktiv, sobald die angegebene Zahl von Änderungen vorgenommen wurde. Mit /MOT:<Minuten> gleicht das Werkzeug die Ordner im eingestellten Minutenrhythmus ab. Solange Robocopy untätig ist, verbraucht es so gut wie keine CPU-Ressourcen. Die Option /RH (Run hours) legt fest, zu welcher Tages- oder Nachtzeit Robocopy im Monitormodus aktiv werden darf - so kann man vermeiden, dass ein Kopiervorgang tagsüber Anwender ausbremst. Um Bandbreite im Netzwerk zu sparen, lässt sich das Programm zusätzlich mit dem Schalter /IPG:<Millisekunden> verlangsamen. Nach jedem übertragenen 64-KByte-Block pausiert Robocopy dann für die angegebene Zahl von Millisekunden.

Quell- und Ziellaufwerke nimmt Robocopy auch als UNC-Pfade entgegen, so muss man ein Netzlaufwerk nicht erst mit einem Laufwerksbuchstaben verbinden, um Daten zu übertragen. Robocopy bietet selbst keine Option, um sich an einem Server mit Name und Passwort anzumelden. Sie müssen also dafür sorgen, dass das Benutzerkonto, unter dem das Skript läuft, auf den Server zugreifen darf. Wenn auf dem freigebenden PC ein gleichnamiges Konto mit demselben Passwort existiert, gewährt Windows den Zugriff, ohne die Zugangsdaten erneut abzufragen. Das gilt auch, wenn die Rechner derselben Domäne angehören.

Gibt es auf dem Server kein identisches Konto, ist es unter XP die beste Lösung, mit dem Benutzerkonto, unter dem das Skript laufen soll, einmal auf die Freigabe zuzugreifen und Windows die Anmeldedaten dauerhaft speichern zu lassen.

Windows 2000 bietet diese Option nicht. Für die folgende alternative Lösung müssen Sie in Kauf nehmen, das Kennwort im Klartext in eine Batch-Datei zu schreiben. Dort stellen Sie mit dem Net-Use-Befehl eine Verbindung zur Freigabe IPC$ her und trennen Sie nach getaner Arbeit wieder.

net use \\[Servername]\IPC$ /user:<Name> <Passwort>
robocopy <Quelle> \\<Servername>\Pfad /MIR
net use \\<Servername>\IPC$ /DEL

Normalerweise verwendet Windows die Freigabe IPC$, um Verbindungen zwischen Netzwerkprogrammen über Named Pipes herzustellen.

Wer die idealen Parameter für einen Sicherungsjob gefunden hat, schreibt am besten ein kleines Batch-Skript, das sich per Doppelklick starten oder vom Taskplaner zu regelmäßigen Terminen ausführen lässt. In die Oberfläche hat sich leider ein Bug eingeschlichen, der den Knopf "Save Script" verschluckt, sobald man Robocopy zum ersten Mal ausgeführt hat. Sie können die Schalter aber der Logdatei entnehmen und in ein Skript übertragen.

Die englischsprachige Robocopy-Dokumentation, die Sie im Ressource Kit finden, erklärt sämtliche Optionen und auch die Rückgabewerte (Errorlevel), mit denen ein Skript flexibel auf Fehler reagieren kann - etwa, um einen Administrator zu informieren, sobald etwas schiefgeht.

Arbeitsdaten mit Robocopy automatisch auf ein zweites Medium zu übertragen ist ein erster Schritt hin zu einer tragfähigen Backup-Strategie. Die regelmäßige Spiegelung allein reicht aber nicht aus: Wenn die Originaldaten beschädigt, unbeabsichtigt geändert oder gelöscht werden, wird Robocopy beim nächsten Lauf auch die Sicherheitskopie vernichten. Eine mögliche Lösung, um das Backup abzusichern, ist es, auf mehrere verschiedene Speichermedien im Wechsel zu sichern. (kav)

/A
nur Dateien kopieren, bei denen das Archiv-Bit gesetzt ist
/COPY:<FLAGS>
nur ausgewählte Datei-Informationen kopieren (Standard: /COPY:DAT)
D: Datei-Inhalt, S: NTFS-ACL (Zugriffschutz)
A: Attribute, O: Besitzer
T: Zeitstempel, U: Überwachungs-ACL
/COPYALL
alle Datei-Informationen kopieren (entspricht /COPY:DATSOU)
/E
Unterverzeichnisse kopieren (auch leere)
/IPG:<Millisekunden>
Kopiervorgang ausbremsen, um Bandbreite im Netzwerk zu sparen
/LEV:<Zahl>
nur die ersten Verzeichnisebenen des Quellordners kopieren
/LOG:<Datei>
Ausgabe in Log-Datei umlenken, Datei jedesmal überschreiben
/LOG+:<Datei>
Ausgabe an Log-Datei anhängen
/M
nur Dateien kopieren, bei denen das Archiv-Attribut gesetzt ist, und es danach zurücksetzen
/MAX:<n>
Dateien weglassen, die größer als n Bytes sind
/MIN:<n>
Dateien weglassen, die kleiner als n Bytes sind
/MIR
Verzeichnisbaum spiegeln (entspricht /E und /PURGE)
/MON:<Zahl>
Quellverzeichnis überwachen, nach der eingestellten Anzahl Änderungen erneut abgleichen
/MOT:<Minuten>
Quellverzeichnis überwachen, nach dem eingestellten Zeitintervall erneut abgleichen
/MOVE
kopierte Dateien und Verzeichnisse aus dem Quellordner löschen
/NP
Fortschrittsinformationen abschalten (für Log-Datei)
/PURGE
Dateien und Verzeichnisse im Ziel löschen, die in der Quelle nicht existieren
/R:<n>
erneute Kopierversuche nach einem Fehler (Standard: 1000000)
/RH:<SSMM>-<SSMM>
Zeifenster für den Monitor-Mous festlegen, Uhrzeiten im Format 0000 bis 2359
/S
Unterverzeichnisse kopieren (keine leeren)
/SEC
NTFS-ACL mit Zugriffsschutz-Informationen kopieren (entspricht /COPY:DATS)
/TEE
Ausgabe gleichzeitig in Konsole und Log-Datei schreiben
/V
ausführliche Ausgabe (mit übersprungenen Dateien)
/W:<Sekunden>
Wartezeit nach einem Fehler
/XD:<Muster>
Verzeichnisse weglassen, deren Pfad dem Suchmuster entspricht
/XF:<Muster>
Dateien weglassen, deren Pfad dem Suchmuster entspricht
/XJ
Junctions überspringen
/Z
unvollständig kopierte Dateien fortsetzen

Wie bewertest Du die Qualität des Beitrags?

Pflichtlektüre! ({{threeCount}})
Gut zu wissen ({{twoCount}})
Geht gar nicht! ({{oneCount}})
Vielen Dank für Deine Bewertung.
Deine Bewertung wurde gelöscht.

Kommentare

{{commentsTotalLength}} KommentarKommentare

Weitere Kommentare laden...

Das könnte dich auch interessieren