Sincronizando arquivos grandes, raramente alterando

0

Eu tenho um servidor doméstico contendo uma quantidade razoável de arquivos de mídia (legalmente obtidos). Quando adições são feitas a este conjunto quando estou ausente, gostaria de poder sincronizar esses arquivos com a cópia remota no meu laptop.

Eu sei que a solução geral para isso seria rsync , mas é muito lenta. Eu entendo que ele verifica cada arquivo na origem e no destino para procurar por alterações, e essa enumeração leva um longo período de tempo antes que qualquer transferência seja iniciada.

Normalmente, apenas um ou dois arquivos foram adicionados e nenhum dos existentes foi alterado. Existe um utilitário que pode ser executado sob demanda (não um serviço em execução constante como o Syncthing ou o BitTorrent Sync) que é capaz de evitar a enumeração ou manter a lista de arquivos em cada local armazenada em cache?

(Em um mundo ideal, também haveria uma maneira de não sincronizar novamente arquivos que foram excluídos no terminal de recebimento sem excluí-los do servidor de envio.)

    
por Scott Colby 02.10.2015 / 23:17

3 respostas

0

De acordo com a página do manual do rsync, isso pode ajudar. Mas provavelmente não.

--size-only             skip files that match in size

Também na página man, é descrito como o rsync decide se um arquivo precisa ser sincronizado. Não usa somas de verificação por padrão.

-c, --checksum
          This changes the way rsync checks if the files have been changed and are in need of a transfer.  Without this option, rsync uses a "quick check" that  (by  default)  checks  if  each
          file’s size and time of last modification match between the sender and receiver.  This option changes this to compare a 128-bit checksum for each file that has a matching size.  Gen‐
          erating the checksums means that both sides will expend a lot of disk I/O reading all the data in the files in the transfer (and this is prior to any reading that  will  be  done  to
          transfer changed files), so this can slow things down significantly.

Parece que o rsync usa somas de verificação para verificar os dados uma vez transferidos e esse comportamento não pode ser desabilitado. No entanto, essa pessoa tem um trabalho ao redor.

link

No entanto, nunca encontrei o rsync lento. É possível que alguma outra coisa esteja acontecendo? Você está fazendo isso em alguma CPU realmente antiga?

Existem outras ferramentas de sincronização de arquivos. Como sobre o uníssono? Eu nunca tentei isso.

Que tal escrever seu próprio script para fazer isso? Você pode montar via NFS ou SMB ou usar FTP, etc ... e sincronizar os dados usando seu próprio código simples.

    
por 02.10.2015 / 23:57
0

O motivo pelo qual o rsync leva muito tempo é porque ele precisa ler todos os dados nas duas extremidades para criar mapas de comparação. Uma vez que o sistema de arquivos está em sincronia a partir de um timestamp em particular, você só precisa rsync os arquivos que foram alterados desde o timestamp (toque em um arquivo após a conclusão do rsync e use find ....- newer ...). Como alternativa, use o AFS.

    
por 02.10.2015 / 23:40
0

rsync verifica os timestamps e o tamanho antes de verificar os dados. Isso é relativamente rápido, mas há um atraso antes do início das transferências. Isso normalmente é bem rápido. No entanto, o sistema de arquivos FAT do Windows possui uma resolução de carimbo de data e hora de 2 segundos. Isso pode fazer com que as verificações de registro de data e hora falhem quando comparadas a um sistema com uma resolução de 1 segundo. Adicionar --modify-window=1 permite que o registro de data e hora seja diferente em um segundo e resolva o problema.

Pode ser útil usar --whole-file para arquivos de mídia, pois provavelmente não há motivo para mover os deltas de arquivo. No entanto, se você atualizou as tags ID3, os deltas poderão ser mais rápidos.

Uma solução como unison , que é baseada em rsync, pode funcionar bem se você fizer alterações no servidor de arquivos e no laptop.

    
por 03.10.2015 / 00:29