Eu olhei para essa pergunta e essa pergunta , mas elas não parecem abordar os sintomas que estou vendo.
Eu tenho um arquivo de log grande (cerca de 600 MB) que estou tentando transferir através de uma rede celular. Por ser um arquivo de log, ele é apenas anexado (embora na verdade esteja em um banco de dados SQLite com apenas INSERT sendo executado, portanto, não é tão simples assim, mas com exceção da última página 4k (ou talvez uma poucos) o arquivo é idêntico a cada vez.É importante que apenas as alterações (e quaisquer somas de verificação que precisam ser transmitidas) sejam realmente enviadas, porque a conexão de dados é medida.
No entanto, quando executo um teste em uma conexão não-medida (por exemplo, ponto de acesso Wi-Fi gratuito), não vejo uma aceleração ou transferência de dados reduzida observada ou relatada. Em uma conexão WiFi lenta, vejo na ordem de 1 MB / s ou menos, relatando que a transferência levará quase 20 minutos. Em uma conexão WiFi rápida, vejo uma velocidade mais rápida uniforme, mas nenhum relatório de aceleração e uma segunda tentativa de transferência (que agora deve ser mais rápida porque os dois arquivos são idênticos) agora mostra qualquer diferença.
O comando (higienizado para remover informações confidenciais) que estou usando é:
rsync 'ssh -p 9999' --progress LogFile michael@my.host.zzz:/home/michael/logs/LogFile
A saída que recebo no final é assim:
LogFile
640,856,064 100% 21.25MB/s 0:00:28 (xfr$1, to-chk=0/1)
Não há menção de qualquer tipo de aceleração.
Eu suspeito que o problema pode ser um dos seguintes:
- Estou faltando alguma opção de linha de comando. No entanto, reler a página do manual parece sugerir que as transferências delta estão ativadas por padrão: só vejo opções para desativá-las.
- Estou usando o rsync over ssh (mesmo em uma porta não padrão) devido ao servidor estar atrás de um firewall que permite apenas o ssh. Não vi nada explicitamente dizendo que transferências delta não funcionariam se o daemon rsync não estiver sendo executado. Tentei usar a notação "::" em vez de ":", mas a página de manual não é muito clara sobre o que é um "módulo" e meu comando é rejeitado por especificar um módulo inválido.
Eu excluí o seguinte:
- transferências delta não executadas em uma rede local. Descartado porque estou tentando realizar a transferência pela Internet
- sobrecarga devido ao cálculo da soma de verificação. Vi esse comportamento em uma conexão Wifi rápida e lenta e a taxa de transferência não parece estar vinculada à computação.
rsync --stats
e também -v -v
obter estatísticas ainda mais detalhadas. O Rsync informará a quantidade de dados correspondentes a inigualáveis.
but with the exception of the last 4k page (or maybe a few) the file is identical each time.
Você realmente confirmou isso comcmp
? Ou melhor, comxdelta
ou algo assim? Se você realmente deseja minimizar o tamanho da transferência, mantenha as versões antiga e nova localmente, para poder calcular um diff binário mínimo localmente (com algo diferente de rsync) e enviá-lo sem precisar enviar somas de verificação pela conexão medida. Fazer isso no nível do registro do banco de dados em vez do nível do arquivo binário provavelmente é ainda melhor, como sugere derobert.