Früher habe ich rsync
viele Dateien kopiert, aber mein Betriebssystem (Ubuntu) wurde unerwartet neu gestartet.
Nach dem Neustart lief ich rsync
wieder, aber von der Ausgabe auf dem Terminal stellte ich fest, dass rsync
noch die zuvor kopierten kopiert wurden. Aber ich habe gehört, dass rsync
es möglich ist, Unterschiede zwischen Quelle und Ziel zu finden und daher die Unterschiede nur zu kopieren. Also frage ich mich in meinem Fall, ob ich rsync
wieder aufnehmen kann, was das letzte Mal übrig geblieben ist?
sudo rsync -azvv /home/path/folder1/ /home/path/folder2
. (3) Quelle und Ziel sind beide NTFS, Kaufquelle ist eine externe Festplatte und Ziel ist eine interne Festplatte. (3) Es läuft jetzt und ist noch nicht fertig.--modify-window
Option hilft dabei).Antworten:
In Bezug auf den Teil "Wiederaufnahme" Ihrer Frage
--partial
weist Sie das empfangende Ende lediglich an, teilweise übertragene Dateien beizubehalten, wenn das sendende Ende verschwindet, als wären sie vollständig übertragen worden.Während der Übertragung von Dateien werden diese vorübergehend als versteckte Dateien in ihren Zielordnern (z. B.
.TheFileYouAreSending.lRWzDC
) oder in einem speziell ausgewählten Ordner gespeichert, wenn Sie den--partial-dir
Schalter einstellen . Wenn eine Übertragung fehlschlägt und--partial
nicht festgelegt ist, verbleibt diese versteckte Datei im Zielordner unter diesem kryptischen Namen. Wenn dies festgelegt--partial
ist, wird die Datei jedoch in den tatsächlichen Zieldateinamen umbenannt (in diesem FallTheFileYouAreSending
), obwohl die Datei ist nicht vollständig. Der Punkt ist, dass Sie die Übertragung später abschließen können, indem Sie rsync erneut mit--append
oder ausführen--append-verify
.Also,
--partial
nicht selbst einen fehlgeschlagenen oder abgebrochenen Übertragung fortzusetzen. Um es fortzusetzen, müssen Sie beim nächsten Lauf eines der oben genannten Flags verwenden. Wenn Sie also sicherstellen müssen, dass das Ziel niemals Dateien enthält, die in Ordnung zu sein scheinen, aber tatsächlich unvollständig sind, sollten Sie nicht verwenden--partial
. Umgekehrt, wenn Sie sicherstellen möchten, dass keine fehlgeschlagenen Dateien im Zielverzeichnis zurückbleiben und Sie wissen, dass Sie die Übertragung später abschließen können, können Sie dies tun--partial
.In Bezug auf den
--append
oben genannten Schalter ist dies der eigentliche "Resume" -Schalter, und Sie können ihn unabhängig davon verwenden, ob Sie ihn auch verwenden oder nicht--partial
. Tatsächlich werden bei der Verwendung--append
keine temporären Dateien erstellt. Dateien werden direkt auf ihre Ziele geschrieben. In dieser Hinsicht erhalten Sie--append
dasselbe Ergebnis wie--partial
bei einer fehlgeschlagenen Übertragung, jedoch ohne die ausgeblendeten temporären Dateien zu erstellen.Also, um es zusammenzufassen, wenn Sie große Dateien in Bewegung sind und Sie wollen , dass die Option eine abgebrochene oder nicht von der exakten Punkt rsync Betrieb wieder aufnehmen , die
rsync
gestoppt wird , müssen Sie die verwenden--append
oder--append-verify
schalten Sie den nächsten Versuch.Wie @Alex weiter unten ausführt, gibt es seit Version 3.0.0
rsync
eine neue Option--append-verify
, die sich so verhält, wie--append
vor dem Bestehen dieses Schalters. Sie möchten wahrscheinlich immer das Verhalten von--append-verify
, also überprüfen Sie Ihre Version mitrsync --version
. Wenn Sie einen Mac verwenden und nichtrsync
von verwendenhomebrew
, verfügen Sie (mindestens bis einschließlich El Capitan) über eine ältere Version und müssen diese verwenden,--append
anstatt--append-verify
. Warum sie das Verhalten nicht beibehalten--append
und stattdessen den Neuling genannt haben,--append-no-verify
ist ein bisschen rätselhaft. So oder so,--append
auf demrsync
vor Version 3 ist das gleiche wie--append-verify
bei den neueren Versionen.--append-verify
ist nicht gefährlich: Es liest und vergleicht immer die Daten an beiden Enden und geht nicht nur davon aus, dass sie gleich sind. Dabei werden Prüfsummen verwendet, wodurch das Netzwerk entlastet wird. Es muss jedoch die gemeinsam genutzte Datenmenge an beiden Enden der Leitung gelesen werden, bevor die Übertragung durch Anhängen an das Ziel fortgesetzt werden kann.Zweitens sagten Sie, dass Sie "gehört haben, dass rsync Unterschiede zwischen Quelle und Ziel finden und daher nur die Unterschiede kopieren kann".
Das ist richtig, und es heißt Delta-Transfer, aber es ist eine andere Sache. Um dies zu aktivieren, fügen Sie den Schalter
-c
oder hinzu--checksum
. Sobald dieser Schalter verwendet wird, überprüft rsync Dateien, die an beiden Enden der Leitung vorhanden sind. Dies geschieht in Stücken, vergleicht die Prüfsummen an beiden Enden und überträgt, wenn sie unterschiedlich sind, nur die unterschiedlichen Teile der Datei. Wie @Jonathan unten ausführt, wird der Vergleich jedoch nur durchgeführt, wenn die Dateien an beiden Enden dieselbe Größe haben. Unterschiedliche Größen führen dazu, dass rsync die gesamte Datei hochlädt und das Ziel mit demselben Namen überschreibt.Dies erfordert anfangs ein wenig Berechnung auf beiden Seiten, kann jedoch bei der Reduzierung der Netzwerklast äußerst effizient sein, wenn Sie beispielsweise häufig sehr große Dateien mit fester Größe sichern, die häufig geringfügige Änderungen enthalten. Beispiele dafür sind Image-Dateien für virtuelle Festplatten, die in virtuellen Maschinen oder iSCSI-Zielen verwendet werden.
Es ist bemerkenswert, dass
--checksum
rsync beim Übertragen eines Stapels völlig neuer Dateien auf das Zielsystem deren Prüfsummen vor dem Übertragen auf dem Quellsystem berechnet. Warum weiß ich nicht :)Also, kurz gesagt:
Wenn Sie verwenden oft rsync nur „Sachen von A nach B bewegen“ und wollen die Möglichkeit , dass die Operation abzubrechen und später wieder aufnehmen, nicht zu verwenden
--checksum
, aber nicht verwenden--append-verify
.Wenn Sie rsync häufig zum Sichern von Daten verwenden, wird die Verwendung
--append-verify
wahrscheinlich nicht viel für Sie bedeuten, es sei denn, Sie haben die Angewohnheit, große Dateien zu senden, die ständig größer werden, aber nach dem Schreiben selten geändert werden. Wenn Sie ein Backup auf einen Speicher erstellen, der Snapshots wiebtrfs
oder unterstütztzfs
, können--inplace
Sie die Snapshot-Größe verringern , indem Sie den Schalter hinzufügen, da geänderte Dateien nicht neu erstellt werden, sondern die geänderten Blöcke direkt über die alten geschrieben werden. Diese Option ist auch nützlich, wenn Sie vermeiden möchten, dass rsync Kopien von Dateien auf dem Ziel erstellt, wenn nur geringfügige Änderungen vorgenommen wurden.Bei Verwendung von
--append-verify
verhält sich rsync genauso wie immer bei allen Dateien gleicher Größe. Wenn sich Änderungen oder andere Zeitstempel unterscheiden, wird das Ziel mit der Quelle überschrieben, ohne dass diese Dateien weiter überprüft werden.--checksum
vergleicht den Inhalt (Prüfsummen) jedes Dateipaares mit identischem Namen und identischer Größe.AKTUALISIERT 01.09.2015 Geändert, um die von @Alex gemachten Punkte wiederzugeben (danke!)
AKTUALISIERT 14.07.2017 Geändert, um die von @Jonathan gemachten Punkte wiederzugeben (danke!)
quelle
--partial
ist genug.--partial-dir
: Sieht so aus, als wäre es die perfekte Kugel dafür. Ich kann etwas völlig verpasst haben;)--partial
: rsync kopiert die Datei in den temporären Namen, die Verbindung wird unterbrochen, der Remote-Rsync verschiebt diese Datei schließlich auf den regulären Namen und beendet sie dann Wird die neue temporäre Datei mit--partial
und ohne erneut ausgeführt--append
, wird sie mit einer Kopie der teilweise übertragenen Remote-Datei initialisiert. Anschließend wird die Kopie an der Stelle fortgesetzt, an der die Verbindung unterbrochen wurde. (Ubuntu 14.04 / rsync 3.1)--checksum
? Demnachman
hat es mehr mit der Entscheidung zu tun, welche Dateien für die Übertragung markiert werden sollen, als mit der Delta-Übertragung (was vermutlichrsync
das Standardverhalten ist).TL; DR:
Geben Sie einfach ein Teilverzeichnis an, wie in den rsync-Manpages empfohlen:
Längere Erklärung:
Es gibt tatsächlich eine eingebaute Funktion, um dies mit der
--partial-dir
Option zu tun , die mehrere Vorteile gegenüber--partial
und--append-verify
/ oder--append
Alternative hat.Auszug aus den rsync-Manpages:
Standardmäßig verwendet rsync einen zufälligen temporären Dateinamen, der gelöscht wird, wenn eine Übertragung fehlschlägt. Wie bereits erwähnt, können
--partial
Sie mit rsync festlegen, dass die unvollständige Datei so bleibt, als ob sie erfolgreich übertragen wurde , sodass sie später mit den Optionen--append-verify
/--append
angehängt werden kann. Dies ist jedoch aus mehreren Gründen nicht optimal.Ihre Sicherungsdateien sind möglicherweise nicht vollständig, und ohne Überprüfung der Remote-Datei, die noch unverändert sein muss, ist dies nicht möglich.
Wenn Sie versuchen,
--backup
und zu verwenden--backup-dir
, haben Sie gerade eine neue Version dieser Datei hinzugefügt, die noch nie zuvor in Ihrem Versionsverlauf beendet wurde.Wenn wir jedoch verwenden
--partial-dir
, behält rsync die temporäre Teildatei bei und setzt den Download mit dieser Teildatei fort, wenn Sie sie das nächste Mal ausführen. Die oben genannten Probleme treten bei uns nicht auf.quelle
Möglicherweise möchten Sie die
-P
Option zu Ihrem Befehl hinzufügen .Von der
man
Seite:Also statt:
Machen:
Wenn Sie die Fortschrittsaktualisierungen nicht möchten, können Sie natürlich einfach
--partial
Folgendes verwenden:quelle
rsync
. Es ist wichtig zu betonen aber, dass--partial
sie nicht selbst ein ausgefallenes Übertragung fortzusetzen. Siehe meine Antwort für Details :)-P
reicht in meinem Fall. Versionen: Client hat 3.1.0 und Server hat 3.1.1. Ich habe die Übertragung einer einzelnen großen Datei mit Strg-C unterbrochen. Ich vermisse etwas.vv
? dhv
2 mal benutzt?-azvvP
?Ich glaube, Sie rufen die gewaltsam an
rsync
und daher werden alle Daten heruntergeladen, wenn Sie sie erneut abrufen. Verwenden Sie die--progress
Option, um nur die Dateien zu kopieren, die nicht kopiert wurden, und die--delete
Option, um alle Dateien zu löschen, wenn sie bereits kopiert wurden und jetzt nicht mehr im Quellordner vorhanden sind.Wenn Sie sich mit ssh bei einem anderen System anmelden und die Dateien kopieren,
Lassen Sie mich wissen, ob ich dieses Konzept falsch verstanden habe ...
quelle
--delete
Löscht Dateien im Ziel , die in der Quelle nicht vorhanden sind. Das weniger ernste ist, dass--progress
es nicht ändert, wie Dinge kopiert werden; Sie erhalten lediglich einen Fortschrittsbericht zu jeder kopierten Datei. (Ich habe den schwerwiegenden Fehler behoben und durch ersetzt--remove-source-files
.)Ich benutze dieses einfache Skript. Fühlen Sie sich frei, bestimmte Flags anzupassen und / oder zu parametrisieren.
quelle
Ich bin zu spät gekommen, hatte aber die gleiche Frage und fand eine andere Antwort.
Das
--partial
Flag ("Teilweise übertragene Dateien behalten"rsync -h
) ist nützlich für große Dateien, wie es ist--append
("Daten an kürzere Dateien anhängen"), aber die Frage betrifft eine große Anzahl von Dateien.Um bereits kopierte Dateien zu vermeiden, verwenden Sie
-u
(oder--update
: "Dateien überspringen, die auf dem Empfänger neuer sind").quelle