Sincronizza una cartella tra 2 computer, con un watcher del filesystem in modo che ogni volta che un file viene modificato, viene immediatamente replicato


20

Io ho:

  • un server Linux che collego tramite SSH su IP 203.0.113.0 porta 1234

  • un computer di casa (dietro un router), IP pubblico 198.51.100.17, che è Debian o Windows + Cygwin

Qual è il modo più semplice per /home/inprogress/ sincronizzare una cartella (in entrambe le direzioni), un po 'come rsync, ma con un osservatore del filesystem , in modo che ogni volta che un file viene modificato, viene immediatamente replicato dall'altra parte? (ovvero non è necessario chiamare manualmente un programma di sincronizzazione)

Sto cercando una soluzione a riga di comando / senza GUI, poiché il server è senza testa.

Esiste una soluzione integrata Linux / Debian?


7
Stai descrivendo syncthing.
Kusalananda

lsync, ma non so se funzioni utilmente per la sincronizzazione bidirezionale.
Ulrich Schwarz,

lsync, csync2, inotify + rsync, ma preferirei usarli in un'impostazione di rete locale.
Rui F Ribeiro,

2
A livello di filesystem, suona come OCFS2, o anche RAID 1 su NBD
roaima,

3
La sincronizzazione unidirezionale è semplice. La sincronizzazione bidirezionale implica la risoluzione dei conflitti (sì, accadrà ad un certo punto), che a sua volta significa una sorta di interfaccia utente (anche se non necessaria una GUI).
Jcaron,

Risposte:


23

Dopo il commento di @ Kusalananda, ho finalmente trascorso alcune ore a testare Syncthing per questo caso d'uso e funziona benissimo. Rileva automaticamente le modifiche su entrambi i lati e la replica è molto veloce.

Esempio: immagina di lavorare localmente sul server.pytuo software Notepad preferito, premi CTRL + S (Salva). Pochi secondi dopo viene replicato automaticamente sul server distante (senza alcuna finestra popup).

Una cosa fantastica che ho notato è che non devi pensare all'IP del computer di casa e del server con Syncthing: ogni "dispositivo" (computer, server, telefono, ecc.) Ha un DeviceID univoco e se condividi l'ID con un altro dispositivo, scoprirà automaticamente come dovrebbero connettersi tra loro.

Fare:

  • Lato del computer di casa (Windows o Linux):

    Utilizza il normale strumento di configurazione Syncthing nel browser

  • Lato VPS:

    Innanzitutto collegare il VPS con un port forwarding:

    ssh <user>@<VPS_IP> -L 8385:localhost:8384
    

    Quest'ultima opzione reindirizzerà lo strumento di configurazione web Syncthing del VPS in ascolto sulla porta 8384 sulla porta 8385 del computer di casa.

    Quindi eseguilo su VPS:

    wget https://github.com/syncthing/syncthing/releases/download/v0.14.52/syncthing-linux-amd64-v0.14.52.tar.gz 
    tar xvfz syncthing-linux-amd64-v0.14.52.tar.gz
    nohup syncthing-linux-amd64-v0.14.52/syncthing &
    

    Quindi sul browser del computer di casa, apri http: // localhost: 8385 : questa sarà la configurazione Syncthing del VPS!


Altra soluzione che ho provato:


Ulteriori vantaggi di Syncthing che ho appena notato:

  • è possibile ridurre fsWatcherDelaySin config.xmlda 10a 2secondi in modo che dopo aver fatto CTRL + S, 2 secondi più tardi (+ il tempo necessario per caricare, vale a dire meno di 1 secondo per un piccolo file di testo) è su un altro computer

  • se sincronizzi due computer che si trovano nella stessa rete locale (semplicemente dando il DeviceID l'uno all'altro, non è necessario preoccuparsi degli indirizzi IP locali), noterà automaticamente che non è necessario transitare via Internet, ma può trattare a livello locale. Questo è fantastico e consente una sincronizzazione del trasferimento di velocità molto veloce (4 MB / s!) Di phone <--> computerentrambi collegati allo stesso router di casa tramite WiFi ... ... mentre sarebbe bloccato a 100 KB / s su ADSL con una sincronizzazione Dropbox ! (la mia ADSL è limitata a 100 KB / s al momento del caricamento)


@sudodus Un amico me lo aveva già consigliato alcune settimane fa e l'avevo provato per la sincronizzazione del telefono con il computer, ma non immaginavo che avrebbe funzionato così bene anche per un server di sviluppo! Modifica il tuo codice, premi Salva, 1 2 3 è sull'altro computer!
Basj,

1
+1. Ho avuto lo stesso problema per un bel po ', ho usato rsync + alcuni script per anni e infine ho provato a sincronizzare, csync, unison e alcuni altri 2 mesi fa. Funziona alla grande, con qualsiasi numero di computer, e anche quando alcuni di loro non hanno una connessione di rete permanente. Posso raccomandare il 100%.
Guntram Blohm supporta Monica il

1
Fantastico che tu abbia testato tutte queste diverse soluzioni @GuntramBlohm! Se hai qualche minuto per pubblicare una risposta per dare il tuo feedback / confronto tra syncthing, rsync, csync, unison, ecc. I pro / contro di ciascuno, sarebbe super interessante per riferimento futuro!
Basj,

16

Sembra che Unison dovrebbe fare il lavoro.

Unison è uno strumento di sincronizzazione dei file per OSX, 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.

Ha una GUI opzionale che può rendere un po 'più semplice la risoluzione dei conflitti, ma tutto può anche essere fatto usando un'interfaccia utente basata su testo. È inoltre possibile predefinire come risolvere i conflitti per un'operazione completamente automatica.

C'è un componente di controllo file (fsmonitor) per attivare una sincronizzazione ogni volta che è necessario. Cerca "ripeti orologio" nel manuale per i dettagli.

Sembra che Debian ha la versione destra (2.48+) confezionato fuori dalla scatola .


Grazie! Il file watcher fsmonitor è incluso nella confezione con Unison o dobbiamo installare questo strumento e collegarlo manualmente con Unison?
Basj,

1
@Basj È incluso nelle versioni abbastanza recenti ed è davvero banale da configurare. Ho aggiunto un link al manuale.
TooTea

L'ho usato in passato su un vecchio Mac. Funziona solo con il minimo fastidio. Non ho idea se sia appropriato per gli scenari del server.
Rui F Ribeiro,
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.