Questão Como sincronizar a pasta inicial entre vários computadores?


Eu tenho três computadores em casa e gostaria de ter o /home/ árvore de pastas sincronizada entre os três.
Todos os arquivos / pastas (exceto os ocultos) que são modificados / adicionados / removidos em um dos três computadores são atualizados nos outros dois.

É rsync o suficiente para fazer isso? e como?


102


origem


O problema com a maioria das ferramentas de 'sincronização' (incluindo o rsync, se bem me lembro) é que elas não têm uma noção de ações do usuário. Portanto, se você excluir um arquivo no computador X, a ferramenta não saberá se (a) você realmente excluiu o arquivo no computador X ou (b) se adicionou esse arquivo no computador Y. A maioria das ferramentas assumirá (b), Assim, ao sincronizar, eles adicionarão o arquivo novamente no computador X (em vez de excluí-lo no computador Y). - Rabarberski
@Rabarberski muitas ferramentas de sincronização (incluindo Unison ou Syncthing) mantêm um banco de dados com referências aos dados existentes (por esse motivo). Não irá ajudá-lo quando sincronizar novas pastas pela primeira vez, mas elas podem muito bem apagar arquivos para você (automaticamente). O problema real com a maioria das ferramentas de sincronização é quando os arquivos foram alterados em dois locais antes da próxima sincronização ocorrer - neste caso de conflito, você geralmente precisa fazer uma mesclagem manual ou talvez substituir pela versão mais recente. - Chris
Sincronizar quando as mudanças não podem ser instantaneamente copiadas nas outras máquinas é realmente complicado e eu nunca vi nenhum programa fazer isso perfeitamente, então esteja preparado para alguns bugs, conflitos, reaparição de arquivos. Eu recomendaria a sincronização apenas de algumas pastas específicas que você sabe que serão gerenciáveis ​​pelo programa de sincronização. - Arno


Respostas:


Aqui está uma lista de coisas que poderiam potencialmente resolver este problema, cada um equilibra os trade-offs que você tem que fazer de forma diferente, então você terá que fazer suas próprias escolhas e experimentar as coisas por si mesmo:

  • Uníssono - como mencionado por outros, isso é executado manualmente, mas é muito rápido, confiável e eficaz. Requer que ambas as máquinas estejam sincronizadas para estarem ligadas ao mesmo tempo. Ele tem uma interface de usuário agradável para permitir que você lide com os conflitos quase inevitáveis ​​e rastreia e propaga as exclusões corretamente. O aplicativo / pacote gráfico é chamado unison-gtk.

  • OwnCloud - Armazenamento em nuvem executado em seu próprio servidor. Você precisará de uma máquina para continuar. Requer uma quantidade razoável de configuração. Executa um servidor web completo do Apache 2 e um banco de dados SqlLite ou MySQL no servidor. Funciona de maneira semelhante ao Dropbox com um cliente de desktop, mas o servidor está sob seu controle. editar: OwnCloud recentemente passou por algumas mudanças na forma como o projeto é executado, e agora tem uma nova fonte totalmente aberta (ou seja, nenhuma edição 'enterprise' de código fechado) sob o disfarce de NextCloud, (Veja isso entrevista no youtube com o desenvolvedor OwnCloud original para mais detalhes).

  • SparkleShare - usa o git para manter os arquivos em sincronia. De acordo com a página inicial: bom para muitos arquivos menores, não é bom para muitos arquivos grandes, como música ou coleção de fotos.

  • Seafile - Fornece um componente de servidor que você pode instalar em uma máquina local. Seafile usa um modelo de dados semelhante ao git para rastrear alterações. Fornece clientes de sincronização para desktops, tablets e smartphones. Uma postagem no blog descrevendo a configuração pode ser encontrada em http://openswitch.org/blog/2013/07/18/installing-and-configuring-seafile-on-ubuntu-12-dot-04/

  • Osync - "... ferramenta de sincronização de arquivo bidirecional escrita em bash e baseada em rsync. Trabalha em diretórios locais e / ou remotos através de túneis ssh. É principalmente direcionado para ser lançado como tarefa cron" (texto do site)

  • PowerFolder - projeto baseado em java GPL v2. O site principal envia ofertas comerciais, portanto não está claro como usar o arquivo .jar fornecido.

  • Rsync - Rápido e eficaz e existe há décadas, no entanto, ele não mantém um histórico, então você tem que escolher uma direção para decidir se um arquivo é novo ou excluído. Ferramentas gráficas estão disponíveis como gwRsync.

  • Lsyncd - monitora pastas / arquivos para acionar a replicação rsync

  • dvcs-autosync - escrito em python, usa o git para armazenar e compartilhar mudanças entre máquinas e o XMPP para comunicar mudanças.

  • git-annex- ferramenta de linha de comando para desviar arquivos, baseada no git. Há um passo a passo ilustrativo aqui: http://git-annex.branchable.com/walkthrough/

  • Tonido - freeware. Fornece um aplicativo de desktop que compartilhará arquivos com outros dispositivos. Também forneça ofertas de nuvem comercial e o computador com plugue TonidoPlug.

  • Sincronização BitTorrent (freeware) - sincronização de arquivos peer-to-peer baseada em BitTorrent. Eu não sei muito sobre isso, pois não vou usá-lo por não ser de código aberto e não confiar nele para manter meus dados em minha LAN, sinta-se à vontade para editar esta resposta com melhores informações / experiências reais.

  • SyncThing - Desenvolvido como uma alternativa de código aberto ao BitTorrent Sync. Atualmente, ele não possui alguns dos recursos avançados do BitTorrent Sync, como pares não confiáveis. Está em desenvolvimento ativo.

  • Serviços hospedados comerciais como dropbox, ubuntu one, google drive, apple iCloud são rápidos, baratos e convenientes, mas todos eles exigem que você confie em uma empresa com todos os seus dados e precisa de uma conexão de internet razoavelmente rápida.

  • Git / subversão - Use um sistema de controle de origem diretamente. Completamente manual e pode ser um pouco complexo, mas abordagem popular com alguns usuários familiarizados com esses sistemas de usá-los como ferramentas de programação.

  • CloudFS - syncronize um sistema de arquivos inteiro, baseado em tecnologia de cluster

  • NFS mount - basicamente sua casa mora em uma máquina e você a acessa pela rede, não é bom para laptops que você leva com você. Mais informações: http://www.linuxjournal.com/article/4880


Fatores a considerar ao tomar sua decisão:

  • Servidor central - algumas soluções exigem que uma máquina esteja ligada o tempo todo (ou pelo menos quando você precisa sincronizar) para que outras máquinas sincronizem. Pode ser uma das máquinas existentes ou uma máquina separada, como um NAS. Cuidado com as contas de energia aumentadas.

  • Automático / Manual / Programado - A melhor maneira de evitar ter que resolver conflitos onde algo é alterado em mais do que a máquina é ter um programa em todas as máquinas que assistem a alterações e sincronizações imediatamente, dessa forma você reduz a oportunidade de acabar com várias versões. Com processos manuais, você sempre deve se lembrar de executar a sincronização.

  • Acesso remoto - você quer sincronizar a partir da sua LAN (aka home), pense nas implicações de segurança disso.

  • Segurança - seus dados deixam sua rede criptografada ou não, quão segura é a transferência entre máquinas? E se alguém capturar seus dados em movimento e, posteriormente, descobrir que a criptografia tem falhas? Quem controla o servidor que guarda seus dados, são os dados criptografados, você pode confiar em terceiros? Você tem que fazer furos no seu roteador para obter acesso remoto. Por quanto tempo os arquivos 'excluídos' e metadados relacionados permanecem nos dispositivos sincronizados e no servidor central. Você está sincronizando entre armazenamento criptografado e não criptografado?

  • Movendo pastas grandes - as soluções que experimentei têm um problema que, quando você move / renomeia um arquivo ou uma pasta, a sincronização não entende isso e faz o upload novamente como novo e, em seguida, exclui a cópia antiga. Por favor, ajudem marcando todas as soluções acima que são capazes de lidar com isso (eu suspeito que as soluções baseadas em gits como git não sofrem com isso devido ao endereçamento baseado em conteúdo que ele usa, mas não sei ao certo como não os usei).

  • Capacidade do disco

  • Backups - a sincronização não é backup. Exclua um arquivo importante por engano e muitas das opções acima excluirão todas as outras cópias. Eu recomendo ler Peça de Mat Honan em ser hackeado para uma boa conta do que pode acontecer se você colocar todos os seus ovos digitais em uma cesta digital, por assim dizer.


Recomendo não sincronizar toda a pasta base, mas escolher pastas específicas para sincronizar, como Documents/, Pictures/ Isso evitará a dor de ser forçado a lidar com os problemas de velocidade / desempenho / espaço em disco de sincronizar tudo automaticamente. Também evita ter que manter listas de exclusão.

Enquanto continuo a tentar encontrar algo que funcione para mim pessoalmente, vou tentar manter esta resposta atualizada com informações úteis. Agreguei as informações de todas as outras respostas em uma resposta completa.

Referências:

  • LinuxFormat - fevereiro de 2014 LXF180 p31, "Roundup de armazenamento hospedado"

hacking / all /


77



Eu tenho um servidor com acesso root (que é necessário para instalar uníssono, por exemplo). Existe um script que eu possa ter na minha máquina cliente que não precisa ser instalado no meu servidor? - Ben Kushigian
Eu vi um software chamado freefilesync (sourceforge.net/projects/freefilesync) mencionado algumas vezes aqui e ali. Pode valer a pena mencionar na sua lista? - YoungFrog


Uníssono pode ser um bom candidato:

Unison é uma ferramenta de sincronização de arquivos   para Unix e Windows. Permite dois   réplicas de uma coleção de arquivos e   diretórios para ser armazenado em diferentes   hosts (ou discos diferentes no mesmo   host), modificado separadamente e depois   atualizado até a propagação do   mudanças em cada réplica para o outro.

Ele já faz sincronizações bidirecionais. Veja a atualização abaixo.

Eu aprendi que há muito poucas coisas que o rsync não pode fazer, e provavelmente ele pode fornecer uma solução igual ou melhor, mas você terá que esperar que um especialista em rsync apareça para essa solução.

Atualizar: Sim, o Unison pode sincronizar mais de duas máquinas. De seus manual do usuário:

Usando o Unison para sincronizar mais de duas máquinas 
 
  O Unison é projetado para sincronizar pares de réplicas. No entanto, é possível usá-lo para manter grupos maiores de máquinas em sincronia executando várias sincronizações em pares.

Se você precisar fazer isso, a maneira mais confiável de configurar as coisas é organizar as máquinas em uma “topologia em estrela”, com uma máquina designada como “hub” e o restante como “spokes”, e com cada máquina com raio sincronizando. somente com o hub. A grande vantagem da topologia em estrela é que ela elimina a possibilidade de confundir “conflitos espúrios” decorrentes do fato de que um arquivo separado é mantido pelo Unison para cada par de hosts que ele sincroniza.


27



Eu tenho algumas experiências ruins com o uníssono, por algum motivo de vez em quando em vez de adicionar os novos arquivos de outros computadores, ele os excluiu, enquanto outras vezes funcionou bem. - jhcaiced
Sugiro editar o exemplo a / b / c para seguir a recomendação do manual de não criar loops. - Tim Abell
Quanto à sua referência ao rsync. Não, não é possível fazer duas sincronizações de maneira confiável. Veja a seguinte resposta para ver porque o unison pode lidar com um caso que o rsync não pode: stackoverflow.com/questions/4504357/… - ndemou


Que tal colocar seus arquivos em um sistema de controle de versão como SubVersion ou git?

Eu não uso meu diretório home inteiro, mas apenas alguns subdirs com algumas coisas importantes. Mas estou pensando em converter para o git, pois parece ser melhor para esse tipo de trabalho. (uma pesquisa rápida vai te enviar na direção certa).

Boa sorte


Atualizar: Um bom efeito colateral com o git é que é fácil ter arquivos específicos do computador, já que você só precisa ter uma ramificação para esse computador (e no git você obtém isso por padrão). Portanto, você não precisa ter exatamente os mesmos arquivos em todo o computador, eles precisam ser semelhantes e ter um ramo "principal" comum com o material que você deseja em todos os computadores diferentes.


18



Yikes A ideia de usar o controle de versão para sincronização de arquivos realmente faz minha pele rastrear. - JohnD
Sim, a ideia é estranha, mas muito útil. Pense em um diretório como ~ / bin / para scripts auxiliares privados, esse tipo de dir é ótimo em um sistema de controle de versão. Enquanto um diretório como .kde provavelmente se comportará mal no sistema de controle de versão e será colocado em uma lista de ignorados para o arquivo não manipulado. - Johan
Esta é uma ótima maneira de manter seus arquivos sincronizados, você tem que se acostumar com a idéia de usar "git add" e "git rm" para adicionar / remover arquivos, mas funciona muito bem. - jhcaiced
Eu gosto dessa ideia porque estou no controle de qual parte dos arquivos dentro do lixo que tenho em minha casa será compartilhada. A única questão é como gerenciar commits. Ou seja, alguns arquivos devem entrar no commit inicial e refletir as alterações para mostrar que eles são baseados no sistema / etc / skel. - ony
Está mantendo um par de ramos separados com seus arquivos realmente convenientes, quando você está tentando sincronizar diretórios? Claro, funciona, mas eu não recomendaria (g) para essa tarefa. Você geralmente pode excluir arquivos da maioria das ferramentas de sincronização (por nome, pasta, etc) e para o que você está descrevendo (usando apenas alguns sub-diretórios importantes), não é realmente útil em relação à questão original. - Chris


Seu principal problema ao tentar fazer isso é decidir como mesclar alterações, propagar exclusões e resolver conflitos. Isso é difícil de fazer de uma maneira totalmente automatizada, especialmente se você tiver uma configuração de 3 computadores usada por várias pessoas.

Se você separar usuários, as coisas ficam muito mais simples. Como um usuário não pode estar em dois lugares ao mesmo tempo (e, portanto, gerar conflitos), você pode configurar um trabalho rsync para executar no login para "obter alterações" e efetuar logout para "enviar alterações" ... para um de seus computadores seria o mestre ... então, nesse nível de granularidade, você estaria sincronizando / home / myuser a cada vez, em vez de toda / home /. Um refinamento adicional (no caso de pessoas não logarem) seria executado no script de push após um curto período de inatividade.

Existem muitas outras soluções potenciais, mas nenhuma que resolva magicamente esse problema até onde eu saiba. O primeiro passo é provavelmente pensar em como você usa as máquinas e criar uma política de sincronização para se adequar ao comportamento do usuário.


6





Eu acho que você pode conseguir o que você quer melhor com o NFS montando uma pasta pessoal comum. Confira este artigo http://www.linuxjournal.com/article/4880


5





Isso não fornecerá uma solução completa, mas dará a você um começo:

Configure um cron job de vez em quando para rsync os arquivos. Eu uso um comando como o seguinte:

rsync -alhz --stats --progress --exclude-from '/etc/rsync_backup_excludes.conf' / -e ssh user@10.10.0.1:/path/to/home/

Isso usará o rsync para copiar apenas as alterações necessárias, não recopiar tudo sempre que o comando for executado.

--stats e --progress são opcionais e provavelmente devem ser excluídos de seus scripts

o conteúdo do meu arquivo rsync_backup_excludes.conf é:

dev/*
proc/*
lost+found/*
mnt/*
sys/*

4



O Anacron sincronizará quando a máquina estiver ligada, evitando a falta de slots devido ao tempo de inatividade. - Tim Abell
Isso copia toda a raiz local na pasta inicial remota. Não é isso que o OP pediu, nem posso imaginar por que alguém iria querer isso ... - Cerin


Confira lsyncd

Lsyncd assiste a uma interface do monitor de eventos de árvores do diretório local   (inotify ou eventos). Agrega e combina eventos para alguns   segundos e depois gera um (ou mais) processo (s) para sincronizar o   alterar. Por padrão, isso é rsync. O Lsyncd é, portanto, um live leve   solução de espelho que é comparativamente fácil de instalar e não requer   novos sistemas de arquivos ou dispositivos de bloqueio e não prejudicam o sistema de arquivos local   desempenho.

Rsync + ssh é uma configuração de ação avançada que usa um SSH para agir   arquivo e diretório se move diretamente no alvo em vez de   retransmitindo o destino do movimento pelo fio.

Customização refinada pode ser obtida através do arquivo de configuração.   Configurações de ação personalizadas podem ser escritas do zero em cascata   camadas variando de scripts de shell a códigos escritos na linguagem Lua. Camadas que variam de scripts shell a códigos escritos na linguagem Lua.


4





Dê uma olhada no dropbox http://www.getdropbox.com/  Plataforma cruzada Win / Linux / Mac


2



Obrigado, mas não. Já tentei. Não é o que estou procurando. - lamcro
O Dropbox é ótimo e eu uso seus 2 GB gratuitos para armazenar links, fotos e outros dados que não são de missão crítica entre casa, trabalho e meus laptops. Não é o que você precisa nesta situação, mas na minha opinião, o Dropbox definitivamente tem o seu lugar. - Matt Cofer


Monte /home de um computador para os outros dois. O automount funciona muito bem para isso.


2