Como posso sincronizar automaticamente uma árvore de diretórios em várias máquinas?

3

Eu tenho dois laptops Mac e um servidor Debian, cada um com um diretório que eu gostaria de manter em sincronia entre os três. A solução deve atender aos seguintes critérios (em ordem de importância aproximada):

  • Ele não deve usar nenhum serviço de terceiros (por exemplo, Dropbox, SugarSync, Google, seja o que for). Isso não inclui a instalação de software adicional (contanto que seja gratuito).
  • Não deve exigir que eu use diretórios específicos ou mude minha maneira de armazenar coisas. (Dropbox faz isso IIRC)
  • Deve funcionar em todas as direções (as alterações feitas em / any / machine devem ser enviadas para os outros)
  • Todos os dados enviados devem ser criptografados (já tenho ssh keypairs configurados)
  • Deve funcionar mesmo quando nem todas as máquinas estiverem disponíveis (as alterações devem ser enviadas para uma máquina quando ela voltar a ficar on-line)
  • Ele deve funcionar mesmo quando os diretórios / em algumas máquinas não estiverem disponíveis (eles podem ser armazenados em imagens de disco que nem sempre serão montadas)
    • Isso pode ser resolvido para Macs usando launchd para ativar e eliminar automaticamente (ou de alguma forma alterar o comportamento de) qualquer que seja o daemon usado para sincronização quando as imagens são montadas e desmontadas.
  • Deve ser imediato (usando um sistema baseado em eventos, não um periódico como cron )
  • Deve ser flexível (se mais máquinas forem adicionadas, eu posso incorporá-las facilmente)

Eu também tenho algumas preferências que gostaria de ser cumpridas, mas não precisam ser:

  • Ele deve me notificar de alguma forma se houver conflitos ou outros erros.
  • Deve reconhecer links simbólicos e hard e criar os correspondentes.
  • Deve permitir-me criar uma lista de exceções (subdiretórios que não serão sincronizados).
  • Ele não deve exigir que eu configure o encaminhamento de porta ou reconfigure a rede.
    • Isso pode ser resolvido usando um túnel ssh com encaminhamento de porta reversa.

Se você tiver uma solução que atenda a alguns, mas não a todos os critérios, contribua nos comentários, pois isso pode ser útil de alguma forma, e talvez seja possível atender alguns dos critérios separadamente.

O que eu tentei e porque não funcionou:

  • rsync e lsyncd não suportam sincronização bidirecional
  • csync2 é projetado para clusters de servidores e parece não funcionar com máquinas com IPs dinâmicos
  • O DRBD (sugerido por amotzg ) envolve a instalação de um módulo do kernel e não parece funcionar em sistemas com o OS X
por Blacklight Shining 13.08.2012 / 16:53

1 resposta

1

Essa é uma longa lista de requisitos e não acho que exista algo que atenda a todos eles completamente. No entanto, tenho duas sugestões que podem ficar muito próximas.

Sparkleshare

Eu acho sparkleshare uma solução muito legal. É multi-plataforma, fornece integração / notificação GUI, etc. Muito parecido com o Dropbox, ainda hospedado-se. A única coisa que você precisa é de um repositório Git central em algum servidor.

O assistente para iniciar um novo projeto exige que você armazene seus arquivos em um diretório específico, não atendendo ao segundo requisito. No entanto, você pode tentar alterar isso nas config.xml para corrigir isso.

Acho que há apenas um requisito em aberto: suporte a links físicos. O uso do Git no sparkleshare impede isso - veja Git e hard links . Se você realmente precisa disso, isso pode ser um bloqueador.

Assistente Git-anexo

Você também pode se envolver em outro projeto semelhante, mas ainda no início do desenvolvimento: assistente do git-annex . Como está usando o Git-annex, ele pode superar a limitação da detecção de link físico.

    
por 13.09.2012 / 01:29