Como sincronizar a pasta inicial entre vários computadores?

106

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?

lamcro
fonte
7
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
3
@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
1
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:

80

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 sair. 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 comercialmente, como dropbox, ubuntu one, google drive, apple iCloud, são todos rápidos, baratos e convenientes, no entanto, 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 - sincronizar todo um sistema de arquivos, baseado em tecnologia de cluster

  • Montagem NFS - basicamente sua casa vive 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 / Agendado - A melhor maneira de evitar ter que resolver conflitos onde algo é alterado em mais de uma 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 longe de 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, constatar 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: 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 muitos dos itens acima excluirão todas as outras cópias. Eu recomendo ler O pedaço 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 da sincronização automática de tudo. 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 /

Tim Abell
fonte
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 em sua lista?
YoungFrog
27

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 de estrela", com uma máquina designada como "hub" e o resto como "spokes" e com cada máquina de raio sincronizada. 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.

nagul
fonte
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
1
Sugiro editar o exemplo a / b / c para seguir a recomendação no manual de não criar loops.
Tim Abell
Quanto à sua referência ao rsync. Não, não pode de forma confiável fazer sincronização em dois sentidos. 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
19

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

Eu não faço a versão do 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.

Johan
fonte
Yikes A ideia de usar o controle de versão para sincronização de arquivos realmente faz meu rastreamento de pele.
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 então refletir as mudanças 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
6

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

Se você separar os 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 ser executado 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 desconectarem) 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.

Ira Cooke
fonte
4

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 [email protected]:/path/to/home/

Isso usará o rsync para copiar apenas as alterações necessárias, e não copiar novamente 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/*
Matt Cofer
fonte
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
4

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 até 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.

eric
fonte
2

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

Boxdog
fonte
3
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
2

Monte /home de um computador para os outros dois. A Automount funciona muito bem para isso.

Xenoactive
fonte
1

PowerFolder - Sincronizar arquivos, pastas de sincronização, armazenamento remoto, backup e compartilhamento de arquivos privados. Sincronize o PC em casa e no escritório, compartilhe fotos de férias ou trabalhe em conjunto em documentos. A tecnologia peer-to-peer segura do PowerFolder funciona na Internet ou na LAN.

Molly7244
fonte
1

Ubuntu One pode ser o que você está procurando. Infelizmente ainda está em fase beta, e eu não tenho experiência com isso, então não tenho certeza se funcionaria para você.

Ilari Kajaste
fonte
Eu diria que ainda está em desenvolvimento pesado no momento - há atualizações a cada poucos dias enquanto a equipe do Ubuntu corrige as falhas. Funciona, mas eu não recomendaria o Dropbox.
nagul
1

Se você também quiser sincronizar as configurações - as ferramentas mencionadas acima são totalmente indefesas: as configurações são frequentemente alteradas e muitos arquivos de log geram conflitos para que não possam ser mesclados.
Meu engano é simples e estúpido :) Eu tenho uma estação de trabalho mestre, e todos os arquivos de "~" são copiados para o segundo "Slave". No momento em que percebo, preciso modificar algo - faço isso no Master e o Slave captura essas alterações em sincronia.

Além disso, alguns scripts bash devem ser executados de maneira diferente nessas máquinas, então eu editei meu /etc/bash.bashrc:

export OOHOST=Master

Agora, os scripts sabem qual host eles estão atendendo;)

kolypto
fonte
1

Experimentar dvcs-autosync .

Isso é baseado no git, usa o XMPP para notificar os clientes conectados sobre alterações de arquivos e reage em eventos de alteração de arquivo por meio de mudanças de inode. Por isso, sempre é informado logo após a alteração do arquivo, no caso de conflitos, ele se baseia nos métodos comprovados do git.

Eu tenho usado por um tempo agora como uma substituição do Dropbox via chaves públicas SSH e realmente faz o trabalho.

schlypel
fonte
0

As soluções alternativas que eu consideraria:

  • Dropbox.
    Principais desvantagens: não é livre para qualquer quantidade razoável de dados. Caso contrário, ele funciona na perfeição IMHO

  • Um servidor NAS. Coloque seus arquivos em um servidor NAS, eles se tornaram razoavelmente acessíveis ultimamente (a partir de 150 $) e um bom não consome muita energia. Não há problemas de sincronização.
    Principal desvantagem: mais lento do que uma cópia local

Rabarberski
fonte
Com o NAS, você ainda não está abordando como a sincronização acontece. Ter um NAS e dois computadores não é, em princípio, diferente de ter três computadores, conforme pergunta o OP. Se você está sugerindo que tudo que precisa ser sincronizado é apenas armazenado no NAS, então isso geralmente não é possível - considere a sincronização de arquivos de configuração, por exemplo - eles precisam estar em cada máquina.
kba
0

eu uso SyncTwoFolders para Mac e Syncback para PC - o primeiro dos meus três macs em casa (inclusive laptop) e o segundo para o meu PC no trabalho. Ambos os programas têm várias opções de back-up e sincronização, o que torna uma brisa uma vez que os pré-ajustes tenham sido configurados. Mole-mole! Tenho certeza de que existem outras versões de software similar disponíveis para Linux e Ubuntu.

Henk the ThinkTank
fonte
0

Você pode usar um script de sincronização como osync, que pode propagar arquivos excluídos e atualizar apenas os modificados. http://www.netpower.fr/osync O osync é baseado em rsync, mas pode lidar com muitos cenários de sincronização entre pastas locais ou remotas através de ssh.

Orsiris de Jong
fonte