Sincronizzazione file simile a Dropbox senza un server centrale [chiuso]


22

Sto cercando un modo per sincronizzare le unità secondarie sui miei due Mac su Internet. Ho una connettività VPN coerente tra i due mac e posso accedervi come se fossero seduti uno accanto all'altro.

Sto cercando un modo per implementare un'esperienza simile a Dropbox in cui se modifico un file su un Mac, il file verrebbe trasferito all'altro Mac (e viceversa). Ho anche bisogno della possibilità di limitare la larghezza di banda (quindi la nostra piccola pipe da 1 megabit non viene sovraccaricata). Eventuali suggerimenti?

Oh, e l'utilizzo di Dropbox è un po 'fuori discussione al momento dal momento che il mio disco è di 500 GB. Grazie!


Cerca una porta di "rsync" che è uno strumento Linux proprio per questo. Può sincronizzare i tuoi file ad ogni corsa; allora hai solo bisogno di un modo per innescare questo ogni volta che SG cambia.
Dkellner,

Vuoi sincronizzare tutti i 500 GB?
cubuspl42,

5
Questo sarebbe in tema di raccomandazioni software. Vedi questa domanda (non specifica per Mac): softwarerecs.stackexchange.com/questions/129/…
Nicolas Raoul,

Ne hai bisogno anche tu? "Se elimino il file su una delle due macchine, dovrebbe essere eliminato anche dall'altra macchina, anziché essere ricreato."
Patrick M,

Risposte:


30

Dai un'occhiata a Bittorrent Sync . Ha la funzionalità di sincronizzazione come Dropbox, ma senza il cloud.


Unico inconveniente: entrambe le macchine devono essere online contemporaneamente per poter essere sincronizzate.
Gerald Schneider,

18
@GeraldSchneider Conosci qualcosa che non ha questa limitazione?
Shelvacu,

2
@shelvacu, impossibile. Se si desidera che si sincronizzi senza bisogno di entrambe le macchine online, è necessario l'archiviazione cloud (contrariamente alla richiesta OP).
HalosGhost

5
Non necessariamente un archivio cloud. È necessario un nodo sempre online. Può trattarsi di un computer, un NAS, un servizio cloud, l'istanza OwnCloud ospitata autonomamente come proposta da Lawrence o qualsiasi soluzione simile. Ma fintanto che non hai un nodo sempre online questa limitazione si applica sempre.
Gerald Schneider,

3
Uso BitTorrent Sync e lo consiglio vivamente: lo uso insieme a Dropbox per file troppo grandi e che non vale la pena occupare spazio lì. Una cosa da considerare è che non gestisce bene le modifiche simultanee dei file - non c'è gestione dei conflitti come con Dropbox - vince semplicemente l'ultimo file modificato. Non necessariamente un problema, ma dipende dalle tue esigenze.
zelanix,

16

Se vuoi diventare hardcore, puoi usare il comando rsync in modo nativo in OsX , come lo staff * nix.

Prima di tutto, è necessario disporre dell'autorizzazione per accedere all'host remoto tramite ssh. Il server OpenSSH è preinstallato su Mac OsX e non è necessario installare alcun pacchetto aggiuntivo. Devo solo fare alcune impostazioni di sistema. Per abilitare il server OpenSSH su Mac OS X, apri Preferenze di Sistema e fai clic su Condivisione. Quindi, seleziona la casella Accesso remoto per abilitare SSH, quindi seleziona il pulsante di opzione etichettato Tutti gli utenti dalla sezione Consenti accesso per .

Ora puoi accedere all'host remoto tramite ssh.

Ora, è necessario creare una chiave di accesso pubblico per l'accesso senza password dal computer guest locale all'host remoto tramite ssh. Per questo devi sporcarti un po 'la mano. :)

Innanzitutto, determinare se si dispone già di chiavi di autenticazione. Nel Terminale , esegui:

sudo ls -la /var/root/.ssh

Se vedi "id_dsa" e id_dsa.pub , puoi saltare il resto di questa sezione.

Sul computer client, eseguire quanto segue nel Terminale:

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

Dopo aver creato la chiave di accesso nel computer guest locale, è necessario copiare la chiave pubblica del guest nel file authorized_keys dell'host. Puoi farlo con un semplice comando Terminale che aggiunge la chiave pubblica all'elenco delle chiavi autorizzate:

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

Il comando seguente che eseguirà un backup incrementale del filesystem di root nel computer guest locale sull'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

È possibile modificare i parametri di rsync per modificare i comportamenti di sincronizzazione. Se aggiungi questo comando in crontab , la sincronizzazione può essere eseguita in qualsiasi ciclo temporale. Per esempio:

sudo crontab -e

aggiungi la riga sotto a 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

Verrà eseguita la sincronizzazione ogni mezz'ora.

Ecco lo script Python di esempio:

#!/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: sencerhamarat@gmail.com
"""

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()

Avevo preso in considerazione l'uso di rsync, tuttavia il problema risiede qui: "Cosa succede se rsync non è completamente finito dopo i 30 minuti?" Non voglio che si verifichino contemporaneamente due rsync. C'è un modo per aggirare questo?
Muncherelli,

1
@muncherelli: è relativamente indolore scrivere un piccolo meccanismo di "blocco" attorno a rsync per evitare sincronizzazioni simultanee. Fondamentalmente, avvolgi la chiamata rsync in uno script bash e sei libero di fare tutto ciò che vuoi.
unperson325680,

Ho aggiunto uno script di esempio. Spero che sarà di aiuto.
Sencer H.

Questa è una sceneggiatura fantastica. Grazie mille per l'aiuto. Ho deciso di utilizzare BitTorrent Sync a causa della semplicità e della limitazione della larghezza di banda. (So ​​che puoi impostare l'utilizzo massimo della larghezza di banda con rsync, ma BTS è molto più intuitivo).
muncherelli,

8

Owncloud è una possibile soluzione se si desidera l'accesso basato sul Web.

Avrai bisogno del tuo server su cui ospitare Owncloud, tuttavia si tratta più di una soluzione basata su server in cui i tuoi 2 client possono accedere a ciò di cui hanno bisogno a piacimento, ma ci sarà solo 1 copia del file in questione, che si troverà sul Server Owncloud.


È ancora possibile collegarsi a un solo cloud? Ad esempio, non posso averne uno mio e condividerlo con mio fratello?
Thomas Weller,

Almeno i client di sincronizzazione desktop ora supportano più connessioni cloud simultanee. Ma anche all'interno di un server, puoi condividere solo file / directory specifici, non necessariamente tutto.
ojdo,


2

Se Windows, c'è uno strumento SyncToy che lo fa in tre passaggi. se Mac, si tratta di ChronSync utensile o tri-backup strumento


Ciao Ruslan, puoi modificare la tua risposta per spiegare perché ChronSync o Tri-Backup sarebbero la soluzione ideale per l'OP? In questo momento, è una risposta di qualità molto bassa e in realtà non risponde al come della domanda. Grazie
Canadian Luke REINSTATE MONICA

Ciao, grazie per la tua domanda. Beh, non sto dicendo che questi programmi sono la soluzione ideale, ma penso che sia abbastanza facile perché hanno una GUI, il che significa anche che chiunque può farlo senza una profonda comprensione di un gruppo di magie da riga di comando. Inoltre credo che se uno ha un problema con l'utilizzo dei programmi elencati, dovrebbe essere posto in una domanda separata, come quello che ha fatto, cosa è sbagliato \ strano. È piuttosto che copiare qui la documentazione per loro senza che vengano poste domande particolari.
Ruslan Gerasimov,

2

Considera Unisone. Gestisce la sincronizzazione dei file a due vie. Puoi impostarlo su una pianificazione con crono con un'altra app di pianificazione.

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

Unison è uno strumento di sincronizzazione dei file per Unix e Windows. Consente a due repliche di una raccolta di file e directory di essere memorizzate su host diversi (o dischi diversi sullo stesso host), modificate separatamente e quindi aggiornate propagando le modifiche in ciascuna replica all'altra.

Unison condivide una serie di funzionalità con strumenti come pacchetti di gestione della configurazione (CVS, PRCS, Subversion, BitKeeper, ecc.), Filesystem distribuiti (Coda, ecc.), Utility di mirroring unidirezionale (rsync, ecc.) E altri sincronizzatori (Intellisync, Riconcilia, ecc.). Tuttavia, ci sono diversi punti in cui differisce:


1
+1: quando è richiesta la sincronizzazione bidirezionale, questo chiaramente vince su rsync, pur avendo tutte le sue fantastiche funzioni.
ojdo,

1

Ho avuto fortuna con GoodSync con due PC sulla stessa LAN, ma scommetto che funzionerebbe ancora bene nella tua situazione.

Ecco la loro descrizione del prodotto:

  • GoodSync sincronizza i file tra computer, dispositivi mobili, FTP, SFTP, Amazon S3, Google Drive, SkyDrive, WebDAV, Azure.
  • GoodSync esegue il backup dei file su unità portatili, dispositivi mobili e FTP, S3, GDocs, SkyDrive, DAV o un altro computer.
  • Sincronizzazione P2P diretta: GoodSync Connect sincronizza i file direttamente tra i computer, senza rallentamento introdotto dalla sincronizzazione tramite server di terze parti.
  • GoodSync è molto veloce e sincronizza i file su tuo comando, periodicamente, secondo una pianificazione o in tempo reale (al cambio di file).

Hai solo bisogno di configurare GoodSync su uno dei tuoi PC; gestisce la sincronizzazione bidirezionale e il tipo di sincronizzazione è personalizzabile. Inoltre, è altamente raccomandato da CNet.


Ciao Jon, puoi modificare la tua risposta per spiegare perché GoodSync sarebbe la soluzione ideale per l'OP? In questo momento, è una risposta di qualità molto bassa e in realtà non risponde al come della domanda. Grazie
Canadian Luke REINSTATE MONICA

1

Un'altra possibile soluzione è AeroFS .

AeroFS sincronizza in modo bidirezionale i dati tra i tuoi dispositivi, memorizzando sempre e solo i tuoi dati sui tuoi dispositivi - i tuoi dati non si avvicinano mai ai loro server. AeroFS mantiene una cronologia delle revisioni per i tuoi file in modo da poter tornare alle versioni precedenti quando necessario e fornisce uno strumento per la risoluzione dei conflitti.

AeroFS funziona su Windows, Mac, Linux, iOS e Android, quindi dovrebbe essere coperto.


0

Quindi, in linea di principio, se non ti opponi all'archiviazione cloud, esistono due soluzioni hardware per unità esterne:

Space Monkey utilizza un paradigma interessante .. alloca parte del tuo disco per l'archiviazione di piccoli pezzi di dati di altre persone e memorizza anche i tuoi dati su molte unità di altre persone (crittografate, ovviamente). In questo modo, c'è molta ridondanza in caso di disastro e le tue macchine non devono essere in grado di vedersi o essere connesse allo stesso tempo.

Il trasportatore di file è un po 'più semplice, in quanto i dati vengono sempre e solo sincronizzati su altre unità di trasportatore di file che hai impostato in modo specifico per la sincronizzazione.

Entrambe le opzioni sono valide per grandi quantità di dati e si acquista l'hardware una sola volta senza costi di abbonamento.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.