Robocopy (Robust File Copy) ist bei jeder Windows-Installation dabei und das Standardtool für Windows-Dateiserver-Migrationen. Dieser Guide behandelt die Flags, die du tatsächlich brauchst, Task-Scheduler-Automatisierung und die Fallstricke, die Admins Stunden kosten.
robocopy \\source\share \\dest\share /MIR /MT:16 /LOG:C:\logs\migration.log
| Flag | Was es tut |
|---|---|
/MIR | Mirror-Modus — kopiert neue Dateien UND löscht Dateien auf dem Ziel, die auf der Quelle nicht existieren |
/MT:16 | Multi-threaded — 16 gleichzeitige Kopier-Threads (Standard ist 8) |
/LOG:file | Ausgabe in eine Logdatei statt auf die Konsole |
/MIR löscht Dateien
/MIR = /E + /PURGE. Es löscht Dateien auf dem Ziel, die auf der Quelle nicht existieren. Führe immer zuerst einen Test mit /L (nur Auflistung) durch.
| Flag | Zweck |
|---|---|
/E | Unterverzeichnisse kopieren, einschließlich leerer |
/S | Unterverzeichnisse kopieren, ohne leere |
/Z | Restartable-Modus — setzt unterbrochene Kopien fort |
/B | Backup-Modus — nutzt Backup-Semantik (erfordert Backup-Rechte) |
/ZB | Erst Restartable, fällt auf Backup-Modus zurück |
/COPY:DATSOU | Was kopiert wird: Data, Attributes, Timestamps, Security, Owner, aUditing |
/SEC | NTFS-Sicherheitsinformationen kopieren (entspricht /COPY:DATS) |
/COPYALL | Alle Dateiinformationen kopieren (/COPY:DATSOU) |
/DCOPY:DAT | Verzeichnis-Timestamps und -Attribute kopieren |
| Flag | Zweck |
|---|---|
/MT:n | Multi-threaded (1-128 Threads). 8-32 ist der Sweet Spot |
/J | Unbuffered I/O — besser für sehr große Dateien |
/IPG:n | Inter-Packet Gap in Millisekunden — drosselt die Bandbreite |
/R:3 | Anzahl der Wiederholungen bei fehlgeschlagenen Kopien (Standard ist 1.000.000!) |
/W:5 | Wartezeit zwischen Wiederholungen in Sekunden (Standard ist 30) |
Immer /R und /W setzen
Robocopys Standard ist 1 Million Wiederholungen mit 30-Sekunden-Pausen. Das sind ~347 Tage Wiederholen für eine einzige Datei. Setze /R:3 /W:5, um schnell zu scheitern und weiterzumachen.
| Flag | Zweck |
|---|---|
/XF file | Bestimmte Dateien ausschließen (unterstützt Wildcards) |
/XD dir | Bestimmte Verzeichnisse ausschließen |
/MAXAGE:n | Dateien älter als n Tage ausschließen (oder YYYYMMDD-Datum) |
/MINAGE:n | Dateien neuer als n Tage ausschließen |
/MAX:n | Dateien größer als n Bytes ausschließen |
/MIN:n | Dateien kleiner als n Bytes ausschließen |
robocopy \\oldserver\data \\newserver\data /MIR /MT:16 /COPY:DATSOU /DCOPY:DAT /R:3 /W:5 /LOG:C:\logs\full-mirror.log /TEE /NP
/COPY:DATSOU — erhält alle Metadaten einschließlich Sicherheit und Eigentümer/DCOPY:DAT — erhält Verzeichnis-Timestamps/TEE — Ausgabe gleichzeitig auf Konsole UND in Logdatei/NP — keine Prozentanzeige (sauberere Logs)robocopy \\oldserver\data \\newserver\data /MIR /MT:16 /COPY:DATSOU /DCOPY:DAT /R:3 /W:5 /LOG+:C:\logs\incremental.log /TEE /NP
Beachte das /LOG+: (mit Plus-Zeichen) — hängt an das bestehende Log an, statt es zu überschreiben.
robocopy \\source\share \\dest\share /MIR /L /LOG:C:\logs\dryrun.log
Das /L-Flag zeigt, was passieren würde, ohne etwas zu kopieren. Nutze das immer vor einem Produktions-Mirror.
robocopy \\source\share \\dest\share /E /XO /MT:16 /R:3 /W:5 /LOG:C:\logs\newonly.log
/XO schließt ältere Dateien aus — kopiert nur Dateien, die auf der Quelle neuer sind. Kein Löschen.
Für automatisierte tägliche Syncs:
@echo off
set LOGDIR=C:\logs\robocopy
set LOGFILE=%LOGDIR%\sync-%date:~10,4%%date:~4,2%%date:~7,2%.log
if not exist %LOGDIR% mkdir %LOGDIR%
robocopy \\source\share \\dest\share /MIR /MT:16 /COPY:DATSOU /R:3 /W:5 /LOG:%LOGFILE% /NP
REM Robocopy exit codes: 0-3 = success, 4+ = errors
if %ERRORLEVEL% GEQ 4 (
echo FAILED: Robocopy returned %ERRORLEVEL% >> %LOGFILE%
exit /b 1
)
exit /b 0
$action = New-ScheduledTaskAction -Execute "C:\scripts\robocopy-sync.bat"
$trigger = New-ScheduledTaskTrigger -Daily -At "2:00 AM"
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -RunLevel Highest
Register-ScheduledTask -TaskName "Daily File Server Sync" `
-Action $action -Trigger $trigger -Principal $principal `
-Description "Mirror source to destination using Robocopy"
Robocopy verwendet nicht-standardmäßige Exit-Codes, die den Task Scheduler verwirren:
| Exit-Code | Bedeutung | Maßnahme |
|---|---|---|
| 0 | Keine Dateien kopiert, keine Fehler | Erfolg (keine Änderungen) |
| 1 | Dateien erfolgreich kopiert | Erfolg |
| 2 | Zusätzliche Dateien/Verzeichnisse erkannt | Erfolg (mit Extras) |
| 3 | Dateien kopiert + Extras erkannt | Erfolg |
| 4 | Nicht übereinstimmende Dateien oder Verzeichnisse | Warnung — untersuchen |
| 8 | Einige Dateien konnten nicht kopiert werden | Fehler |
| 16 | Fataler Fehler — keine Dateien kopiert | Kritischer Fehler |
Exit-Codes sind bitweise
Robocopy-Exit-Codes sind Bitmasken. Code 5 = 1 (Dateien kopiert) + 4 (Unstimmigkeiten). Jeder Code unter 4 bedeutet grundsätzlich Erfolg. Ab Code 4 solltest du genauer hinschauen.
Beim Kopieren zwischen SMB-Shares:
\\?\UNC\server\share\path für Pfade über 260 Zeichen| Fehler | Ursache | Lösung |
|---|---|---|
| ”Access Denied” | Unzureichende Berechtigungen | Als Domain-Admin ausführen oder /B für Backup-Modus verwenden |
| ”The file name is too long” | Pfad > 260 Zeichen | \\?\-Präfix verwenden oder LongPathsEnabled-Registry-Key setzen |
| ”Sharing violation” | Datei von anderem Prozess gesperrt | Außerhalb der Geschäftszeiten planen oder VSS nutzen |
| ”Insufficient resources” | Zu viele Threads mit /MT | Thread-Anzahl reduzieren (versuch /MT:8) |
| Hängt bei einer Datei | Netzwerk-Timeout bei großer Datei | /Z für Restartable-Modus hinzufügen |
Bei aller Stärke hat Robocopy echte Limitierungen:
/Z startet einzelne Dateien neu, nicht den JobDu brauchst Cross-Platform oder bessere Übersicht?
syncopio bietet ein Web-Dashboard zur Überwachung aller Migrationen an einem Ort, mit eingebauter Checksummen-Verifizierung und Multi-Protocol-Support (NFS + SMB + S3). Siehe syncopio vs Robocopy für einen detaillierten Vergleich.