Frage Gesamten Fortschritt bei rsync anzeigen: Ist das möglich?


Ich habe bereits nach dieser Option gesucht, habe aber nur Lösungen gefunden, die mit einbeziehen benutzerdefiniertes Patchen. Die Tatsache, dass es nicht in --help angezeigt wird und keine weiteren Informationen gefunden werden können, deutet darauf hin, dass die Antworten "nein" sind, aber ich würde es gerne bestätigt sehen.

Ist es möglich zu zeigen? gesamter Dateiübertragungsfortschritt mit rsync?


195
2018-01-05 15:26


Ursprung


Seit rsync 3.1.0 ist jetzt ein grundlegender Gesamt-Dateitransfer-Fortschritt enthalten. Siehe Antwort serverfault.com/a/441724/107793 für Details. - Florian Feldhaus
Bitte ändern Sie die angenommene Antwort. @ Davids Antwort ist völlig nutzlos. - Navin


Antworten:


Danakim hat Recht. Es gibt keine trivialen Möglichkeiten, einen Gesamtfortschrittsindikator hinzuzufügen.

Der Grund dafür ist, dass wenn rsync eine Liste der zu synchronisierenden Dateien durchsucht, es 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 Arbeit zu erhalten, die erledigt werden muss.

Mit anderen Worten, der einfachste Weg, um zu berechnen, wie viel Arbeit dort getan werden muss, ist, es tatsächlich zu tun.


33
2018-01-06 04:10



Sie könnten immer noch einen einfachen Indikator haben wie (Daten übertragen + Daten übersprungen) / (Gesamtdaten in der Quelle) oder (# Dateien übertragen oder übersprungen) / (# Dateien in der Quelle). Es wird nicht besonders genau sein, aber es würde eine Idee geben. Gut, wenn Sie am Ende des Tages einen großen Transfer machen und sich fragen, ob Sie warten und den Computer ausschalten oder ihn für die Nacht laufen lassen sollten ... - naught101
Ich glaube nicht, dass diese Schlussfolgerung richtig ist. Ich denke @naught101 ist der Frage gerechter, und ich denke, eine Antwort auf nicht verwenden zu behaupten --size-onlyoder dergleichen ist weiter ungenau. - Evan Carroll
Zu der Zeit, als ich die Antwort geschrieben habe, war es korrekt - rsync hatte keinen Mechanismus für eine Fortschrittsanzeige. Und ja, du könntest deine eigenen schreiben, aber sehr wenige würden es tun. - David Mackintosh
Kommentar für Neuankömmlinge: Es ist jetzt möglich: serverfault.com/a/441724/422003 - imposeren


Es gibt jetzt eine offizielle Möglichkeit, dies in rsync zu tun (Version 3.1.0 Protokoll Version 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 meiner versucht /usr Ordner, weil ich diese Funktion für die Übertragung von ganzen Dateisystemen wollte, und /usr schien eine gute repräsentative Probe zu sein.

Das --info=progress2 ergibt einen schönen Gesamtprozentwert, auch wenn es nur ein Teilwert ist. In der Tat, mein /usr Ordner ist mehr als 6 Gigs:

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

und rsync nahm viel Zeit, um alles zu scannen. So war die Prozentzahl, die ich gesehen habe, fast immer zu 90% erreicht, aber trotzdem ist es beruhigend zu sehen, dass etwas kopiert wird :)

Verweise:


312
2017-10-24 11:13



Beachten Sie, dass dies in 3.1.0 gelandet ist. Es ist auch wichtig zu beachten, dass dies in der Zeitperspektive nicht unbedingt genau ist. Es zeigt im Wesentlichen die Menge der Daten an, für die am Remote-Ende verifiziert wurde. Und die Rate ist die Geschwindigkeit, mit der die Daten am entfernten Ende als richtig erkannt werden (ob es bereits so war oder die neuen Daten übertragen und korrekt gemacht wurden). Also, obwohl sehr nützlich, müssen Sie die Vorbehalte verstehen. - Kevin Cox
Um dies auf OSX mit Homebrew zu verwenden, "Brew tippen Homebrew / Duples; Brauen installieren Rsync" - Matt Carrier
Bemerkenswert --info=progress2 funktioniert nicht mit -v - sanmai
Ergänzen Sie die --no-i-r schalte auch, so rsync scannt nicht inkrementell, sondern komplett vor dem Kopieren und zeigt + an, wieviel Arbeit noch übrig ist. - Alex
Beachten Sie, dass Sie verwenden können --human-readable (oder -h) um die Gesamtgröße in MB / GB zu sehen .. in Bearbeitung. - Nux


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 besteht darin, eine Zeile pro Datei, die von rsync "übertragen" wurde, auszugeben und diese Zeilen mit "pv" zu zählen:

rsync -ai / Quelle remote: / dest | pv -les [Anzahl der Dateien]> / dev / null

Ich neige dazu, ganze Dateisysteme zu sichern (aus verschiedenen Gründen), in diesem Fall können Sie das viel billiger nutzen df um die Anzahl der Dateien zu erhalten (anstatt du oder find das wird Ihre Quellenhierarchie ein anderes Mal durchqueren, nachdem rsync es getan hat). Die Option -x scheint sicherzustellen, dass rsync im selben Quelldateisystem bleibt (und anderen inneren Mounts nicht folgt):

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

Wenn Sie Dateien in / source allgemein zählen möchten, verwenden Sie find /source|wc -l (Warnung erneut: möglicherweise langsam und schwer auf E / A).


42
2018-06-10 10:22



Wie zerodez angegeben, verwenden Sie "df" nur, wenn Sie die gesamte Partition rsyncing, als df -i /source Ruft die Anzahl der Inodes (Dateien) von der gesamten Partition ab, in der sich / source befindet. Ansonsten verwenden 'find' um Dateien in einem Verzeichnis zu zählen innerhalb des Ausdrucks "$ ()". - lepe
Eine Alternative zu du oder find - Nehmen wir an, du beendest eine unvollständige Kopie oder führst ein In-Place-Update mit Löschvorgängen durch - ist zu verwenden rsync -ai --dry-run Um die gleiche Dateiliste zu erhalten, wird der Hauptlauf an übergeben pv - Izkata


Für lange Transfers bin ich glücklich mit dem Laufen du -s auf beiden Seiten. Sogar watch -n1 du -swenn ich wirklich ängstlich bin.

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


28
2018-01-05 16:30



Danke für das Beispiel der watch Befehl! - Cam
// , Klug! Laut linfo.org: "Der Befehl du (dh Datenträgerverwendung) meldet die Größe der Verzeichnisbäume einschließlich ihres gesamten Inhalts und der Größe der einzelnen Dateien. Dies macht sie nützlich, um Speicherfresser, dh Verzeichnisse und Dateien, aufzuspüren die großen oder übermäßigen Speicherplatz auf einer Festplatte (HDD) oder anderen Speichermedien verbrauchen. " - Nathan Basanese
Ich weiß nicht, welche Art von langen Transfers du tust, wo du lebensfähig bist. Du bist langsam wie die Hölle, wenn das Ergebnis in TB und M von Dateien sein wird. - Nobody
Für meine "langen Übertragungen" dauert eine Du-Operation ungefähr eine Stunde, während der rsync viel langsamer läuft, weil sie sich um den Zugriff auf die Festplatte streiten. - Abhi Beckert


Zusammen mit --info = Fortschritt2 Du kannst auch Deaktivieren Sie die inkrementelle Rekursion. Dadurch wird die gesamte Dateiliste am Anfang erstellt und gibt Ihnen eine bessere Vorstellung vom Gesamtfortschritt (zumindest in der Anzahl der Dateien, ich glaube nicht, dass es die Dateigröße scannt). Es gibt einen Kompromiss. Dies ist mehr speicherintensiv und verzögert den Beginn der tatsächlichen Übertragung. Wahrscheinlich am besten in Verbindungen mit langsameren Verbindungen und sicherlich nicht für große Dateien.

Das Folgende ist von rsync Manpage unter dem Detail für -r - rekursiv

Inkrementelle Rekursion kann mit der Option deaktiviert werden --no-inc-rekursiv Option oder seine kürzere - Nein-ich-r alias.

(Quelle: http://rsync.samba.org/ftp/rsync/rsync.html )

Wenn Sie --delete angeben, wird außerdem die vollständige Rekursion am Anfang erzwungen, die zum Löschen von verwaisten Dateien erforderlich ist (Dateien, die im Ziel, aber nicht in der Quelle vorhanden sind).


20
2017-10-16 19:56



Danke dafür, die anderen Antworten führen zu einem% -Zeitalter, das ständig steigt und sinkt! - artfulrobot


Grundsätzlich nein. Sie können den Fortschritt pro Datei nur mit dem Flag --progress anzeigen, aber das ist es.

Ich schätze, Sie können einen Wrapper darum schreiben oder einen der Patches verwenden, die Sie bereits gefunden haben, aber Sie müssen sich fragen, ob es sich wirklich lohnt, brauchen Sie wirklich einen Fortschritt für rsync?


11
2018-01-05 15:50



Hier ist ein Wrapper-Skript, das den Gesamtfortschritt und den Dateifortschritt als nette Fortschrittsleiste anzeigt: gist.github.com/JohannesBuchner/4d61eb5a42aeaad6ce90 - j13r
Sie können den Weg ändern --progress arbeiten mit --info=progress2Es zeigt dir den globalen Fortschritt. Sie müssen den inkrementellen rekursiven Algorithmus deaktivieren, damit er nützlich ist --info=progress2 --no-inc-recursive - mat
@ j13r können Sie diesen Gedanken auch als Antwort teilen! seine großartige Option! - skywinder


Ich suchte auch, wie man den Gesamtfortschritt mit rsync zeigt, und ich habe eine nützliche Antwort von diesem Beitrag gefunden: https://stackoverflow.com/questions/7157973/monitoring-rsync-progress

Grundsätzlich können Sie verwenden --info = Fortschritt2 in der Entwicklerversion von rsync 3.1.0. Hier ist was Dok hat gesagt:

Es gibt auch eine Option --info = progress2, die Statistiken basierend auf der gesamten Übertragung ausgibt, anstatt einzelne Dateien. Verwenden Sie dieses Flag, ohne einen Dateinamen auszugeben (zB meiden -v oder geben Sie --info = name0 an, wenn Sie sehen möchten, wie die Übertragung abläuft, ohne den Bildschirm mit vielen Namen zu scrollen. Fortschrittsoption, um --info = progress2 zu verwenden.)


7
2017-07-04 14:30



--info=name0 ist Gold - ipatch


Ich habe die Antwort von zerodeux benutzt und mein eigenes kleines Bash-Skript geschrieben:

#!/bin/bash

RSYNC="ionice -c3 rsync"
# don't use --progress
RSYNC_ARGS="-vrltD --delete --stats --human-readable"
SOURCES="/dir1 /dir2 /file3"
TARGET="storage::storage"

echo "Executing dry-run to see how many files must be transferred..."
TODO=$(${RSYNC} --dry-run ${RSYNC_ARGS} ${SOURCES} ${TARGET}|grep "^Number of files transferred"|awk '{print $5}')

${RSYNC} ${RSYNC_ARGS} ${SOURCES} ${TARGET} | pv -l -e -p -s "$TODO"

7
2018-02-07 23:44