Comment synchroniser le dossier de base entre plusieurs ordinateurs?

117

J'ai trois ordinateurs à la maison et j'aimerais que l' /home/arborescence des dossiers soit synchronisée entre les trois.
Tous les fichiers / dossiers (sauf ceux qui sont cachés) qui sont modifiés / ajoutés / supprimés sur l'un des trois ordinateurs sont mis à jour sur les deux autres.

Est-ce rsyncsuffisant pour faire ça? et comment?

lamcro
la source
9
Le problème avec la plupart des outils de «synchronisation» (y compris rsync si je me souviens bien) est qu’ils n’ont pas la notion des actions de l’utilisateur. Donc, si vous supprimez un fichier sur l'ordinateur X, l'outil ne sait pas si (a) vous avez réellement supprimé le fichier sur l'ordinateur X ou (b) que vous avez ajouté ce fichier sur l'ordinateur Y. La plupart des outils vont supposer (b), Ainsi, lors de la synchronisation, ils ajouteront à nouveau le fichier sur l'ordinateur X (au lieu de le supprimer sur l'ordinateur Y).
Rabarberski
5
@Rabarberski De nombreux outils de synchronisation (notamment Unison ou Syncthing) conservent une base de données avec des références aux données existantes (pour cette raison). Cela ne vous aidera pas lors de la synchronisation de nouveaux dossiers pour la première fois, mais ils peuvent très bien supprimer des fichiers pour vous (automatiquement). Le véritable problème de la plupart des outils de synchronisation réside dans le fait que les fichiers ont été modifiés à deux emplacements avant la synchronisation suivante. Dans ce cas de conflit, vous devez généralement procéder à une fusion manuelle ou éventuellement remplacer par la version la plus récente.
Chris
2
La synchronisation lorsque les modifications ne peuvent pas être copiées instantanément sur les autres machines est vraiment délicate et je n’ai jamais vu aucun programme le faire parfaitement. Soyez donc prêt à affronter quelques bugs, conflits, fichiers qui réapparaissent. Je vous recommande de ne synchroniser que certains dossiers spécifiques que vous savez être gérés par le programme de synchronisation.
Elzo

Réponses:

90

Voici une liste d'éléments susceptibles de résoudre ce problème, chacun équilibrant les compromis que vous devez faire différemment pour que vous deviez faire vos propres choix et essayer vous-même:

  • Unison - comme mentionné par d'autres, il est exécuté manuellement, mais est très rapide, fiable et efficace. Exige que les deux machines en cours de synchronisation soient allumées en même temps. Il a une interface utilisateur agréable pour vous permettre de traiter les conflits presque inévitables, et suit et propage les suppressions correctement. L'application / package graphique s'appelle unison-gtk.

  • OwnCloud - Le stockage dans le cloud fonctionne sur votre propre serveur. Vous aurez besoin d'une machine pour partir. Nécessite une quantité raisonnable de configuration. Exécute un serveur Web complet Apache 2 et une base de données SqlLite ou MySQL sur le serveur. Fonctionne comme Dropbox avec un client de bureau, mais le serveur est sous votre contrôle. edit: OwnCloud a récemment modifié la façon dont le projet est exécuté et dispose maintenant d'une nouvelle source entièrement ouverte (c'est-à-dire sans édition «entreprise» à source fermée) sous le couvert de NextCloud (voir l' interview youtube avec le développeur original de OwnCloud). pour plus de détails).

  • SparkleShare - utilise git pour maintenir les fichiers synchronisés. Selon la page d'accueil: convient à de nombreux fichiers plus petits, pas à beaucoup de fichiers volumineux tels que la musique ou la collection de photos.

  • Seafile - Fournit un composant serveur que vous pouvez installer sur une machine locale. Seafile utilise un modèle de données similaire à git pour suivre les changements. Fournit des clients de synchronisation pour ordinateurs de bureau, tablettes et smartphones. Un article de blog décrivant la configuration peut être trouvé à http://openswitch.org/blog/2013/07/18/installing-and-configuring-seafile-on-ubuntu-12-dot-04/

  • Osync - "... outil de synchronisation de fichiers bidirectionnel écrit en bash et basé sur rsync. Il fonctionne sur les répertoires locaux et / ou distants via des tunnels ssh. Il est principalement destiné à être lancé en tant que tâche cron" (texte du site Web)

  • PowerFolder - projet GPL v2 basé sur Java. Le site Web principal propose des offres commerciales, de sorte qu'il n'est pas clair comment utiliser le fichier .jar fourni.

  • Rsync - rapide et efficace, existe depuis des décennies. Toutefois, il ne conserve pas d'historique. Vous devez donc choisir une direction pour décider si un fichier est nouveau ou supprimé. Des outils graphiques sont disponibles tels que gwRsync .

  • Lsyncd - surveille les dossiers / fichiers pour déclencher la réplication rsync

  • dvcs-autosync - écrit en python, utilise git pour stocker et partager les modifications entre machines et XMPP pour communiquer les modifications.

  • git-annex - outil de ligne de commande pour déplacer des fichiers, basé sur git. Il y a une procédure pas à pas illustrative ici: http://git-annex.branchable.com/walkthrough/

  • Tonido - gratuiciel. Fournit une application de bureau qui partagera des fichiers avec d'autres appareils. Fournissez également des offres commerciales dans le cloud et l'ordinateur à fiche TonidoPlug.

  • BitTorrent Sync (freeware) - synchronisation de fichiers entre homologues basée sur BitTorrent. Je ne connais pas grand-chose à ce sujet, car je ne l'utiliserai pas parce que ce n'est pas open source et que je ne lui fais pas confiance pour conserver mes données sur mon réseau local. N'hésitez pas à modifier cette réponse avec de meilleures informations / expériences réelles.

  • SyncThing - Développé comme une alternative open source à BitTorrent Sync. Il manque actuellement certaines des fonctionnalités avancées de BitTorrent Sync, telles que les pairs non fiables. Il est en développement actif.

  • Les services hébergés commerciaux tels que dropbox, ubuntu one, google drive et apple iCloud sont rapides, peu coûteux et pratiques, mais ils nécessitent tous de faire confiance à une entreprise disposant de toutes vos données et nécessitent une connexion Internet relativement rapide.

  • Git / subversion - Utilisez directement un système de contrôle de source. Complètement manuel et peut être une approche un peu complexe mais populaire auprès de certains utilisateurs familiarisés avec ces systèmes en les utilisant comme outils de programmation.

  • CloudFS - Syncronise un système de fichiers complet, basé sur une technologie de cluster

  • Montage NFS - votre maison n’est habitée que par un seul ordinateur et vous y accédez par le réseau, ce qui n’est pas bon pour les ordinateurs portables que vous emportez. Plus d'infos: http://www.linuxjournal.com/article/4880


Facteurs à prendre en compte pour prendre votre décision:

  • Serveur central: certaines solutions requièrent qu'une machine soit allumée en permanence (ou du moins lorsque vous devez synchroniser) pour que d'autres machines puissent se synchroniser. Cela peut être une de vos machines existantes ou une machine séparée telle qu'un NAS. Attention aux factures d'électricité accrues.

  • Automatique / Manuel / Planifié - Le meilleur moyen d'éviter de devoir résoudre des conflits lorsque quelque chose est modifié sur plusieurs machines consiste à avoir un programme sur chaque machine qui surveille les modifications et se synchronise immédiatement, ce qui vous permet de réduire les risques de multiples versions. Avec les processus manuels, vous devez toujours vous rappeler d’exécuter la synchronisation.

  • Accès à distance - si vous souhaitez effectuer une synchronisation en dehors de votre réseau local (à domicile), réfléchissez aux conséquences de ce problème pour la sécurité.

  • Sécurité - vos données laissent-elles votre réseau crypté ou non, le transfert entre les machines est-il sécurisé? Que se passe-t-il si quelqu'un capture vos données en déplacement et que plus tard, le cryptage présente des défauts? Qui contrôle le serveur qui conserve vos données, les données sont-elles cryptées, pouvez-vous faire confiance à des tiers? Devez-vous percer des trous dans votre routeur pour obtenir un accès à distance. Combien de temps les fichiers "supprimés" et les méta-données associées restent-ils sur les périphériques synchronisés et sur le serveur central? Etes-vous en train de synchroniser entre le stockage crypté et non crypté?

  • Déplacement de dossiers volumineux - les solutions que j'ai essayées ont toutes le même problème: lorsque vous déplacez / renommez un fichier ou un dossier, la synchronisation ne comprend pas cela et le télécharge à nouveau comme nouveau, puis supprime l'ancienne copie. Aidez-nous en signalant toutes les solutions ci-dessus capables de traiter ce problème (je suppose que les solutions basées sur git font ce que git ne souffre pas de ce problème en raison de l'adressage basé sur le contenu qu'il utilise, mais je ne le sais pas avec ne les avez pas utilisés).

  • Capacité du disque

  • Sauvegardes - la synchronisation n'est pas une sauvegarde. Supprimez un fichier important par erreur et bon nombre des éléments ci-dessus supprimeront joyeusement toutes vos autres copies. Je vous recommande de lire l'article de Mat Honan sur le piratage pour avoir un compte rendu de ce qui peut arriver si vous mettez tous vos œufs numériques dans un même panier numérique, pour ainsi dire.


Je recommande de ne pas synchroniser l'intégralité du dossier de base, mais de sélectionner des dossiers spécifiques à synchroniser, tels que Documents/, Pictures/etc. Cela évitera la douleur d'être obligé de gérer les problèmes de vitesse / performance / espace disque liés à la synchronisation automatique de tout. Cela évite également de devoir maintenir des listes d'exclusion.

Alors que je continue à essayer de trouver quelque chose qui fonctionne pour moi personnellement, je vais essayer de garder cette réponse à jour avec des informations utiles. J'ai regroupé les informations de toutes les autres réponses en une réponse complète.

Références:

  • LinuxFormat - Février 2014 LXF180 p31, "Roundup de stockage hébergé"

piratage / tous /

Tim Abell
la source
J'ai un serveur sans accès root (qui est nécessaire pour installer unison, par exemple). Y a-t-il un script que je peux avoir sur mon ordinateur client et qui n'a pas besoin d'être installé sur mon serveur?
Ben Kushigian
J'ai vu un logiciel nommé freefilesync ( sourceforge.net/projects/freefilesync ) mentionné à quelques reprises ici et là. Peut-être la peine d'être mentionné dans votre liste?
YoungFrog
28

Unison pourrait être un bon candidat:

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

Il effectue déjà des synchronisations bidirectionnelles. Voir mise à jour ci-dessous.

J'ai appris qu'il y a très peu de choses que rsync ne peut pas faire et qu'il peut probablement fournir une solution égale ou meilleure, mais vous devrez attendre qu'un expert en rsync se présente pour cette solution.

Mise à jour: Oui, Unison peut synchroniser plus de 2 machines. De leur manuel d'utilisation :

Utilisation de Unison pour synchroniser plus de deux machines

Unison est conçu pour la synchronisation de paires de répliques. Cependant, il est possible de l'utiliser pour garder synchronisés des groupes de machines plus importants en effectuant plusieurs synchronisations par paire.

Si vous avez besoin de le faire, la méthode la plus fiable consiste à organiser les machines en une "topologie en étoile", une machine étant désignée "hub" et les autres en tant que "rayons", et chaque machine à rayons se synchronisant. seulement avec le moyeu. Le gros avantage de la topologie en étoile est qu’elle élimine la possibilité de «conflits parasites» déroutants, du fait qu’un archive distincte est maintenue par Unison pour chaque paire d’hôtes synchronisés.

nagul
la source
J'ai de mauvaises expériences avec l'unisson, pour une raison quelconque de temps en temps, au lieu d'ajouter les nouveaux fichiers d'autres ordinateurs, il les a supprimés alors que d'autres fois, cela fonctionnait bien.
Jhcaiced
1
Je suggère de modifier l'exemple a / b / c pour suivre la recommandation du manuel de ne pas créer de boucles.
Tim Abell
En ce qui concerne votre référence à rsync. Non, il ne peut pas faire de synchronisation fiable. Regardez la réponse suivante pour savoir pourquoi unison peut gérer un cas que rsync ne peut pas: stackoverflow.com/questions/4504357/…
ndemou
19

Que diriez-vous de mettre vos fichiers dans un système de contrôle de version tel que SubVersion ou git?

Je ne fais pas la version complète de mon répertoire personnel, mais seulement une poignée de sous-répertoires contenant des informations importantes. Mais je songe à me convertir en git, car cela semble mieux pour ce type de travail. ( une recherche rapide va vous envoyer dans la bonne direction ).

Bonne chance


Mise à jour : Un effet secondaire intéressant avec git est qu’il est facile d’avoir des fichiers spécifiques à un ordinateur, puisqu’il vous suffit d’avoir une branche pour cet ordinateur (et vous obtenez cela par défaut). Il n'est donc pas nécessaire que tous les ordinateurs contiennent exactement les mêmes fichiers, ils doivent être identiques et avoir une branche "principale" commune avec les éléments que vous souhaitez sur tous les ordinateurs.

Johan
la source
Beurk. L’idée d’utiliser le contrôle de version pour la synchronisation de fichiers me permet vraiment d’analyser ma peau.
JohnD
Oui, l'idée est étrange mais vraiment utile. Pensez à un répertoire tel que ~ / bin / pour les scripts d'assistance privés, ce type de répertoire est très utile dans un système de contrôle de version. Tandis qu’un répertoire comme .kde se comportera probablement mal dans le système de contrôle de version et serait placé dans une liste à ignorer pour les fichiers non gérés.
Johan
C'est un excellent moyen de garder vos fichiers synchronisés. Vous devez vous habituer à l'idée d'utiliser "git add" et "git rm" pour ajouter / supprimer des fichiers, mais cela fonctionne très bien.
jhcaiced
J'aime cette idée parce que je contrôle quelle partie des fichiers de la corbeille que j'ai chez moi sera partagée. La seule question est de savoir comment gérer les commits. En d'autres termes, certains fichiers doivent entrer dans la validation initiale, puis refléter les modifications pour indiquer qu'ils sont basés sur le système / etc / skel.
Seulement
Maintenir quelques branches distinctes avec vos fichiers est-il vraiment pratique lorsque vous essayez de synchroniser des répertoires? Bien sûr, cela fonctionne, mais je ne le recommanderais pas (g) pour cette tâche. Vous pouvez généralement exclure des fichiers de la plupart des outils de synchronisation (par nom, dossier, etc.) et, pour ce que vous décrivez (en l'utilisant uniquement pour certains sous-répertoires importants), ce n'est pas vraiment utile en ce qui concerne la question d'origine.
Chris
6

Votre principal problème lorsque vous essayez de le faire est de décider comment fusionner les modifications, propager les suppressions et résoudre les conflits. Ceci est difficile à faire de manière complètement automatisée, surtout si vous avez une configuration à 3 ordinateurs utilisée par plusieurs personnes.

Si vous séparez les utilisateurs, les choses deviennent beaucoup plus simples. Parce qu'un utilisateur ne peut pas être à deux endroits à la fois (et donc générer des conflits), vous pouvez ensuite configurer un travail rsync à exécuter lors de la connexion pour "obtenir les modifications" et vous déconnecter pour "transmettre les modifications" ... à l'un de vos ordinateurs serait le maître ... donc à ce niveau de granularité, vous synchroniseriez / home / myuser à chaque fois plutôt que le tout / home /. Un raffinement supplémentaire (au cas où des personnes ne se déconnecteraient pas) serait exécuté après une courte période d'inactivité.

Autant que je sache, il existe de nombreuses autres solutions possibles, mais aucune ne résout ce problème comme par magie. La première étape consiste probablement à réfléchir à la manière dont vous utilisez les machines et à définir une stratégie de synchronisation adaptée au comportement de votre utilisateur.

Ira Cooke
la source
4

Cela ne fournira pas une solution complète, mais cela vous donnera un début:

Configurez un travail cron de temps en temps pour rynchroniser les fichiers. J'utilise une commande comme celle-ci:

rsync -alhz --stats --progress --exclude-from '/etc/rsync_backup_excludes.conf' / -e ssh [email protected]:/path/to/home/

Ceci utilisera rsync pour ne copier que les modifications nécessaires, pas pour tout recopier à chaque exécution de la commande.

--stats et --progress sont optionnels et devraient probablement être exclus de vos scripts

le contenu de mon fichier rsync_backup_excludes.conf est le suivant:

dev/*
proc/*
lost+found/*
mnt/*
sys/*
Matt Cofer
la source
Anacron se synchronise lorsque la machine est allumée, évitant ainsi les emplacements manquants en raison des temps d'arrêt.
Tim Abell
Cela copie l'intégralité de votre racine locale dans le dossier de base distant. Ce n'est pas ce que l'OP a demandé, et je ne puis imaginer pourquoi quelqu'un voudrait que ...
Cerin
4

Découvrez lsyncd

Lsyncd surveille une interface de moniteur d'événements d'arbres de répertoires locaux (inotify ou fsevents). Il regroupe et combine les événements pendant quelques secondes, puis génère un (ou plusieurs) processus pour synchroniser les modifications. Par défaut c'est rsync. Lsyncd est donc une solution de miroir dynamique légère et relativement facile à installer, ne nécessitant pas de nouveaux systèmes de fichiers ni de blocs périphériques, et ne nuit pas aux performances du système de fichiers local.

Rsync + ssh est une configuration d'action avancée qui utilise un SSH pour agir. Le fichier et le répertoire se déplacent directement sur la cible au lieu de retransmettre la destination du déplacement par le fil.

La personnalisation fine peut être réalisée via le fichier de configuration. Les configurations d'actions personnalisées peuvent même être écrites de toutes pièces dans des couches en cascade allant des scripts shell au code écrit en langage Lua. Les couches allant des scripts shell au code écrit en langage Lua.

Eric
la source
2

Jetez un coup d’œil à la Dropbox http://www.getdropbox.com/ Cross platform Win / Linux / Mac

Boxdog
la source
3
Merci, mais non J'ai déjà essayé. Ce n'est pas ce que je cherche.
Lamcro
Dropbox est formidable et j'utilise leurs 2 Go gratuits pour stocker des liens, des photos et d'autres données non stratégiques entre la maison, le travail et mes ordinateurs portables. Ce n'est pas ce dont vous avez besoin dans cette situation, mais à mon avis, Dropbox a définitivement sa place.
Matt Cofer
2

Montez /homed'un ordinateur sur les deux autres. Automount fonctionne plutôt bien pour cela.

Xenoactive
la source
1

Ubuntu One pourrait être ce que vous cherchez. Malheureusement, il est encore en phase bêta et je n’ai aucune expérience en la matière. Je ne sais donc pas si cela fonctionnerait pour vous.

Ilari Kajaste
la source
Je dirais que le développement est encore intense pour le moment - il y a des mises à jour tous les quelques jours car l'équipe Ubuntu corrige les problèmes. Cela fonctionne, mais je ne le recommanderais pas à Dropbox.
Nagul
1

Si vous souhaitez également synchroniser les configurations, les outils mentionnés ci-dessus sont totalement impuissants: les configurations sont souvent modifiées et de nombreux fichiers journaux créent des conflits et ne peuvent donc pas être fusionnés.
Ma tromperie est simple et stupide :) J'ai un poste de travail principal et tous les fichiers de "~" sont simplement copiés dans le deuxième "Esclave". Au moment où je réalise que je dois modifier quelque chose - je le fais sur Master et Slave capte ces modifications en synchronisation.

De plus, certains scripts bash doivent fonctionner différemment sur ces machines. J'ai donc édité mon /etc/bash.bashrc:

exportation OOHOST = Master

Maintenant, les scripts savent quel hôte ils servent;)

kolypto
la source
1

Essayez dvcs-autosync .

Ceci est basé sur git, utilise XMPP pour informer les clients connectés des modifications de fichier et réagit aux événements de modification de fichier via des modifications inode. Donc, il est toujours informé juste après le changement de fichier, en cas de conflit, il s’appuie sur les méthodes éprouvées de git.

Je l'utilise depuis un certain temps maintenant pour remplacer Dropbox via des clés publiques SSH et cela fonctionne vraiment bien.

schlypel
la source
0

PowerFolder - Synchroniser les fichiers, synchroniser les dossiers, stockage à distance, sauvegarde et partage de fichiers privé. Synchronisez votre ordinateur personnel et professionnel, partagez des photos de vacances ou travaillez ensemble sur des documents. La technologie sécurisée d'égal à égal de PowerFolder fonctionne sur Internet ou en réseau local.

Molly7244
la source
0

Les solutions de contournement que je considérerais:

  • Dropbox.
    Principaux inconvénients: ce n’est pas gratuit pour une quantité raisonnable de données. Sinon, cela fonctionne parfaitement à mon humble avis

  • Un serveur NAS. Mettez vos fichiers sur un serveur NAS, ils sont devenus relativement abordables récemment (à partir de 150 $) et un bon ne consomme pas beaucoup d’énergie. Pas de problèmes de synchronisation jamais.
    Principal inconvénient: plus lent qu'une copie locale

Rabarberski
la source
Avec le NAS, vous ne parlez toujours pas de la manière dont la synchronisation se produit. Avoir un NAS et deux ordinateurs n’est en principe pas différent de celui de trois ordinateurs visés par OP. Si vous suggérez que tout ce qui doit être synchronisé est simplement stocké sur le NAS, ce n'est généralement pas possible - envisagez la synchronisation des fichiers de configuration, par exemple - ils doivent se trouver sur chaque ordinateur.
kba
0

J'utilise SyncTwoFolders pour Mac et Syncback pour PC - le premier pour mes trois Mac à la maison (ordinateur portable inclus) et le second pour mon PC au travail. Les deux programmes disposent de diverses options de sauvegarde et de synchronisation, ce qui facilite la tâche une fois les préréglages configurés. Peasy facile! Je suis sûr qu'il existe d'autres versions de logiciels similaires disponibles pour Linux et Ubuntu.

Henk le ThinkTank
la source
0

Vous pouvez utiliser un script de synchronisation tel que osync, qui peut propager les fichiers supprimés et ne mettre à jour que les fichiers modifiés. http://www.netpower.fr/osync osync est basé sur rsync mais peut gérer de nombreux scénarios de synchronisation entre dossiers locaux ou distants via ssh.

Orsiris de Jong
la source