Maneira simples distribuída e desconectada de sincronizar um diretório

Maneira simples distribuída e desconectada de sincronizar um diretório

Quero começar a fazer backup regularmente do meu diretório inicial no meu laptop Ubuntu, máquina X. Suponha que eu tenha acesso a dois servidores remotos (Linux) diferentes para os quais posso fazer backup, máquinas A e B. A máquina X será a mestre e deverá ser sincronizado com A e B. Eu poderia executar regularmente o rsync de X para A e depois de X para B. Isso é tudo que preciso.

No entanto, estou curioso para saber se existe uma maneira mais eficiente de largura de banda e, portanto, mais rápida de fazer isso. Supondo que X estará em linhas de banda larga de estilo residencial, e como não quero absorver a largura de banda, limitaria a transferência de X. A e B estarão ligados o tempo todo, porém X, não estará, então, também gostaria de reduzir a quantidade de tempo que X está transferindo, potencialmente permitindo que A e B gastem mais tempo transferindo. Além disso, o X não estará conectado o tempo todo.

Qual é a melhor forma de fazer isso? rsync de X para A e depois de A para B? Cronometrar esse momento certo pode ser problemático. Não quero manter arquivos antigos por perto, então, se eu sincronizasse novamente, a --delopção seria usada. Isso poderia significar que algo pode ser transferido de A para B, depois excluído de B e depois transferido de A para B novamente? Isso está abaixo do ideal.

Eu sei que existem sistemas de arquivos distribuídos sofisticados como o gluster, mas acho que isso é um exagero neste caso e pode não se encaixar na natureza desconectada.

Responder1

Existem maneiras inteligentes de fazer isso, e outras simples. Eu optaria pelo simples sempre que possível.

Você poderia fazer X -> A e depois A -> B?

Existem também métodos comoUníssono, mas parece ir apenas para uma réplica e é bidirecional, o que parece não ser tão útil para um backup. No entanto, se A e B executassem coisas no Unison, parece que o cliente X poderia fazer backup para AouB, e chegaria bem ao outro.

Responder2

Você deseja que X inicie a sincronização com A, que então extrairá os dados de X e, quando terminar, enviará para B. Um script em A poderia apenas verificar a existência de um arquivo em algum lugar, que é carregado em A por X quando é on-line e pronto para uma sincronização. Quando terminar de puxar de X, ele deve empurrar para B e quando terminar remover o arquivo. Alternativamente, você poderia ter quase o mesmo script em A e B, mas quando A termina de extrair de X, ele coloca um arquivo em B informando para sincronizar com A. Se você tivesse mais de 2 máquinas para sincronizar, este seria o caminho a percorrer desde então, a sincronização pode simplesmente passar por todos eles (possivelmente em uma forma de árvore distribuída em vez de linear)

Responder3

O Dropbox funcionaria para você?

Responder4

Acho que a solução de Michael Graff é a melhor ideia. rsync X -> A. Então A -> B.

Se você quiser outra sugestão que reduza o tempo de computação, você pode dar uma olhada em xdelta (http://xdelta.org/). É essencialmente a mesma solução que o rsync multi-hop, com a vantagem de poder economizar o tempo de calcular as delatas em cada salto. Se os arquivos envolvidos forem grandes, isso poderá representar uma economia significativa de tempo.

Jim C. http://www.kleobackup.net

informação relacionada