Sincronização de arquivos do tipo Dropbox sem um servidor central [fechado]

22

Estou procurando uma maneira de sincronizar as unidades secundárias nos meus dois Macs pela Internet. Tenho conectividade VPN consistente entre os dois macs e posso acessá-los como se estivessem sentados um ao lado do outro.

Estou procurando uma maneira de implementar uma experiência semelhante ao Dropbox em que, se eu modificar um arquivo em um Mac, o arquivo será enviado para o outro Mac (e vice-versa). Também preciso da capacidade de diminuir a largura de banda (para que nosso pequeno canal de upload de 1 megabit não fique sobrecarregado). Alguma sugestão?

Ah, e usar o dropbox está meio fora de questão no momento, já que meu disco tem 500 GB. Obrigado!

muncherelli
fonte
Verifique se há uma porta "rsync", que é uma ferramenta Linux exatamente para isso. Ele pode sincronizar seus arquivos em cada execução; então você só precisa de uma maneira de acionar isso sempre que o SG mudar.
Dkellner 12/05
Deseja que todos os 500 GB sejam sincronizados?
Cubuspl42
5
Este seria um tópico sobre as Recomendações de Software. Veja esta pergunta (não específica para Mac): softwarerecs.stackexchange.com/questions/129/…
Nicolas Raoul
Você precisa disso também? "Se eu excluir o arquivo em qualquer máquina, ele deverá ser excluído da outra máquina também, em vez de ser recriado."
Patrick M
Não é para isso que serve o iCloud? hints.macworld.com/article.php?story=20120803092156975
Blazemonger

Respostas:

30

Confira Bittorrent Sync . Possui a funcionalidade de sincronização como o Dropbox, mas sem a nuvem.

Oskar Persson
fonte
Desvantagem: as duas máquinas precisam estar on-line simultaneamente para poderem sincronizar.
Gerald Schneider
18
@GeraldSchneider Você conhece algo que não tem essa limitação?
Shelvacu
2
@shelvacu, não é possível. Se você deseja sincronizar sem precisar das duas máquinas on-line, é necessário armazenamento em nuvem (contrariando a solicitação de OP).
HalosGhost
5
Não necessariamente um armazenamento em nuvem. Você precisa de um nó que esteja sempre online. Pode ser um computador, um NAS, um serviço de nuvem, sua instância OwnCloud auto-hospedada, conforme proposto por Lawrence ou qualquer solução semelhante. Mas, desde que você não tenha um nó sempre on-line, essa limitação sempre se aplica.
Gerald Schneider
3
Eu uso o BitTorrent Sync e posso recomendá-lo altamente - eu o uso em conjunto com o Dropbox para arquivos muito grandes e que não valem a pena ocupar espaço lá. Uma coisa a considerar, porém, é que ele não lida bem com edições simultâneas de arquivos - não há manipulação de conflitos como no Dropbox - o último arquivo editado simplesmente vence. Não é necessariamente um problema, mas depende de seus requisitos.
Zelanix
16

Se você quer se tornar hardcore, pode usar o comando rsync nativamente no OsX , como a equipe * nix.

Antes de tudo, você deve ter permissão para acessar o host remoto pelo ssh. O servidor OpenSSH está pré-instalado no Mac OsX e você não precisa instalar nenhum pacote adicional. Só precisa fazer algumas configurações do sistema. Para habilitar o servidor OpenSSH no Mac OS X, abra Preferências do Sistema e clique em Compartilhar. Além disso, marque a caixa Login remoto para ativar o SSH e selecione o botão de opção Todos os usuários na seção Permitir acesso para .

Agora você pode acessar o host remoto pelo ssh.

Agora, você deve criar uma chave de acesso público para acesso sem senha da máquina local do convidado ao host remoto através do ssh. Para isso, você deve sujar a mão um pouco. :)

Primeiro, determine se você já possui chaves de autenticação. No terminal , execute:

sudo ls -la /var/root/.ssh

Se você vir "id_dsa" e id_dsa.pub , poderá pular o restante desta seção.

Na máquina cliente, execute o seguinte no Terminal:

sudo ssh-keygen -t dsa -f /private/var/root/.ssh/id_dsa -C "comment about this key"

Depois de criar a chave de acesso na máquina local do convidado, você precisa copiar a chave pública do convidado no arquivo allowed_keys do host. Você pode fazer isso com um simples comando Terminal que anexa a chave pública à lista de chaves autorizadas:

sudo cat /private/var/root/.ssh/id_dsa.pub | ssh root@remote_host_address 'cat - >> ~/.ssh/authorized_keys'

O comando abaixo que executará um backup incremental do seu sistema de arquivos raiz na máquina convidada local no host remoto:

/usr/local/bin/rsync -aNHAXx --protect-args --fileflags --force-change --rsync-path="/usr/local/bin/rsync" / root@remote_host_address:/Volumes/Backup/GuestMachine

Você pode alterar os parâmetros do rsync para alterar os comportamentos de sincronização. Se você adicionar este comando ao crontab , a sincronização poderá ser executada a qualquer momento. Por exemplo:

sudo crontab -e

acrescente a linha abaixo ao crontab:

*/30 * * * * /usr/local/bin/rsync -aNHAXx --protect-args --fileflags --force-change --rsync-path="/usr/local/bin/rsync" / root@remote_host_address:/Volumes/Backup/GuestMachine

Essa sincronização será executada a cada meia hora.

Aqui está o exemplo de script Python:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
Cron automated synchronization script.

Desc: Synchronize remote folder into local machine. Duplicate processes 
      are disallowed until running process finished.

Usage:
    :: Change required variables as _user, _password, _domain etc.
    :: Edit crontab 
    # crontab -e

    :: Append line below.
    */30 * * * * python synchronizator.py 2>&1 &

Author: Sencer HAMARAT (RecNes)
E-Mail: [email protected]
"""

import shlex
from subprocess import Popen, PIPE
import logging as log
import sys

__author__ = "Sencer HAMARAT"

_user = 'username'
_password = 'password'
_domain = 'example.com'

_expectation = "Enter passphrase for key \'/home/%s/.ssh/id_rsa\':" % _user
_rsync = '/usr/bin/rsync --partial --progress -avvz -e'
_pub_key = '/home/%s/.ssh/id_rsa.pub' % _user
_ssh = '/usr/bin/ssh -i %s' % _pub_key
_remoteDir = '/home/%s/backup/' % _user
_localDir = '/home/%s/backup/' % _user
_command = '%s %s %s@%s:%s %s' % (_rsync, _ssh, _user, _domain, _remoteDir, _localDir)
run_command = shlex.split(_command)

_logFile = "logfile.log"
_logFormat = "%(asctime)s %(levelname)s %(name)s %(process)d %(threadName)s %(module)s:%(lineno)d %(funcName)s() " \
             "%(message)s\n"
log.basicConfig(filename=_logFile, level=log.DEBUG, format=_logFormat)

log.debug(u'Command will run: %s' % _command)

try:
    running_command = Popen(run_command, stdin=PIPE, stdout=PIPE, stderr=PIPE)
    if running_command.poll():
        log.debug(repr(running_command.poll()))
        sys.exit()
    if _expectation in running_command.communicate():
        running_command.communicate(_password)
    print running_command.communicate()
except Exception as e:
    log.debug(repr(e))
finally:
    sys.exit()
Sencer H.
fonte
Eu tinha pensado em usar o rsync, no entanto, o problema está aqui: "E se o rsync não estiver completamente concluído após os 30 minutos?" Não quero que dois rsyncs ocorram ao mesmo tempo. Existe alguma maneira de contornar isso?
Muncherelli
1
@muncherelli: é relativamente simples escrever um pequeno mecanismo de "bloqueio" ao redor do rsync para evitar sincronizações simultâneas. Basicamente, envolva a chamada rsync em um script bash e você estará livre para fazer o que quiser.
Unperson325680
Eu adicionei script de exemplo. Eu espero que isso ajude.
precisa
Este é um ótimo roteiro. Muito obrigado pela ajuda. Decidi usar o BitTorrent Sync devido à simplicidade e à otimização da largura de banda. (Eu sei que você pode definir o uso máximo da largura de banda com o rsync, mas o BTS é muito mais intuitivo).
Muncherelli
8

Owncloud é uma solução possível se você deseja acesso baseado na web.

Você precisará do seu próprio servidor para hospedar o Owncloud, no entanto, é mais uma solução baseada em servidor, na qual seus 2 clientes podem acessar o que precisam à vontade, mas haverá apenas uma cópia do arquivo em questão, que estará situada no Servidor Owncloud.

Lawrence
fonte
Ainda é o caso de você apenas se conectar a uma nuvem própria? Por exemplo, eu não posso ter meu próprio e compartilhar outro com meu irmão?
Thomas Weller
Pelo menos os clientes de sincronização da área de trabalho agora oferecem suporte a várias conexões simultâneas na nuvem. Mas também em um servidor, você pode compartilhar apenas arquivos / diretórios específicos, não necessariamente tudo.
Ojdo
4

Eu recentemente tropecei em Syncthing. Muitas belezas legais.

http://syncthing.net/

user5522
fonte
2

No Windows, existe uma ferramenta SyncToy que faz isso em três etapas. Se Mac, é sobre ChronSync ferramenta ou tri-de backup ferramenta

Ruslan Gerasimov
fonte
Olá Ruslan, você pode editar sua resposta para explicar por que o ChronSync ou o Tri-Backup seria a solução ideal para o OP? No momento, é uma resposta de qualidade muito baixa e, na verdade, não responde o como da pergunta. Obrigado
canadense Luke REINSTATE MONICA
Oi, obrigado por sua pergunta. Bem, não estou dizendo que esses programas são a solução ideal, mas acho que é fácil o suficiente, porque eles têm GUI, o que também significa que qualquer um pode fazê-lo sem entender profundamente um monte de grafias mágicas de linhas de comando. Também acredito que se alguém tem um problema de usar programas listados, isso deve ser feito em uma pergunta separada, como o que ele fez, o que há de errado \ estranho. É mais do que copiar aqui a documentação para eles sem fazer perguntas específicas.
Ruslan Gerasimov
2

Considere o uníssono. Ele lida com a sincronização de arquivos bidirecional. Você pode configurá-lo em uma programação com cronou em algum outro aplicativo de programação.

http://www.cis.upenn.edu/~bcpierce/unison/

Unison é uma ferramenta de sincronização de arquivos para Unix e Windows. Ele permite que duas réplicas de uma coleção de arquivos e diretórios sejam armazenadas em hosts diferentes (ou discos diferentes no mesmo host), modificadas separadamente e atualizadas, propagando as alterações em cada réplica para a outra.

O Unison compartilha vários recursos com ferramentas como pacotes de gerenciamento de configuração (CVS, PRCS, Subversion, BitKeeper, etc.), sistemas de arquivos distribuídos (Coda, etc.), utilitários de espelhamento unidirecional (rsync, etc.) e outros sincronizadores (Intellisync, reconciliar, etc). No entanto, existem vários pontos em que é diferente:

Chloe
fonte
1
+1: quando a sincronização bidirecional é necessária, isso claramente supera o rsync, além de ter todos os seus recursos interessantes.
ojdo
1

Tive boa sorte com o GoodSync com dois PCs na mesma LAN, mas aposto que ainda funcionaria bem na sua situação.

Aqui está a descrição do produto:

  • O GoodSync sincroniza arquivos entre seu computador, dispositivos móveis, FTP, SFTP, Amazon S3, Google Drive, SkyDrive, WebDAV, Azure.
  • O GoodSync faz backup de arquivos em unidades portáteis, dispositivos móveis e em FTP, S3, GDocs, SkyDrive, DAV ou outro computador.
  • Sincronização direta com P2P: O GoodSync Connect sincroniza arquivos diretamente entre os computadores, sem a lentidão introduzida pela sincronização via servidores de terceiros.
  • O GoodSync é muito rápido e sincroniza arquivos sob seu comando, periodicamente, por um agendamento ou em tempo real (na alteração do arquivo).

Você só precisa do GoodSync configurado em um dos seus PCs; ele lida com a sincronização bidirecional e o tipo de sincronização é personalizável. Além disso, é altamente recomendado pela CNet.

Jon Onstott
fonte
Olá Jon, você pode editar sua resposta para explicar por que o GoodSync seria a solução ideal para o OP? No momento, é uma resposta de qualidade muito baixa e, na verdade, não responde o como da pergunta. Obrigado
canadense Luke REINSTATE MONICA
1

Outra solução possível é o AeroFS .

O AeroFS sincroniza bidirecionalmente os dados entre seus dispositivos, enquanto os armazena apenas em seus dispositivos - seus dados nunca chegam perto dos servidores deles. O AeroFS mantém um histórico de revisões para seus arquivos, para que você possa reverter para versões anteriores quando necessário e fornece uma ferramenta para resolver conflitos.

O AeroFS funciona em Windows, Mac, Linux, iOS e Android, portanto, você deve protegê-lo.

chritohnide
fonte
0

Portanto, se você não se opõe ao armazenamento em nuvem, a princípio, existem duas soluções de hardware para unidades externas:

O Space Monkey usa um paradigma interessante. Ele aloca parte do seu disco para armazenar pequenos pedaços de dados de outras pessoas e também armazena seus dados em muitas unidades de outras pessoas (criptografadas, é claro). Dessa forma, há muita redundância em caso de desastre, e suas máquinas não precisam se ver ou mesmo se conectar ao mesmo tempo.

O transportador de arquivos é um pouco mais simples, pois os dados são sincronizados apenas em outras unidades transportadoras de arquivos que você configurou especificamente para sincronizar.

Ambas as opções são boas para grandes quantidades de dados e você só compra o hardware uma vez sem uma taxa de assinatura.

tfinniga
fonte