Eu tenho um arquivo grande (2-3 GB, binário, formato não documentado) que eu uso em dois computadores diferentes (normalmente eu o uso em um sistema de desktop, mas quando viajo coloco no meu laptop). Eu uso o rsync para transferir esse arquivo para frente e para trás.
Eu faço pequenas atualizações para este arquivo de tempos em tempos, alterando menos de 100 kB. Isso acontece em ambos os sistemas.
O problema com o rsync, como eu entendo, é que, se achar que um arquivo foi alterado entre a origem e o destino, ele transfere o arquivo completo. Na minha situação, parece um grande desperdício de tempo quando apenas uma pequena parte de um arquivo sofre alterações. Eu imagino um protocolo onde os agentes de transferência na origem e no destino primeiro verificam o arquivo inteiro e então comparam o resultado. Quando eles percebem que a soma de verificação para o arquivo inteiro é diferente, eles dividem o arquivo em duas partes, A e B e soma-os separadamente.
Aha, B é idêntico nas duas máquinas, vamos ignorar essa metade. Agora divide A em A1 e A2. Ok, apenas A2 mudou. Dividir A2 em A2I e A2II e comparar, etc. Faça isso de forma recursiva até encontrar, por exemplo, três partes de 1 MB cada que diferem entre origem e destino e depois transferir apenas essas partes e inseri-las na posição correta no arquivo de destino. Hoje, com SSDs rápidos e CPUs com vários núcleos, essa paralelização deve ser muito eficiente.
Então, a minha pergunta é: existem ferramentas que funcionem assim (ou de outra maneira eu não poderia imaginar, mas com resultados semelhantes) disponíveis hoje?
Um pedido de esclarecimento foi publicado. Eu uso principalmente o Mac para que o sistema de arquivos seja o HFS +. Normalmente eu começo o rsync assim
rsync -av --delete --progress --stats
- nesses casos, às vezes, uso o SSH e, às vezes, o rsyncd. Quando eu uso o rsyncd eu inicio assim rsync --daemon --verbose --no-detach
.
Segundo esclarecimento: peço uma ferramenta que apenas transfira o delta para um arquivo que existe em dois locais com pequenas alterações e / ou se o rsync realmente oferece isso. Minha experiência com o rsync é que ele transfere os arquivos na íntegra (mas agora há uma resposta que explica isso: o rsync precisa de um servidor rsync para poder transferir apenas os deltas, caso contrário (por exemplo, usando ssh-shell) ele transfere todo arquivo no entanto muito mudou).