Warum gabelt sich rsync selbst? Und warum ist ein solcher gegabelter Prozess fast untätig (wie in iotop zu sehen)?

11

Dies bezieht sich auf die hier genannte Angelegenheit und ich erlebe das auch.

Auf einem meiner Server habe ich einen rsync ausgeführt, um ein großes Verzeichnis (Größe größer als 300 GB) auf einer anderen Festplatte zu sichern, die auf demselben Computer bereitgestellt ist. Das Verzeichnis, das synchronisiert wird, enthält Tausende von Verzeichnissen und Dateien. Ich habe einen einzelnen rsync-Befehl mit 'nohup' ausgegeben und ihn dann mit dem Befehl '&' in den Hintergrund verschoben. Der vollständige Befehl für die Remote-Bash-Shell (mit Putty) lautete:

nohup rsync -avh /some/local/dir /backup/ >> /opt/rsync.dec22.log &

Um zu überprüfen, mit welcher Geschwindigkeit die Daten kopiert wurden, habe ich den Befehl 'iotop' verwendet und festgestellt, dass 3 rsync mit denselben Parametern ausgeführt wurden. Bei der Suche habe ich den obigen Link gefunden, der besagt, dass es normal ist.

Wenn ich jedoch ein iotop mache, um nur diese und die einzigen auf dem System ausgeführten rsync-Prozesse zu überwachen, sehe ich, dass ein Prozess Dateien liest, einer sie schreibt, aber einer inaktiv ist. Das Verhalten scheint gut zu sein, da ein Prozess immer nur eine Sache gleichzeitig ausführt, aber was macht der dritte Prozess (im Bild unten als der mittlere gesehen)?

Der iotop-Befehl, den ich verwendet hatte, war:

iotop -p22250 -p22251 -p22252

Hier ist der Screenshot für die Ausgabe des iotop-Befehls:

iotop Befehlsausgabe mit 3 rsync Prozess

Ich frage nach dieser Ursache, weil ich rsync häufig verwende und sein Verhalten zum langfristigen Nutzen verstehen möchte. Ich habe sogar das Handbuch gelesen, aber es sagt nichts über das Gabeln aus.

Gautam Somani
quelle

Antworten:

9

rsync ist ein Programm, das als Client und Server konzipiert ist. Der Server liest und der Client schreibt. Stellen Sie sich vor, Sie hätten anstelle eines einzelnen Computers Computer über das Netzwerk. Ich bin sicher, es ist viel klarer, wenn Sie so denken.

Dann ist da noch der Controller. Da E / A-Vorgänge mit einem gewissen Risiko verbunden sind, sollte ein E / A-Problem keine vollständige Blockierung oder einen Absturz verursachen. Es erstellt also eine Abzweigung für jede Verbindung und befindet sich im Hintergrund.

Mürrisch
quelle
Danke für das Wissen. Ich verstehe es aus der Sicht von separaten Computern im Netzwerk, wobei jeder Computer einen Teil der Arbeit synchron erledigt. Aber können Sie mich auch auf die Verhaltensdokumentation verweisen, in der ich mehr über rsync und auch über das Konzept lesen kann? Möchten Sie auch wissen, wie die gelesenen Daten vom Lesevorgang an den Schreibvorgang übergeben werden? Wird das IPC-Konzept verwendet?
Gautam Somani
3
@GautamSomani Die offizielle rsync-Seite wird Ihre beste Quelle für solche sein. rsync.samba.org Die Funktionsweise finden Sie auch hier: rsync.samba.org/how-rsync-works.html Wenn Sie noch weitere Details wünschen, müssen Sie sich wahrscheinlich mit der Quelle befassen .
Mürrisch
Der ursprüngliche Autor startet rsync lokal. Er stellt keine Verbindung zu rsyncd her, daher gibt es keine Möglichkeit, dass der Dämon sein Kind teilt. Und es gibt keine Netzwerkverbindungen. Es ist also immer noch eine Frage, warum Rsync-Gabeln lokal ausgeführt werden. Die Antwort ist irreführend und falsch.
Drookie
@drookie Es spielt keine Rolle, ob es lokal oder über das Netzwerk ist. Es funktioniert genauso. Es erklärt auch dieses Verhalten in dem offiziellen Dokument, das ich direkt über Ihrem Kommentar verlinkt habe. Dort heißt es auch: "Entweder innerhalb einer lokalen Übertragung, über eine Remote-Shell oder über einen Netzwerk-Socket."
Mürrisch