Synchronisez un dossier entre 2 ordinateurs, avec un observateur de système de fichiers afin que chaque fois qu'un fichier est modifié, il soit immédiatement répliqué

20

J'ai:

  • un serveur Linux que je connecte via SSH sur le port IP 203.0.113.0 1234

  • un ordinateur personnel (derrière un routeur), IP public 198.51.100.17, qui est soit Debian soit Windows + Cygwin

Quel est le plus facile d'avoir un dossier /home/inprogress/ synchronisé (dans les deux sens), un peu comme rsync, mais avec un observateur de système de fichiers , de sorte que chaque fois qu'un fichier est modifié, il est immédiatement répliqué de l'autre côté? (c.-à-d. pas besoin d'appeler manuellement un programme de synchronisation)

Je recherche une solution en ligne de commande / sans interface graphique, car le serveur est sans tête.

Existe-t-il une solution intégrée Linux / Debian?

Basj
la source
7
Vous décrivez syncthing.
Kusalananda
Il y en a lsync, mais je ne sais pas si cela fonctionne utilement pour la synchronisation bidirectionnelle.
Ulrich Schwarz
lsync, csync2, inotify + rsync, mais je préférerais les utiliser dans un cadre de réseau local.
Rui F Ribeiro
2
Au niveau du système de fichiers, cela ressemble à OCFS2, ou même RAID 1 sur NBD
roaima
3
La synchronisation unidirectionnelle est facile. La synchronisation bidirectionnelle implique la résolution de conflits (oui, cela arrivera à un moment donné), ce qui signifie à son tour une sorte d'interface utilisateur (bien que ce ne soit pas nécessairement une interface graphique).
jcaron

Réponses:

23

Suite au commentaire de @ Kusalananda, j'ai finalement passé quelques heures à tester Syncthing pour ce cas d'utilisation et cela fonctionne très bien. Il détecte automatiquement les modifications des deux côtés et la réplication est très rapide.

Exemple: imaginez que vous travaillez localement sur server.pyvotre logiciel Bloc-notes préféré, vous appuyez sur CTRL + S (Enregistrer). Quelques secondes plus tard, il est automatiquement répliqué sur le serveur distant (sans aucune boîte de dialogue contextuelle).

Une grande chose que j'ai remarquée est que vous n'avez pas à penser à l'IP de l'ordinateur domestique et du serveur avec Syncthing: chaque «périphérique» (ordinateur, serveur, téléphone, etc.) a un DeviceID unique et si vous partagez l'ID avec un autre appareil, il saura automatiquement comment ils doivent se connecter les uns aux autres.

Faire:

  • Côté ordinateur personnel (Windows ou Linux):

    Utilisez l'outil de configuration normal Syncthing dans le navigateur

  • Côté VPS:

    Connectez d'abord le VPS avec une redirection de port:

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

    Cette dernière option redirigera l'outil de configuration Web Syncthing du VPS à l'écoute sur le port 8384 vers le port 8385 de l'ordinateur domestique.

    Exécutez ensuite ceci sur 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 &
    

    Ensuite, sur le navigateur de l'ordinateur personnel, ouvrez http: // localhost: 8385 : ce sera la configuration de synchronisation du VPS!


Autre solution que j'ai essayée:


Avantages supplémentaires de Syncthing que je viens de remarquer:

  • vous pouvez réduire fsWatcherDelaySle config.xmlde 10à 2secondes pour qu'après avoir fait CTRL + S, 2 secondes plus tard (+ le temps de téléchargement, c'est-à-dire moins de 1 seconde pour un petit fichier texte), il soit sur l'autre ordinateur

  • si vous synchronisez deux ordinateurs qui se trouvent dans le même réseau local (en se donnant simplement le DeviceID, pas besoin de se soucier des adresses IP locales), il remarquera automatiquement qu'il n'a pas besoin de transiter via Internet, mais il peut traiter localement. C'est génial et permet une synchronisation de transfert de vitesse très rapide (4 Mo / s!) Des phone <--> computerdeux connectés au même routeur domestique via WiFi ... ... alors qu'il serait bloqué à 100 Ko / s sur ADSL avec une synchronisation Dropbox ! (mon ADSL est limité à 100 Ko / s au téléchargement)

Basj
la source
@sudodus Un ami me l'a déjà recommandé il y a quelques semaines, et je l'avais essayé pour la synchronisation de l'ordinateur <-> par téléphone, mais je n'imaginais pas que cela fonctionnerait aussi bien pour un serveur de développement! Modifiez votre code, appuyez sur Enregistrer, 1 2 3 c'est sur l'autre ordinateur!
Basj
1
+1. J'ai eu le même problème pendant un bon moment, j'ai utilisé rsync + certains scripts pendant des années et j'ai finalement essayé de synchroniser, csync, unison et quelques autres il y a 2 mois. Fonctionne très bien, avec n'importe quel nombre d'ordinateurs, et même lorsque certains d'entre eux n'ont pas de connexion réseau permanente. Peut recommander 100%.
Guntram Blohm prend en charge Monica
1
Heureux d'avoir testé toutes ces différentes solutions @GuntramBlohm! Si vous avez quelques minutes pour poster une réponse pour donner votre avis / comparaison entre synchronisation, rsync, csync, unisson, etc. les avantages / inconvénients de chacun, ce serait super intéressant pour référence future!
Basj
16

On dirait que Unison devrait faire l'affaire.

Unison est un outil de synchronisation de fichiers pour OSX, Unix et Windows. Il permet à deux répliques d'une collection de fichiers et de répertoires d'être stockées sur différents hôtes (ou différents disques sur le même hôte), modifiées séparément, puis mises à jour en propageant les modifications de chaque réplique à l'autre.

Il possède une interface graphique en option qui peut faciliter la résolution des conflits, mais tout peut également être effectué à l'aide d'une interface utilisateur textuelle. Vous pouvez également prédéfinir la façon de résoudre les conflits pour un fonctionnement sans assistance.

Il existe un composant de surveillance de fichiers (fsmonitor) pour déclencher une synchronisation chaque fois que nécessaire. Recherchez «répéter la montre» dans le manuel pour plus de détails.

On dirait que Debian a la bonne version (2.48+) emballée prête à l'emploi .

TooTea
la source
Merci! Le moniteur de fichiers fsmonitor est-il inclus dès la livraison avec Unison, ou devons-nous installer cet outil et le connecter manuellement à Unison?
Basj
1
@Basj Il est inclus dans des versions assez récentes et il est vraiment trivial à configurer. J'ai ajouté un lien vers le manuel.
TooTea
Je l'ai utilisé dans le passé sur un vieux Mac. Cela fonctionne avec un minimum de tracas. Cependant, je ne sais pas si cela convient aux scénarios de serveur.
Rui F Ribeiro