Hi,
heute möchte ich euch etwas vorstellen, dass eigentlich nicht NEU aber trotzdem nicht allzu bekannt ist. Die Möglichkeit mit Windows Bordmitteln ein Backup/Synchronisation eurer Dateien zu machen.
Das Zauberwort (oder-Befehl) lautet ROBOCOPY.
Wer schon mit copy und xcopy gearbeitet hat, kennt bestimmt einige Parameter, die man anhängen kann, um das kopieren von Dateien steuern zu können. Robocopy bringt einiges mehr mit. Wer sich schon mal vorab ein Bild machen will, ruft sich eine Windows-Konsole auf (Start –> cmd –> Enter) und gibt ein: robocopy /?
Als erstes wird die grundlegende Syntax (der Befehlsaufbau) angezeigt und nachfolgend eine Menge von zusätzlichen und sehr nützlichen Parametern unterteilt in mehreren Options-Abschnitten.
Kopier-Optionen
Dateiauswahl-Optionen
Wiederholung-Optionen
Protokoll-Optionen
Job-Optionen
Hier ist jeder selbst gefragt, sich das Beste rauszusuchen. Was ich Euch zeigen möchte, sind einige Anwendungsbeispiele und welche Parameter man am besten setzt.
Fangen wir mal grundsätzlich an und nach und nach werden wir dann spezieller.
- Ein Grundsatz ist, das Groß-/Kleinschreibung ignoriert wird. Ihr könnt robocopy oder ROBOCOPY schreiben und auch die Parameter können /s oder /S geschrieben werden. Eine Unterscheidung dient nur der besseren Lesbarkeit aber seht selbst
- Befehlssatz: ROBOCOPY Quelle Ziel [Datei [Datei]…] [options] –> (die eckigen Klammern zeigen nur an, dass dieses optional also nicht zwingend angegeben werden muss)
- Quelle / Ziel :: entweder ein Laufwerk mit Buchstaben –> C:\wo-auch-immer oder ein Netzwerkpfad –> \\wo-auch-immer\im-netz
- Datei :: Die Datei selber –> textdatei.txt
- Beispiel: c:\temp c:\ap\robo-backup\ hotfix.txt
- Bedeutet, ich möchte aus dem Ordner c:\temp in den Ordner c:\ap\robo-backup\ die Datei hotfix.txt kopieren.
Was man beim ROBOCOPY Output sieht ist, dass es Standardeinstellungen seitens ROBOCOPY gibt. Ich hatte im obigen Beispiel keine Parameter (options) angegeben aber in dem Ausgabebericht kann man sehen, welche Optionen gesetzt sind.
- /COPY:DAT
- /R:1000000
- /W:30
/COPY:DAT
D = Data (Inhalt der Datei)
A = Attributes
T = Timestamps
Es gibt für den Parameter /COPY noch weitere „Schalter“
S = Security = NTFS Zugriffsrechte
O = Owner
U = aUditing (Überwachungsoptionen werden mit kopiert)
Der komplette Befehl für /COPY mit allen Schaltern würde /COPY:DATSOU lauten, man kann auch /COPYALL schreiben.
/R:1000000
Standardmäßig versucht ROBOCOPY 1Millionmal, eine Datei zu kopieren, sollten Probleme (offene Dateien) auftreten.
/W:30
Standardmäßig versucht ROBOCOPY 30 Sekunden lang eine Datei zu kopieren, sollten Probleme (offene Dateien) auftreten.
Das bedeutet, dass ROBOCOPY 30 Millionen Sekunden = 500.000 Minuten = 8333,33 Stunden = 347,22 Tage lang versuchen würde eine Datei zu kopieren.
*******************************************
Anwendungsbeispiele (reine Kopier-Beispiele —-> die Report- Anzeige- und sonstigen „Begleit“-Einstellungen erwähne ich weiter unten):
- Spiegelung oder 1:1 Kopie mit –> /E /PURGE oder –> /MIR
- Beispiel 1:
- robocopy C:\quelle Z:\ziel /E /PURGE /R:1 /W:1
- /E kopiert alle Quell-Dateien ins Zielverzeichnis samt Unterverzeichnissen (Ordner), auch leere Ordner
- /PURGE löscht ALLE Dateien im Zielverzeichnis, die NICHT (mehr) im Quellverzeichnis vorkommen
- /R:1 /W:1 es wird 1 Mal und 1 Sekunde lang probiert zu kopieren, bei Problemen (offene Dateien)
- robocopy C:\quelle Z:\ziel /E /PURGE /R:1 /W:1
- Beispiel 2:
- robocopy C:\quelle Z:\ziel /MIR /R:1 /W:1
- /MIR ersetzt /E und /PUR –>/MIR kopiert alle neuen und geänderten Dateien und löscht alle Dateien im Ziel, die in der Quelle nicht vorkommen.
- /R:1 und /W:1 wie oben beschrieben
- robocopy C:\quelle Z:\ziel /MIR /R:1 /W:1
- Beispiel 1:
- Inkrementelle Sicherung mit Parameter –>/M
- /E kopiert alle Quell-Dateien ins Zielverzeichnis samt Unterverzeichnissen (Ordner), auch leere Ordner
- /M kopiert nur Dateien mit gesetztem Archivbit und setzt das Archivbit nach dem Kopieren wieder zurück
- Beispiel: C:\quelle Z:\ziel /E /M /R:1 /W:1
- Ich habe in meinem Bildbeispiel den Schalter /S verwendet um auch gleichzeitig zu demonstrieren, dass hierbei der leere Ordner (als „leerer ordner“ beziffert) nicht mit kopiert wird
- Schön zu sehen hier, wie das Archivbit -a vom Quellverzeichnis entfernt wird (gelbe Markierung)
**********************************
Differentielle Sicherung mit Parameter –>/A
klick) Am Ende des Artikels wird der grundsätzliche Unterschied zwischen inkrementellem und differentiellem Backup erläutert
- Beispiel einer Sicherung (1:1 Kopie) des Benutzerprofiles (USERPROFILE)
- robocopy %userprofile% z:\ziel\%username% /B /MIR /R:1 /W:1
- Erklärung:
- %userprofile% –> Man kann als Quelle auch Systemvariablen nehmen, um variabel zu bleiben (Entspricht unter Win7 –> C:\Benutzer\[Benutzername])
- %username% –> Damit man im Ziel auch den gleichen Benutzernamen als Ordnername hat….
- /B –> Backup Mode (das erlaubt ROBOCOPY die in der NTFS ACL hinterlegten Rechte zu überschreiben, wenn notwendig. Benötigt Adminrechte)
- /MIR –> die „Spiegelvariante“. Löscht im Ziel alles was nicht in der Quelle vorhanden ist. Hier könnte man auch die Schalter /A oder /M nehmen wie oben beschrieben.
- /R:1 und /W:1 –> einen Versuch bei einer Sekunde Verzögerung, kann auch so eingestellt werden/R:0 und /W:0
Jetzt wird es Zeit, ein paar Schritte weiter zu gehen und etwas variabler zu werden. Zum einen werden wir uns „Batchdateien“ anlegen und zum anderen werden wir innerhalb dieser Batchdateien „variabel“ werden.
- wir legen uns eine Datei an mit Namen rc-backup.bat
- wir öffnen diese Datei mit einem Editor
- wir tragen einen der oben genannten robocopy Befehle ein, z.B. zur Sicherung des Benutzerprofiles, also: robocopy %userprofile% z:\ziel\%username% /B /MIR /R:1 /W:1
- wir speichern die Datei und führen sie anschließend mit einem Doppelklick aus
Was passiert? Wer wenig Dateien/Ordner zu kopieren hat, bei dem flackert kurz ein dunkler Bildschirm auf und verschwindet wieder. Wer ein größeres Profil zu sichern hat, bei dem bleibt die Konsole länger stehen, diese verschwindet dann wieder, sobald robocopy seinen Dienst verrichtet hat. Was wurde nun gesichert? Wurde überhaupt gesichert? Um hier Klarheit zu haben, kann man sich alles was robocopy im Hintergrund tut, protokollieren lassen. Genau, mit einem weiteren Parameter.
Die 3 wesentlichen seien hier aufgeführt:
- /LOG:file –> Beispiel: robocopy %userprofile% z:\ziel\%username% /B /MIR /R:1 /W:1 /LOG:C:\protokoll-ordner\protokoll.txt
- /LOG+:file –> Das gleiche wie eins höher, nur hier werden mit dem + Zeichen alle folgenden Protokolle angehängt, in der obigen Variante werden ältere überschrieben
- /L –> das ist ein ganz interessanter Schalter auf den ich im Einzelnen noch zurückkommen werde. Soviel vorab: Ist dieser gesetzt wird NICHTS kopiert, sondern nur protokolliert, quasi als Kontrolle, was wären wenn…….
Sobald einer der beiden Parameter /LOG (mit oder ohne +) gesetzt wurde, werden alle Kopiervorgänge in diese protokoll.txt geschrieben…..aber nichts mehr am Bildschirm ausgegeben. Wer trotzdem auch am Bildschirm mit verfolgen will, was robocopy treibt, kann das mit dem Parameter /TEE realisieren und wer sich nur die „wesentlichen“ Ausgaben, ohne z.B. Ordnerliste, Dateiliste, Kopierfortschritt (prozentualer Kopierfortschritt) anschauen will, sollte die Schalter /NDL /NFL /NP hinzufügen. Jetzt werden nur noch der Job-Header, die „echten“ Fehlermeldungen (ERROR 32 (33) = Datei (oder Teile) in Benutzung durch anderen Prozess / Error 5 = Access is denied oder *Extra File (alle NEUEN Dateien im Ziel) und die Job-Summary in der Konsole angezeigt und in die protokoll.txt eingetragen.
Damit sieht unser Befehl in unserer Batchdatei folgendermaßen aus:
robocopy %userprofile% z:\ziel\%username% /B /MIR /R:1 /W:1 /TEE /NDL /NFL /NP /LOG+:C:\protokoll-ordner\protokoll.txt
Damit kann man erst einmal die wichtigsten Backups anlegen, indem man nur die Quell und Zielordner austauscht und alle anderen Parameter beibehält.
ABER ACHTUNG:
Man muss sich mit den Parametern /MIR und der Kombination /E + /PURGE im Klaren sein, dass hier gespiegelt wird, also Dateien/Ordner im Ziel gelöscht werden, die in der Quelle nicht (mehr) vorhanden sind. Wer will kann die beiden Parameter durch /E oder /S mit den oben erwähnten /A und /M ersetzen und somit zwei unterschiedliche Arten von Batchdateien erzeugen. Eine nur für Spiegelungen (/MIR) und eine für reine Kopien, ohne das im Zielverzeichnis gelöscht wird
Nun einen kleinen Schlenker weg von robocopy und hinein in die Batchdatei, denn so eine Protokolldatei kann schon sehr groß und unübersichtlich werden, im Laufe der Zeit. Daher tragen wir in der Batch etwas ein, das uns immer eine Protokolldatei pro Tag erstellt und damit die Anzahl der Dateien nicht überhand nehmen, löschen wir alle Protokolldateien, die älter sind als 7 Tage.
Im Moment sieht unsere Batch so aus:
robocopy %userprofile% z:\ziel\%username% /B /MIR /R:1 /W:1 /TEE /NDL /NFL /NP /LOG+:C:\protokoll-ordner\protokoll.txt
Wir tragen über diesem Befehl folgendes in die Batch ein:
SET _DATUM=%date:~-4,4%-%date:~-7,2%-%date:~-10,2%
und ändern unseren robocopy Befehl folgendermaßen ab:
robocopy %userprofile% z:\ziel\%username% /B /MIR /R:1 /W:1 /TEE /NDL /NFL /NP /LOG+:C:\protokoll-ordner\protokoll-%_DATUM%.txt
Zur Erklärung:
Mit dem Befehl SET erzeugen wir eine Variable, mit dem Namen, der auf SET folgt, hier _DATUM.
Der Unterstrich sorgt nur dafür, das ich mit keiner Systemvariablen vom Namen her kollidiere. Dieser Variable _DATUM könnte man auch einfach das Tagesdatum (date) zuordnen, aber dann würde die Protokolldatei z.B. protokoll-08.10.2014.txt heißen. Zur besseren Sortierung (nicht nach dem Tag sondern Jahr-Monat-Tag (YYYY-MM-DD)) zerlegen wir den Inhalt von date.
- %date% –> der Inhalt von date = 08.10.2014
- %date:~-4,4% –> gehe von rechts 4 Stellen und gib mir 4 Zeichen nach rechts aus = 2014
- %date:~-7,2% –> gehe von rechts 7 Stellen und gib mir 2 Zeichen nach rechts aus = 10
- %date:~-10,2% –> gehe von rechts 10 Stellen und gib mir 2 Zeichen nach rechts aus = 08
- _DATUM wird dann zusammengesetzt und jede „Einheit“ mit einem Bindestrich (in rot) verbunden –>%date:~-4,4%–%date:~-7,2%–%date:~-10,2%
- die Ausgabe einer Variablen wird mit Prozentzeichen (%variable%) maskiert
Jetzt fehlt nur noch der Eintrag am Ende, der dafür sorgt, dass alle txt Dateien dieses Protokollordners, älter 7 Tage gelöscht werden.
Damit wir innerhalb der Batch auch ein bisschen Struktur rein bekommen, können wir bestimmte Abschnitte auch kommentieren. Jeder Kommentar einer Zeile wird mit zwei Doppelpunkten eingeleitet ::
Unsere Batch sieht demnach so aus:
:: Datum umsetzen in YYYY-MM-DD
SET _DATUM=%date:~-4,4%-%date:~-7,2%-%date:~-10,2%:: SPIEGELUNG
robocopy %userprofile% z:\ziel\%username% /B /MIR /R:1 /W:1 /TEE /NDL /NFL /NP /LOG+:C:\protokoll-ordner\protokoll-%_DATUM%.txt:: Löschen aller txt Dateien älter 7 Tage
forfiles /P „C:\protokoll-ordner\“ /M *.txt /S /D -7 /C „cmd /c del @File“ 2>&1 | find /v /i „ERROR: No files found with the specified search criteria.“
Wer das Prinzip mit den Variablen innerhalb einer Batchdatei „gefressen“ hat, wird sich bestimmt überlegen, ob man nicht die einzelnen Befehlsteile / Parameter von robocopy in solche Variablen packt. Gut weiter gedacht, machen wir auch aber später…..
…………………..Fortsetzung folgt immer mal wieder vorbei schauen………………….
……………….Über Anregungen als Kommentar würde ich mich freuen……………..
**************************************************************************************************
Grundsätzliche Erläuterung zum Unterschied eines inkrementellen und differentiellen Backups
- Bei beiden Versionen wird als erstes eine Komplettsicherung (KS) aller Dateien angelegt
- Bei beiden Versionen wird eine erste Teilsicherung (TS1) aller zur KS geänderten und neuen Dateien angelegt
- Bei der inkrementellen Sicherung wird eine weitere TS2 für alle nach der TS1 geänderten und neuen Dateien erstellt
- Vorteil: schnelle Sicherung
- Nachteil: Für die Wiederherstellung werden ALLE Teile (KS + TS1 + TS2 + …TSn) benötigt
- Bei der differentiellen Sicherung wird eine weitere TS2 für alle nach der KS geänderten und neuen Dateien erstellt
- Vorteil: Für die Wiederherstellung werden nur die Sicherungen: KS + TSn (letzte Teilsicherung) benötigt
- Nachteil: Verbraucht mehr Platz, dauert länger (da die Datenmenge stetig wächst)
14. April 2015 um 05:51 Uhr
Sehr geehrte Damen und Herren,
ich bitte um Hilfe bzw. Bekanntgabe der genauen Parameter unter robocopy fuer folgenden Vorgang: Auf der Festplatte c befindet sich ein Ordner mit dem Namen Objekte. Die Dateien in diesem Ordner möchte ich inkrementell in einen Ordner im Stick f: mit dem Namen Objekte kopieren. Ich schaffe hier trotz stundenlanger Anstrengungen die richtige Parameter Bezeichnung nicht. Das ist anscheinend sehr kompliziert. Danke fuer Ihre Benuehungen. Mit freundlichen Gruessen Kuehner
14. April 2015 um 14:12 Uhr
Hallo,
die Hilfestellungen, die wir hier gerne geben, können nur Empfehlungen sein. Bitte überprüft vorher genau, was wir hier Euch mitteilen und das was ihr dann umsetzt. Am Besten erst an einem Beispiel mit unsensiblen Daten ausprobieren.
Eine Inkrementelle Sicherung signalisiert man mit dem Schalter /M.
Beispiel: C:\quelle Z:\ziel /E /M /R:1 /W:1
In diesem Fall würde ich folgendes eingeben:
Robocopy C:\Objekte F:\Objekte /E /M /R:1 /W:1
LG John
17. Juni 2015 um 12:24 Uhr
Hallo,
ich finde diese ausführliche Beschreibung ist sehr gelungen!
Nun meine persönliche Frage: Ich habe auf meinem Server im Ordner „D:\STORAGE“ alle meine Daten, welche ich vollständig auf eine weitere intern verbaute Platte spiegeln möchte, liegen.
Wenn ich es richtig verstanden habe, reicht dazu einfach der Befehl /MIR?
Oder sollten noch weitere Parameter hinzu? Ich bin mir bewusst, dass im Zielordner Daten gelöscht werden, wenn diese in der Quelle gelöscht wurden. Dies ist ausdrücklich erwünscht.
LG Julian
17. Juni 2015 um 18:26 Uhr
Hallo Julian,
Ja, du hast es richtig verstanden, es reicht einfach der PARAMETER /MIR.
Alle zusätzlichen Parameter erfüllen eben „zusätzliche“ Dinge. Allein das Spiegeln und Gleichstellen, aller Dateien und Verzeichnisse im Quell-, wie Zielordner macht /MIR ganz alleine.
Wenn du dir noch nicht sicher bist, kannst du auf der CMD Shell robocopy /? eingeben, dann erhältst du die Hilfe mit allen Parameteren angezeigt.
LG John
20. September 2015 um 11:05 Uhr
hallo zusammen
ich habe da ein echtes problem ….
meine Vorstellung: Automatisches Backup meiner Datein auf eine externe Festplatte an meiner Fritz.Box
Ich bin wie folgt vorgegangen … ich habe mir eine Batch Datei geschrieben die wie folgt aussieht
Code:
@Echo on
„C:\Windows\system32\robocopy.exe“
„F:\Neuer _Ordner“ „Y:\.“ /E /ZB /Log:“Y:\%DATE%.txt
ich habe die datei auch in den Ordner C:\Windows\System32\GroupPolicy\Machine\Scripts\Sh utdown kopiert und diese unter Start / Ausführen / gpedit.msc eingepflegt. der Script wird ja auch ausgeführt beim runterfahren nur habe ich da noch folgenedes Problem:
1. er kopiert die Datein im Hautverzeichnis von dem Ordner jedoch nicht im Unterordner obwohl ich den Befehl gegeben habe ( /E ) …
2. beim runterfahren fährt er so schnell runter das ich denke das er keine zeit hat diesen Ordner zu kopieren.
3. ich habe die Festplatte als Netzlaufwerk eingebunden da ich keinen richtigen Befehl gefunden habe das sich robocopy mit Username und Passwort auf meine Fritzbox einloggen kann.
Ich hoffe ihr könnt mir da Irgendwie helfen .. wenn noch fragen sind oder was missverstandlich sein sollte einfach schreiben.
Danke
21. September 2015 um 08:15 Uhr
Hallo Daniel,
zuerst würde ich das Script ohne Einbinden in die Shutdown Routine ausprobieren. Funktioniert die Batch per Doppelklick?
Beim Runterfahren des Rechners werden u.a. auch alle Netzlaufwerke „gekappt“. Es kann sein das Windows zwar auf die Batch wartet aber die kann nicht sauber durchlaufen, weil „Y:\“ nicht mehr vorhanden ist.
Dann würde ich nach der robycopy (also wenn der Backupprozess durchgelaufen ist) das Herunterfahren über diese Batch steuern (shutdown.exe).
Schreib uns bitte wieder wie deine Lösung aussieht, wenn du noch Fragen hast auch….
LG John