Anwendungs-Software und Apps 14.489 Themen, 73.614 Beiträge

Robocopy - großer Kopiervorgang, Rechner fährt runter, Zustand?

Aphex Junior / 10 Antworten / Baumansicht Nickles

Hi Zusammen,

ich kopiere im Hintergrund über eine geplante Aufgabe via Robocopy eine große Containerdatei Truecrypt über WLAN (ca. 10 GB), wenn Quell-PC und Ziel-PC beide online sind + einige weitere Bedingungen erfüllt sind.

Jetzt kann es aber sein, dass ich - da ich auch nichts mitbekomme und zudem auch gar nichts mitbekommen möchte - einen PC davon herunterfahre, der Kopiervorgang bzw. die Aufgabe aber gerade gestartet hat.

Ich habe jetzt folgendes beobachtet (ich wollte dieses Szenario provozieren und habe den Quell-PC ausgeschaltet beim Kopiervorgang bzw. als ich wusste, dass die Aufgabe gerade aktiv war):

1) Die halbe Containerdatei auf dem Ziel blieb vorhanden, trotz abgebrochenem Kopiervorgang (Quell-PC wurde ausgeschaltet).

2) Die Datei müsste eigentlich korrupt bzw. unfertig sein

3) Die Datei (Containerdatei Truecrypt) lies sich zudem seltsamerweise auch noch mounten

4) Irgendwann (nachdem Quell-PC wieder online war) fing er plötzlich an den Kopiervorgang wieder aufzunehmen (das habe ich daran erkannt, dass die WLAN-Auslastung wieder anstieg + die Containerdatei gesperrt war durch den Schreibvorgang

Jetzt frage ich mich, was ich am besten mache. Eigentlich kann das ja nicht mit rechten Dingen zu gehen. Allein schon, dass sich die Containerdatei "halbfertig" mounten ließ.

Kann man irgendwie einen Befehl oder eine Option setzen, dass er die Datei im Ziel erst schreibt bzw. "freigibt", wenn sie erfolgreich kopiert wurde und ansonsten wieder "löscht" bzw. sowas in der Art? Oder dass der PC wartet bis die Aufgabe abgeschlossen wurde beim Herunterfahren? Das wäre die für mich beste Lösung.

Das muss ja irgendwie sauber lösbar sein. Ich kann schlecht jedesmal gucken, ob er die Datei geschrieben hat und am besten noch Prüfsummen valideren *ankopffass* weil halbfertige und scheinbar funktionierende Containerdateien vorhanden sind.

Vielleicht kann mir ja jmd einen Tipp geben.

PS: Das ganze ist ein C#-Skript und Robocopy wird von C# aus via Process.Start(...) aufgerufen und dann gewartet, bis der Befehl abgeschlossen wurde.

Bin gespannt!

Grüße

bei Antwort benachrichtigen
InvisibleBot Aphex Junior „Robocopy - großer Kopiervorgang, Rechner fährt runter, Zustand?“
Optionen

Starte Robocopy halt über ein Batchscript. Dann geht ein DOS-Fenster auf, wenn der Prozess läuft - nicht zu übersehen.

- Beat the machine that works in your head! -
bei Antwort benachrichtigen
Aphex Junior InvisibleBot „Starte Robocopy halt über ein Batchscript. Dann geht ein ...“
Optionen
Jetzt kann es aber sein, dass ich - da ich auch nichts mitbekomme und zudem auch gar nichts mitbekommen möchte

Das ist für mich keine Lösung @Dos-Fenster. Zumal der Ziel-PC auch ganz woanders stehen kann und ich gar nicht am Quell-PC sitze und somit nicht sehe, was auf dem Quell-PC gerade für "Fenster" offen sind.

bei Antwort benachrichtigen
mi~we Aphex Junior „Robocopy - großer Kopiervorgang, Rechner fährt runter, Zustand?“
Optionen
Oder dass der PC wartet bis die Aufgabe abgeschlossen wurde beim Herunterfahren?

Vielleicht hilft dir da ja ein Tool wie z.B. das hier weiter:

http://www.softwareok.com/?seite=Microsoft/DontSleep

Wenn du das während des Kopiervorgangs auf Quell- und Zielrechner laufen lässt ( müsstest du dann auch noch aus deinem C# Programm heraus starten und beenden ) löst das vielleicht dein Problem.

P.S. Mit welchem "Trick" das Tool einen shutdown verhindert, kann ich dir leider nicht sagen. Sonst könntest du das dann evtl. auch direkt in deinem C# Programm implementieren.

"Es wäre dumm, sich über die Welt zu ärgern. Sie kümmert sich nicht darum." (Marc Aurel)
bei Antwort benachrichtigen
Aphex Junior mi~we „Vielleicht hilft dir da ja ein Tool wie z.B. das hier ...“
Optionen

Kein schlechter Tipp, danke!

Ich bin derweil dabei eine Client-Server Applikation zu basteln, dass wenn Quell-PC anfängt zu kopieren auf dem Client (Ziel-PC) im Systray ein kleiner Ballon rot aufleuchtet, so dass ich zumindest in Kenntniss gesetzt werden, wenn ich mit dem Client (Laptop) rumlaufe und er gerade anfängt zu kopieren. So dass ich dann nicht herunterfahre. Und natürlich ein orangenes "Lämpchen" dass mir den Start ca. 5min vorher ankündigt, dass ich nicht gerade Herunterfahre wenn er gerade angefangen hat zu kopieren.

Wenn ich nicht drauf achte, verhintert es natürlich kein shut-down. Da muss ich mal schauen, evtl. kann man das irgendwie prüfen aus dem C# Programm heraus und dann einfach shutdown - a und gut ist. Aber irgendwie ist das alles komplizierter geworden als ich dachte.

Dabei wollte ich eigentlich nur eine blöde Datei sicher von A nach B zeitgesteuert kopieren Verschlossen

bei Antwort benachrichtigen
Aphex Junior Nachtrag zu: „Kein schlechter Tipp, danke! Ich bin derweil dabei eine ...“
Optionen
bei Antwort benachrichtigen
mi~we Aphex Junior „Kein schlechter Tipp, danke! Ich bin derweil dabei eine ...“
Optionen

Na, wie geht es deinem kleinen Programmierprojekt? Ist schon Licht am Ende des Tunnels zu sehen?Lächelnd

"Es wäre dumm, sich über die Welt zu ärgern. Sie kümmert sich nicht darum." (Marc Aurel)
bei Antwort benachrichtigen
Aphex Junior mi~we „Na, wie geht es deinem kleinen Programmierprojekt? Ist schon ...“
Optionen

Jawoll ich bin fast fertig. Aber das sind schon fast 1000 Zeilen nur für das Kopieren einer Datei :-D

Ich hab das jetzt auch so entwickelt, dass das DOS_Fenster im Hintergrund ist und er mir auf dem Quell PC und Ziel PC jeweils im Tray den Fortschritt anzeigt. Dafür musste der Output von Robocopy ansynchron geparst werden (regex), da Robocopy ja zwischenzeitig den Fortschritt aktualisiert. Das war noch etwas kompliziert.

Das Herunterfahren konnte ich mit C# zwar "abfangen" jedoch nicht blockieren. Bzw. schon, aber er hat drum herum schon alles beendet und dann nur auf das Skript gewartet. Prinzipiell ok aber dann sind Virenscan und Firewall auch schon aus, das gefiel mir nicht. Jetzt habe ich einfach DontSleep gestartet VOR dem Kopiervorgang (auf Quell PC und Ziel PC per TCP Socket Verbindung) und das funktioniert einwandfrei, da DontSleep die Prio so hoch setzt, das DontSleep das Event fürs Herunterfahren als erstes empfängt und blockiert. Vermutlich hätte ich das auch setzen können in C# aber so weiß ich, dass es auf jeden Fall funktioniert.

Aber eigentlich echt gestört, ich will doch nur eine Datei kopieren :-D

Auf dem Ziel-PC muss aber ein "Serverprogramm" beim Systemstart gestartet werden und dauerhaft "lauschen" auf einem bestimmten Port, damit ich vom Quell PC die Tray-Meldungen triggern kann. Ist aber nicht schlimm. Ist jetzt so eine kleine Ampel, die immer anzeigt, ob was kopiert wird oder ob der Vorgang alle Bedingungen "überstanden hat" z. B. Dateiänderungsdatum von Quell-Datei zu Ziel-Datei größer als 7 Tage, und dann auf orange schaltet zum Anzeigen des bald startenden Kopiervorgangs und später dann rot, wenn der Kopiervorgang gerade läuft und Shutdown blockiert ist.

Macht aber Spaß. Das Ergebnis kann sich bisher auch sehen lassen....und vor allem: ich werde noch komfortabel auf alles hingewiesen mit Ankündigung, alles im Tray (nervt also nicht), und das auf Quell PC und Ziel PC. Das bekommt man ja noch nicht mal bei Total Commander oder irgendeinem anderen Kopierprogramm angezeigt :-D

bei Antwort benachrichtigen
mi~we Aphex Junior „Jawoll ich bin fast fertig. Aber das sind schon fast 1000 ...“
Optionen

Gratuliere!

sind schon fast 1000 Zeilen

Au Backe! Dafür hast du es jetzt aber auch richtig luxuriös, sogar mit 'ner coolen kleinen Ampel. Echt schniecke.Lächelnd

"Es wäre dumm, sich über die Welt zu ärgern. Sie kümmert sich nicht darum." (Marc Aurel)
bei Antwort benachrichtigen
Aphex Junior mi~we „Gratuliere! Au Backe! Dafür hast du es jetzt aber auch ...“
Optionen

Wenn du weißt, wie man ein C# Programm kompiliert, kannst du es gerne selbst ausprobieren :)

bei Antwort benachrichtigen
mi~we Aphex Junior „Wenn du weißt, wie man ein C Programm kompiliert, kannst du ...“
Optionen

Sehr nett von dir. Wenn ich mal Bedarf für so was habe, melde ich mich wieder bei dir.

"Es wäre dumm, sich über die Welt zu ärgern. Sie kümmert sich nicht darum." (Marc Aurel)
bei Antwort benachrichtigen