Eu tenho um servidor XBian (versão Raspberry Pi do Debian) rodando rsync via inetd (não o daemon nativo). Eu estou servindo um par de diretórios em um sistema de arquivos ext4 (em um disco USB) como módulos individuais (os módulos em questão têm na ordem de 100-500 GB de dados e arquivos de 1000-10000) . Tenho notado que, ultimamente, como eu altero outras partes do sistema de arquivos (ou seja, uploads, cópias, etc., não necessariamente nesses diretórios mencionados), as chamadas rsync para esses módulos expirarão.
Para um comando rsync de rotina como rsync -vrt rsync://host:port/module ./
, onde eu não esperaria precisar de nenhuma transferência de arquivo (ou seja, os locais do servidor e do cliente teriam os mesmos dados), no arquivo de log do servidor rsync, vejo logs como estes:
2014/12/15 22:59:59 [###] connect from UNKNOWN (1.1.1.1)
2014/12/15 22:59:59 [###] rsync on share/ from UNKNOWN (1.1.1.1)
2014/12/15 22:59:59 [###] building file list
2014/12/15 23:16:23 [###] rsync: read error: Connection timed out (110)
2014/12/15 23:16:23 [###] rsync error: error in socket IO (code 10) at io.c(785) [sender=3.1.1]
Nos logs do cliente, vejo logs como esses (sim, a mesma transferência - o servidor relatou o tempo limite após 15 minutos, enquanto o cliente relatou erro após 30 minutos):
2014/12/15 23:00:01 [###] receiving file list
2014/12/15 23:29:26 [###] rsync: read error: Connection reset by peer (104)
2014/12/15 23:29:26 [###] rsync error: error in rsync protocol data stream (code 12) at /usr/src/ports/rsync/rsync-3.0.9-1/src/rsync-3.0.9/io.c(764) [Receiver=3.0.9]
Qualquer número de problemas pode causar uma situação como essa, mas depois de fazer a desfragmentação de alguns arquivos para outros problemas, notei que minhas transferências de rsync começariam a ser concluídas com êxito novamente. Então, depois que eu fiz upload de mais alguns arquivos (novamente, para um diretório fora do módulo rsync), eu veria os retornos do tempo limite. Agora, sempre que vejo meus logs com erros de tempo limite, eu desfragmente (com e4defrag ) meu sistema e, em seguida, posso executar com êxito a transferência de rsync novamente.
Algumas notas adicionais:
- Minha partição ext4 usa menos de 50% do espaço disponível no momento
- Minhas chamadas rsync para outros módulos menores não atingem o tempo limite
- Mesmo chamadas sem transferência de dados (por exemplo,
rsync -rt rsync://host:post/module
) excedem o tempo nesse estado
- Após mais testes, parece que após a desfragmentação, posso executar a chamada rsync com êxito uma vez antes de precisar desfragmentar novamente (uma chamada rsync causa uma fragmentação de arquivos ?)
Por que minha configuração de rsync exige uma desfragmentação toda vez e o que eu posso fazer para garantir que meu rsync não interrompa mais esse pequeno inconveniente?