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?
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 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:
hacking / all /
fonte
Uníssono pode ser um bom candidato:
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 :
fonte
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.
fonte
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.
fonte
Eu acho que você pode conseguir o que você quer melhor montando o NFS em uma pasta pessoal comum. Confira este artigo http://www.linuxjournal.com/article/4880
fonte
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:
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 é:
fonte
Confira lsyncd
fonte
Dê uma olhada no dropbox http://www.getdropbox.com/ Plataforma cruzada Win / Linux / Mac
fonte
Monte
/home
de um computador para os outros dois. A Automount funciona muito bem para isso.fonte
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.
fonte
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ê.
fonte
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:
Agora, os scripts sabem qual host eles estão atendendo;)
fonte
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.
fonte
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
fonte
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.
fonte
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.
fonte