robocopy setzt kopieren nach unterbrechung nicht fort

Status
Für weitere Antworten geschlossen.

buja

Benutzer
Mitglied seit
17. Okt 2015
Beiträge
36
Punkte für Reaktionen
0
Punkte
0
Hallo Forum,
ich möchte ein paar Daten per robocopy von einem Win7 Rechner auf eine remote DS schieben.
Nun ist es leider so, dass die Internetverbindung instabil ist. Ich versuche das mit einem batch-script abzufangen, bislang ohne Erfolg.

Wenn die Verbindung nur kurz unterbrochen wurde (also zwei, drei Sekunden), bleibt die Verbindung von Netzwerkressource, also der DS und (bei mir) dem Laufwerk Z: erhalten und danach kopiert robocopy weiter.
Ist die Verbindung aber länger unterbrochen, wird auch die Verbindung zu Laufwerk Z: unterbrochen, sprich wenn dann die Internet-Verbindung wieder steht, ist dennoch die Zuordnung zwischen Netzwerkressource und Laufwerk getrennt. Gibt es eine Möglichkeit innerhalb von robocopy (eine Option) diese Zuordnung wieder herzustellen?

Bislang versuche ich das mit errorlevel abzufangen, sprich wenn robocopy wegen fehlendem Ziellaufwerk abbricht, geht das Skript in eine Schleife und versucht das Ziellaufwerk wieder herzustellen. Das gelingt meist. Wenn dann jedoch robocopy mit dem Kopieren weiter machen soll, passieren je nach dem zwei verschiedene Dinge:
1. robocopy kündigt Kopieren an, aber beginnt nicht, der Prozess friert ein. Es kommt auch zu keiner Fehlermeldung.
2. es kommt eine Fehlermeldung, nämlich dass die zu kopierende Datei bereits von einem anderen Prozess benutzt wird. Das ist aber der bereits beendete erste Kopierversuch.
Der Kopierprozess ist dann tot, ich muss die teilweise kopierte Datei löschen (hier ist übrigens problematisch, dass die Dateiinfos alle schon da sind, also eine Datei die komplett zB. 5MB hat wird sofort mit 5MB angezeigt, auch wenn erst ein paar kB kopiert wurden. Das ist lästig, weil man dadurch die teilweise kopierte und folglich kaputte Datei nicht ohne weiteres findet) und dann den Kopierprozess komplett neu starten. Aber das ist nicht in meinem Sinn, zumal die Dateien gross sind und die bis dahin geuploadeten Daten eigentlich weiter geführt werden sollen.

Wie bekommt man es hin, dass robocopy den Prozess des Kopieren, den es selbst bemerkt, auch wieder weiter führt? Die Option /Z ist natürlich gesetzt.
hier der Befehl: robocopy bkp_test\ Z:\test\ *.pdf /MT:8 /COPY: DAT /j /z

Was mache ich falsch?

mit freundlichen Grüßen
buja
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
29.898
Punkte für Reaktionen
1.177
Punkte
754
Ich nutze robocopy nicht sondern cygwin rsync, aber für den Fall, dass es keine Option gibt, finde ich Deinen Skriptansatz sehr gut. Du solltest schauen, ob Du vorhandene robocopy Prozesse killen kannst, dann lösen sich Deine Probleme vielleicht.
 

buja

Benutzer
Mitglied seit
17. Okt 2015
Beiträge
36
Punkte für Reaktionen
0
Punkte
0
hallo, danke für deine Antwort.
Ich habe auf jeden Fall jetzt heraus gefunden, dass robocopy die Zieldatei als offen markiert, auch wenn robocopy selbst beendet wurde.
Es ist dann nicht mal mehr möglich, von windows aus zu löschen oder sonstwie zu zu greifen, dies geht nur über die file station der DS. Irgendwo muss doch die Information gespeichert sein, dass die Datei noch offen ist, an der Datei selbst? Im Windows Ereignisprotokoll? Eigentlich ist es ja schön, dass Windows sich das irgendwie merkt, aber es soll halt auch benutzt werden.
Weiss wer wie?
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.317
Punkte für Reaktionen
2.870
Punkte
423
Hallo buja,

ich hatte mal vor einiger Zeit den hier beschriebenen Effekt.
Vielleicht liegt es ja nicht an der Quelle, sondern am Ziel.
Durchsuch mal dein Volume nach solchen Dateien und lösch sie.

Edit:
Hab grad nochmal geschaut, es waren wieder welche da
Suchen mit:
Code:
cd /volume1
find . -name '*@SynoEAStream' -exec ls -als {} \;

wenn was gefunden wird, dann löschen mit
Code:
cd /volume1
find . -name '*@SynoEAStream' -exec rm {} \;
alles angemeldet als "root" mit Passwort von "admin"

Leider gab es nie eine weitere Rückmeldung seitens Synology dazu.
 
Zuletzt bearbeitet:

OldSchool

Benutzer
Mitglied seit
28. Aug 2013
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
Hallo Benares,

das Windows-Dateisystem NTFS ermöglicht sogenannte Alternate Data Streams. Dr. Google liefert jede Menge Ergebnisse, weshalb ich keinen Link setze. Die von Dir beschriebenen Dateien (<Dateiname>@SynoEAStream) bilden solche Streams auf der NAS ab. Man kann sich diese ab Windows Vista sehr schön mit "dir /r" ansehen, wenn man z.B. ein entsprechendes Verzeichnis auf einem NAS-Netzlaufwerk in der Konsole (cmd) wählt. Ein schönes graphisches Tool wäre z.B. das freie AlternateStreamView von NirSoft.

Gruß,
OldSchool
 

AndiHeitzer

Benutzer
Sehr erfahren
Mitglied seit
30. Jun 2015
Beiträge
3.215
Punkte für Reaktionen
509
Punkte
174
Wie bekommt man es hin, dass robocopy den Prozess des Kopieren, den es selbst bemerkt, auch wieder weiter führt? Die Option /Z ist natürlich gesetzt.
hier der Befehl: robocopy bkp_test\ Z:\test\ *.pdf /MT:8 /COPY: DAT /j /z

Was mache ich falsch?

Ich arbeite eigentlich alles mit ROBOCOPY ab, was mit Kopieraktionen zu tun hat.

Mir ist anhand Deines Befehles folgendes aufgefallen, ob das aber falsch ist, habe ich jetzt nicht getestet:

A) der Schalter '/MT:8' gilt schon per default und braucht so nicht gesetzt zu werden.
rc-mt.jpg
Also erst, wenn Du einen anderen Wert als '8' benötigst, brauchst Du diesen Schalter angeben.

B) Der Schalter '/COPY: DAT' ist ebenfalls ein Default-Wert
rc-copy-dat.jpg

C) Ich vermute, da ich hier einen bestimmten Schalter vermisse, dass die Files immer wieder auf's Neue kopiert werden.

Üblicherweise verwende ich robocopy, um Verezichnisse zu spiegeln.

Daher mal meine Schalter, die ich mitgebe:
ROBOCOPY.EXE C:\QUELLVERZEICHNIS D:\ZIELVERZEICHNIS /MIR /DST /Z /NP /XO /XJ /TEE /R:1 /W:1 /LOG+:C:\LOGFILE.TXT

/MIR = Spiegelt eine Verzeichnisstruktur (Entspricht "/E" mit "/PURGE").
/DST = Kompensiert Zeitunterschiede von einer Stunden aufgrund der Sommerzeit.
/Z = Neustartmodus
/NP = Kein Status - der Prozentsatz kopierter Elemente wird nicht angezeigt.
/XO = Schließt ältere Dateien aus.
/XJ = Schließt Abzweigungspunkte aus (werden normalerweise standardmäßig eingeschlossen).
/TEE = Ausgabe an Konsole und LOGFILE
/R:1 = Anzahl von Wiederholungsversuchen bei fehlerhaften Kopiervorgängen. Der Standardwert ist 1 Million.
/W:1 = Wartezeit zwischen Wiederholungsversuchen. Der Standardwert ist 30 Sekunden.
/LOG+:C:\LOGFILE.TXT = Logdatei

Auf alle Fälle setzt Robocopy wieder dort auf, wo die Unterbrechung stattgefunden hat. Auch mitten in einer grossen Datei.
Das Logfile erzählt Dir eventuell, warum das mit dem Kopieren nicht klappt. Die durchaus umfangreiche Hilfe kannst Du mittels 'ROBOCOPY /?' aufrufen. Ein Blick darauf rentiert sich auf alle Fälle.

Und wenn Du den Befehl in ein BATCH einbaust und mittels Scheduled Tasks zyklisch laufen lässt, dann ist das Ziel immer auf dem Laufenden :)
 
Zuletzt bearbeitet:

Tobintax

Benutzer
Mitglied seit
28. Apr 2014
Beiträge
18
Punkte für Reaktionen
1
Punkte
0
Hallo,

wie AndiHeitzer geschrieben hat empfiehlt es sich generell mit dem Schalter /R:X zu arbeiten.

Zusätzlich kannst Du UNC Pfade verwenden (\\servername\share). Ist auch vorteilhaft weil es dann absolute Pfade sind, Laufwerksbuchstaben führen leichter zu einer Verwechslung. Ein vorheriges Extra verbinden ist nur notwendig, wenn der angemeldete User der den Robocopy startet auf dem Ziel bzw. dem Zielshare nicht berechtigt ist.

der Schalter '/MT:8' gilt schon per default und braucht so nicht gesetzt zu werden.
Unabhängig von deinem Screenshot ist Multithreading standardmäßig nicht gesetzt. Es gibt Anwendungsfälle wo dies auch nicht explizit gewünscht ist.

Gruss

Martin
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat