Por que o rsync se bifurca? E por que um desses processos bifurcados está quase meio ocioso (como visto no iotop)?

11

Isso se refere ao assunto declarado aqui e também estou enfrentando o mesmo.

Em um dos meus servidores, executei um rsync para fazer backup de um diretório enorme (tamanho maior que 300 Gb) em um disco diferente, montado na mesma máquina. O diretório sendo rsynced contém milhares de diretórios e arquivos. Emiti um único comando rsync, com 'nohup' e depois o empurrei em segundo plano usando o comando '&'. O comando completo fornecido no shell bash remoto (usando putty) foi:

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

Então, apenas para verificar a que taxa os dados estavam sendo copiados, usei o comando 'iotop' e descobri que havia 3 rsync em execução com os mesmos parâmetros. Na pesquisa eu encontrei o link acima, que diz que é normal.

Mas, fazendo um iotop para monitorar apenas esses e os únicos processos rsync em execução no sistema, vejo que um processo está lendo arquivos, um está gravando, mas um está ocioso. O comportamento parece ser bom, pois um processo faz apenas uma coisa de cada vez, mas o que o terceiro processo está fazendo (visto como o meio na imagem abaixo)?

O comando iotop que eu tinha usado era:

iotop -p22250 -p22251 -p22252

Aqui está a captura de tela para a saída do comando iotop:

Saída do comando iotop mostrando o processo 3 rsync

Estou perguntando por isso, uso muito o rsync e quero entender seu comportamento para obter benefícios a longo prazo. Eu até li o manual, mas ele não diz nada sobre o garfo.

Gautam Somani
fonte

Respostas:

9

O rsync é um programa projetado para ser um cliente e servidor. O servidor lê e o cliente grava. Imagine que, em vez de um único computador, você tenha computadores através da rede, tenho certeza de que fica muito mais claro se você pensa assim.

Depois, há o controlador. Como as operações de E / S tendem a apresentar certa quantidade de risco, um problema de E / S não deve causar bloqueio total ou falha. Portanto, ele cria um fork para cada conexão e fica em segundo plano.

Mal humorado
fonte
Obrigado pelo conhecimento. Entendo isso na visão de computadores separados na rede, cada computador fazendo parte do trabalho em sincronia. Mas você também pode me referir à documentação de comportamento em que posso ler mais sobre o rsync e também sobre o conceito? Também gostaria de saber como os dados de leitura são transmitidos pelo processo de leitura para o processo que está gravando? O conceito de IPC está sendo usado?
Gautam Somani
3
@GautamSomani A página oficial do rsync será sua melhor fonte para isso. rsync.samba.org Além disso, a maneira como funciona está disponível aqui: rsync.samba.org/how-rsync-works.html Se você quiser mais detalhes, provavelmente precisará procurar na fonte.
Rabugento
O autor original inicia o rsync localmente. Ele não se conecta ao rsyncd, então não há como o daemon bifurcar seu filho. E não há conexões de rede. Portanto, ainda é uma pergunta por que o rsync bifurca quando executado localmente. A resposta é enganosa e errada.
21819 drookie
@drookie Não importa se é local ou através da rede. Isso funciona do mesmo jeito. Ele também explica esse comportamento no documento oficial que vinculei logo acima do seu comentário, que também diz "dentro de uma transferência local, por meio de um shell remoto ou por um soquete de rede".
Rabugento