Perché rsync si forca da solo? E perché uno di questi processi biforcati è quasi inattivo (come visto in iotop)?


11

Questo si riferisce alla questione dichiarata qui e anch'io sto vivendo la stessa cosa.

In uno dei miei server, ho eseguito un rsync, per eseguire il backup di una directory enorme (dimensioni superiori a 300 Gb) su un disco diverso, montato sulla stessa macchina. La directory in fase di risincronizzazione contiene migliaia di directory e file. Ho emesso un singolo comando rsync, con 'nohup' e poi l'ho spinto in background usando il comando '&'. Il comando completo fornito sulla shell bash remota (usando putty) era:

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

Quindi, solo per verificare a quale velocità venivano copiati i dati, ho usato il comando 'iotop' e ho scoperto che c'erano 3 rsync in esecuzione con gli stessi parametri. Durante la ricerca ho trovato il link sopra che dice che è normale.

Ma facendo un iotop per monitorare solo quelli e gli unici processi rsync in esecuzione sul sistema, vedo che un processo sta leggendo i file, uno li sta scrivendo, ma uno è inattivo. Il comportamento sembra essere buono, poiché un processo fa solo una cosa alla volta, ma cosa sta facendo il terzo processo (visto come quello centrale nell'immagine sotto)?

Il comando iotop che avevo usato era:

iotop -p22250 -p22251 -p22252

Ecco lo screenshot per l'output del comando iotop:

Output del comando iotop che mostra il processo 3 rsync

Lo sto chiedendo perché uso molto rsync e voglio comprenderne il comportamento a beneficio a lungo termine. Ho anche letto il manuale, ma non dice nulla del fork.

Risposte:


9

rsync è un programma progettato per essere un client e un server. Il server legge e il client scrive. Immagina che invece di un singolo computer, tu avessi i computer in rete, sono sicuro che è molto più chiaro se la pensi così.

Quindi c'è il controller. Poiché le operazioni di I / O tendono a comportare un certo livello di rischio, un problema di I / O non dovrebbe causare il blocco totale o un arresto anomalo. Quindi, crea un fork per ogni connessione e si trova in background.


Grazie per la conoscenza Lo capisco dal punto di vista dei computer separati sulla rete, ogni computer che fa una parte del lavoro in sincronia. Ma puoi anche riferirmi alla documentazione comportamentale in cui posso leggere altre cose del genere su rsync e anche sul concetto? Inoltre, vorrei sapere come vengono trasferiti i dati di lettura dal processo di lettura al processo che sta scrivendo? Viene utilizzato il concetto di IPC?
Gautam Somani,

3
@GautamSomani La pagina rsync ufficiale sarà la tua migliore fonte per questo. rsync.samba.org Inoltre, il modo in cui funziona è disponibile qui: rsync.samba.org/how-rsync-works.html Se vuoi ulteriori dettagli, probabilmente devi scavare nella fonte.
Grumpy,

L'autore originale avvia rsync localmente. Non si connette a rsyncd, quindi non c'è modo che il demone biforchi suo figlio. E non ci sono connessioni di rete. Quindi è ancora una domanda il motivo per cui le forcelle rsync vengono eseguite localmente. La risposta è fuorviante e sbagliata.
drookie

@drookie Non importa se è locale o in rete. Funziona allo stesso modo. Spiega anche questo comportamento nel documento ufficiale che ho collegato proprio sopra il tuo commento, che dice anche "o all'interno di un trasferimento locale, tramite una shell remota o tramite un socket di rete".
Scontroso
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.