GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Gesamtfortschritt in rsync anzeigen:ist das möglich?

Lösung 1:

Dafür gibt es jetzt eine offizielle Möglichkeit in rsync (Version 3.1.0 Protokollversion 31, getestet mit Ubuntu Trusty 14.04).

#> ./rsync -a --info=progress2 /usr .
    305,002,533  80%   65.69MB/s    0:00:01  xfr#1653, ir-chk=1593/3594)

Ich habe es mit meinem /usr versucht Ordner, weil ich diese Funktion zum Übertragen ganzer Dateisysteme haben wollte, und /usr schien eine gute repräsentative Stichprobe zu sein.

Die --info=progress2 ergibt einen schönen Gesamtprozentsatz, auch wenn es nur ein Teilwert ist. Tatsächlich meine /usr Ordner ist mehr als 6 GB:

#> du -sh /usr
6,6G    /usr/

und rsync Es hat viel Zeit gedauert, alles zu scannen. Also war der Prozentsatz, den ich gesehen habe, fast immer bei etwa 90 % abgeschlossen, aber trotzdem ist es beruhigend zu sehen, dass etwas kopiert wird :)

Referenzen:

  • https://stackoverflow.com/a/7272339/1396334
  • https://download.samba.org/pub/rsync/NEWS#3.1.0

Lösung 2:

Das Folgende gilt für rsync Version 3.0.0 und höher. Die unten beschriebenen Optionen wurden in dieser Version am 1. März 2008 eingeführt.

Zusammen mit --info=progress2 Sie können auch --no-inc-recursive verwenden Option (oder das kürzere --no-i-r alias), um die inkrementelle Rekursion zu deaktivieren.

Dadurch wird die gesamte Dateiliste am Anfang erstellt, anstatt im Laufe der Übertragung schrittweise weitere Dateien zu entdecken. Da es alle Dateien vor dem Start kennt, gibt es einen besseren Bericht über den Gesamtfortschritt. Dies gilt für die Anzahl der Dateien - es wird kein Fortschritt basierend auf der Dateigröße gemeldet.

Dies beinhaltet einen Kompromiss. Das Erstellen der gesamten Dateiliste im Voraus ist speicherintensiver und kann den Start der eigentlichen Übertragung erheblich verzögern. Wie zu erwarten, je mehr Dateien vorhanden sind, desto länger ist die Verzögerung und desto mehr Speicher wird benötigt.

Folgendes ist aus dem rsync-Handbuch (Quelle - http://rsync.samba.org/ftp/rsync/rsync.html ):

-r, --rekursiv

Dies weist rsync an, Verzeichnisse rekursiv zu kopieren. Siehe auch --dirs (-d). Beginnend mit rsync 3.0.0 ist der verwendete rekursive Algorithmus nun ein inkrementeller Scan, der viel weniger Speicher verbraucht als zuvor und mit der Übertragung beginnt, nachdem der Scan der ersten paar Verzeichnisse abgeschlossen ist. Dieser inkrementelle Scan wirkt sich nur auf unseren Rekursionsalgorithmus aus und ändert keine nicht rekursive Übertragung. Es ist auch nur möglich, wenn beide Seiten der Übertragung mindestens Version 3.0.0 sind.

Einige Optionen erfordern, dass rsync die vollständige Dateiliste kennt, daher deaktivieren diese Optionen den inkrementellen Rekursionsmodus. Dazu gehören:--delete-before, --delete-after, --prune-empty-dirs und --delay-updates. Aus diesem Grund ist der standardmäßige Löschmodus, wenn Sie --delete angeben, jetzt --delete-during, wenn beide Enden der Verbindung mindestens 3.0.0 sind (verwenden Sie --del oder --delete-during, um diesen verbesserten Löschmodus anzufordern ausdrücklich). Siehe auch die Option --delete-delay, die eine bessere Wahl ist als die Verwendung von --delete-after.

Inkrementelle Rekursion kann mit --no-inc-recursive deaktiviert werden Option oder das kürzere --no-i-r Pseudonym.

Siehe auch https://rsync.samba.org für spezifische Versionsunterschiede (scrollen Sie nach unten und sehen Sie sich die Release-News-Links an).

Lösung 3:

Sie können mit 'pv' (apt-get install pv mit Debian und Ubuntu). Ich empfehle, die Anzahl der übertragenen Dateien zu überwachen, da die übertragene Datenmenge nicht mit der Größe der Dateien, sondern mit dem Delta zwischen Quelle und Ziel korreliert. Und das Zählen von Dateien zählt den gleichen Fortschritt für ein großes Delta und ein anderes mit kleinem Delta. Was bedeutet, dass die ETA-Schätzung in jedem Fall weit entfernt sein könnte. Die größenbasierte ETA funktioniert nur, wenn Ihr Ziel leer ist, in diesem Fall Delta ==Größe der Quelle.

Die allgemeine Idee ist, eine Zeile pro von rsync 'übertragener' Datei auszugeben und diese Zeilen mit 'pv' zu zählen:

rsync -ai /source remote:/dest | pv -les [number of files] >/dev/null

Ich neige dazu, ganze Dateisysteme zu sichern (aus mehreren Gründen), in diesem Fall können Sie das viel billigere df verwenden um die Anzahl der Dateien zu erhalten (statt du oder find die Ihre Quellhierarchie ein weiteres Mal durchlaufen wird, nachdem rsync dies getan hat). Die Option -x scheint sicherzustellen, dass rsync auf demselben Quelldateisystem bleibt (und nicht anderen inneren Mounts folgt):

rsync -aix /source remote:/dest | pv -les $(df -i /source | perl -ane 'print $F[2] if $F[5] =~ m:^/:') >/dev/null

Wenn Sie Dateien in /source allgemein zählen möchten, verwenden Sie find /source|wc -l (Nochmals Warnung:könnte langsam und I/O-lastig sein).

Lösung 4:

danakim hat recht. Es gibt keine einfachen Möglichkeiten, eine Gesamtfortschrittsanzeige hinzuzufügen.

Der Grund dafür ist, dass rsync, wenn es sich eine Liste der zu synchronisierenden Dateien ansieht, nicht im Voraus weiß, welche Dateien geändert werden müssen. Wenn Sie Delta-Transfers durchführen, müssen die Deltas selbst im Voraus berechnet werden, um ein Gesamtbild der zu erledigenden Arbeit zu erhalten.

Mit anderen Worten, der einfachste Weg, um zu berechnen, wie viel Arbeit zu erledigen ist, besteht darin, sie tatsächlich zu erledigen.

Lösung 5:

Für lange Übertragungen bin ich mit du -s zufrieden auf beiden Seiten. Sogar watch -n1 du -s , wenn ich wirklich ängstlich bin.

watch führt einen Befehl aus (du -s hier) periodisch (hier alle 1 Sekunde) und zeigt die Ausgabe im Vollbildmodus.


Linux
  1. Umgebung eines laufenden Prozesses ändern?

  2. Ist es möglich, ältere Versionen von Bash zu emulieren?

  3. Wie überprüfe ich den Fortschritt des Laufens von Cp?

  4. Wie kann man Rsync selektiv stumm schalten?

  5. Wie plane ich einen Rsync-Befehl?

Linux Mint KDE noch möglich

Rsync zeigt Fortschrittsbalken beim Kopieren von Dateien unter Linux an

Ist es möglich, / in einem Dateinamen zu verwenden?

Rsync-freundliches gzip

Ist es möglich, eine Adresse:Port zu pingen?

Warum ist mein rsync so langsam?