Rsync partiell (-P / - partiell) bei einer unterbrochenen Übertragung fortsetzen
Ich versuche, meine backup-Datei-server mit einem Remote-Datei-server mit rsync. Rsync ist nicht erfolgreich fortsetzen, wenn eine übertragung unterbrochen. Ich benutzte die partial-option, aber rsync nicht finden die Datei schon ging es Los, denn es benennt es in eine temporäre Datei und wenn wieder es erstellt eine neue Datei und beginnt von Anfang an.
Hier ist mein Befehl:
rsync -avztP -e "ssh -p 2222" /volume1/myaccont@backup-server-1:/home/myaccount/backup/--exclude "@spool" --exclude "@tmp"
Wenn dieser Befehl gestartet wird, wird eine backup-Datei mit dem Namen OldDisk.dmg von meinem lokalen Rechner erstellt, auf dem remote-Rechner so etwas wie .OldDisk.dmg.SjDndj23.
Nun, wenn die internet Verbindung unterbrochen wird und ich wieder die transfer, ich habe, um herauszufinden, wo rsync Links ab, durch das finden der temp-Datei, wie .OldDisk.dmg.SjDndj23 und benennen Sie es um OldDisk.dmg so sieht, daß es existiert bereits eine Datei, die es wieder aufnehmen kann.
Wie kann ich dies beheben, damit ich nicht haben, um manuell eingreifen, jedes mal?
InformationsquelleAutor der Frage Glitches | 2013-05-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
TL;DR: Verwenden Sie
--timeout=X
(X in Sekunden) zu ändern, den Standard-rsync-server timeout, nicht--inplace
.Das Problem ist der rsync-server-Prozesse (von denen gibt es zwei, siehe
rsync --server ...
imps
- Ausgang am receiver) weiter ausgeführt, zu warten, für den rsync-client zum senden von Daten.Wenn der rsync-server-Prozesse erhalten keine Daten für eine ausreichende Zeit, werden Sie wirklich timeout selbst beenden und Bereinigung durch das verschieben der temporären Datei, um es in den "richtigen" Namen (z.B., keine temporären suffix). Sie werden dann in der Lage, um fortzufahren.
Wenn Sie nicht wollen, zu warten, für die lange Standard-timeout zu bewirken, dass der rsync-server, um sich selbst zu beenden, dann, wenn Ihre internet-Verbindung gibt, sich am server einloggen, und bereinigen Sie den rsync-server, die Prozesse manuell. Jedoch, Sie muss höflich beenden rsync -- ansonsten wird es nicht verschieben Sie die Datei nur teilweise in Platz, sondern eher, es zu löschen (und somit gibt es keine Datei fortsetzen). Höflich Fragen rsync zu beenden, nicht
SIGKILL
(z.B.-9
), aberSIGTERM
(z.B.pkill -TERM -x rsync
- nur ein Beispiel, sollten Sie darauf achten, passen nur die rsync-Prozesse mit Ihrem Kunden).Glücklicherweise gibt es eine einfachere Möglichkeit: verwenden Sie die
--timeout=X
(X in Sekunden) option; es übergeben wird, um den rsync-server und-Prozesse sowie.Zum Beispiel, wenn Sie angeben
rsync ... --timeout=15 ...
sowohl die client-und server-rsync-Prozesse werden sauber beendet, wenn Sie nicht senden/empfangen von Daten in 15 Sekunden. Auf dem server, dies bedeutet das verschieben der temporären Datei in position, bereit für die Fortsetzung.Ich bin nicht sicher, der Standard-timeout-Wert der verschiedenen rsync-Prozesse werden versuchen, Sie zu senden/empfangen von Daten, bevor Sie sterben (es kann je nach Betriebssystem). In meinen Tests, die server-rsync-Prozesse weiterhin ausgeführt, mehr als auf dem lokalen client. Auf ein "Totes" Netzwerk-Verbindung, beendet der client mit einer Defekten Rohrleitung (z.B. kein Netzwerk-Buchse) nach etwa 30 Sekunden; Sie Experimentieren konnten, oder überprüfen Sie den Quellcode. Bedeutung, könnten Sie versuchen, "ride out" das schlechte internet Verbindung für 15-20 Sekunden.
Wenn Sie nicht reinigen bis der server rsync-Prozesse (oder warten, bis Sie sterben), aber anstatt sofort zu starten, einen anderen rsync-client-Prozess, werden zwei zusätzliche server-Prozesse starten (für das andere Ende Ihres neuen client-Prozess). Insbesondere für die neue rsync-client nicht wieder verwenden/wieder verbinden, um die vorhandenen rsync-server-Prozesse. Somit haben Sie zwei temporäre Dateien (und vier rsync-server-Prozesse) - aber nur die neuere, zweite temporäre Datei neue Daten geschrieben werden (erhielt von Ihrem neuen rsync-client-Prozess).
Interessant, wenn Sie dann sauber bis alle rsync-server Prozesse (zum Beispiel, halten Sie Ihr client angehalten wird, das neue rsync-Server, dann
SIGTERM
den älteren rsync-Server, es erscheint zu mischen (assemblieren) alle partiellen Dateien in den neuen richtigen Datei Namen. Also, stellen Sie sich eine lange andauernde partielle Kopie, die stirbt (und Sie denken, Sie haben "verloren" die kopierten Daten), und eine kurze Ausführung neu aufgelegt, rsync (Huch!).. stoppen Sie den zweiten client,SIGTERM
den ersten Server, es werden die Daten zusammengeführt werden, und Sie können Sie fortsetzen.Abschließend ein paar kurze Bemerkungen:
--inplace
zu umgehen. Sie wird ohne Zweifel haben andere Probleme als Ergebnisman rsync
für die details.-t
in den rsync-Optionen ist überflüssig, es wird angedeutet durch-a
.--checksum
/-c
es wird Ihnen nicht helfen in diesem Fall. Es wirkt wie rsync entscheidet, ob es sollte übertragen von Dateien. Obwohl, nach einer ersten rsync beendet ist, können Sie laufen konnte zweiten rsync mit-c
darauf zu bestehen, Prüfsummen, um zu verhindern, dass der merkwürdige Fall, dass die Datei-Größe und modtime sind die gleichen auf beiden Seiten, aber schlechte Daten geschrieben wurde.InformationsquelleAutor der Antwort Richard Michael
Sorry, aber die anderen Antworten hier sind zu kompliziert :-7.
Eine einfachere Antwort, die für mich arbeiten: (mit rsync über -e ssh)
Funktioniert auch, wenn der Rückkehr aus dem scp, die unterbrochen wurde.
Rsync erstellt eine temporäre Datei ... Die temporäre Datei wächst schnell zu einer Größe von teilweise übertragene Datei. Übertragung wird fortgesetzt.
Scp schreibt, um das eigentliche Ziel-Datei . Wenn die übertragung unterbrochen wird, dies ist eine abgeschnittene Datei.
Erklärung args:
-avhz .. h=humanoid, v=verbose, a=Archiv, z=Kompression
.. Archiv anweist, es zu erhalten time_t-Werte, so dass selbst wenn die Uhren sind aus rsync kennt das wahre Datum der jeweiligen Datei
-P ist die Abkürzung für --partial --progress.
--partial sagt rsync zu halten, teilweise übertragenen Dateien (und nach Wiederaufnahme rsync verwenden teilweise übertragene Dateien immer nach Prüfsummenbildung sicher)
Von man-Seiten:
http://ss64.com/bash/rsync_options.html
HINWEIS: eine Verbindung, die unterbrochen wird mehrmals:
Wenn Sie braucht, um wieder nach rsync (nachdem die Verbindung unterbrochen wird), dann ist es am besten benennen Sie die temporäre Datei auf dem Ziel. scp erstellt eine Datei auf dem Ziel mit demselben Namen wie die endgültige Datei. Wenn scp unterbrochen wird diese Datei ist eine gekürzte version der Datei. Ein rsync (-avzhP) wird wieder aus dieser Datei aber zu schreiben beginne, um einen temporären Dateinamen wie ..Yhg7al.
Prozedur beim starten mit scp:
Prozedur beim starten mit rsync:
InformationsquelleAutor der Antwort gaoithe
Ich fand, dass das hinzufügen --inplace-Updates. Nicht sicher, wie Sie Sie --teilweise funktionieren soll, ohne das es doch wieder meine transfers. Meine Dateien sind immer noch ziemlich groß, obwohl, und ich Frage mich, ob ich am Ende mit korrupten Dateien, wenn eine übertragung beginnt und Stunden später ein weiterer transfer startet aber sieht eine unvollständige Datei und nicht wissen, seine derzeit hochgeladen werden, welche dann beginnt das hinzufügen von bytes. Weiß es jemand? Vielleicht einige bash-Skript zum protokollieren von aktuellen Prozess-id und nicht anderen übertragen?
InformationsquelleAutor der Antwort Glitches
wenn du Angst hast, korrupte Dateien nach einem Lebenslauf, könnte man hinzufügen
--checksum
zu zwingen, es zu tun Prüfsummenbildung auf die gesamte Datei, jedes mal. In der Tat, es kostet Sie einige Datenträger-E /a-und CPU-Zyklen, sondern nur eine leichte Netzwerk-overhead.InformationsquelleAutor der Antwort mogul