Question Comment synchroniser le dossier personnel entre plusieurs ordinateurs?


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

Est rsync de quoi faire ça? et comment?


102


origine


Le problème avec la plupart des outils de «synchronisation» (y compris rsync, si je me souviens bien), est qu’ils n’ont aucune notion d’action 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) si vous avez ajouté ce fichier sur l'ordinateur Y. ainsi, lors de la synchronisation, ils ajouteront à nouveau le fichier sur l'ordinateur X (au lieu de le supprimer sur l'ordinateur Y). - Rabarberski
@Rabarberski de nombreux outils de synchronisation (dont 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 vrai problème avec la plupart des outils de synchronisation réside dans le fait que les fichiers ont été modifiés à deux endroits avant la prochaine synchronisation - dans ce cas, vous devez généralement effectuer une fusion manuelle ou la remplacer par la version la plus récente. - Chris
La synchronisation lorsque les modifications ne peuvent pas être copiées instantanément sur les autres machines est très délicate et je n'ai jamais vu aucun programme le faire parfaitement, alors préparez-vous à quelques bogues, conflits, réapparition de fichiers. Je recommanderais de ne synchroniser que certains dossiers spécifiques que vous savez pouvoir gérer par le programme de synchronisation. - Arno


Réponses:


Voici une liste de choses qui pourraient potentiellement résoudre ce problème, chacune équilibre les compromis que vous avez à faire différemment, vous devrez donc faire vos propres choix et essayer par vous-même:

  • Unisson - Comme mentionné par d'autres, ceci est exécuté manuellement, mais est très rapide, fiable et efficace. Nécessite que les deux machines soient synchronisées pour être en même temps. Il possède une interface utilisateur agréable pour vous permettre de gérer les conflits presque inévitables, et suit et propage les suppressions correctement. L'application graphique / package s'appelle unison-gtk.

  • OwnCloud - Le stockage en nuage s'exécute sur votre propre serveur. Vous aurez besoin d'une machine pour partir. Nécessite une quantité raisonnable de configuration. Exécute un serveur Web Apache 2 complet 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 subi quelques changements dans la façon dont le projet est exécuté, et a maintenant une nouvelle source entièrement ouverte (c.-à-d. aucune édition d'entreprise fermée) sous le couvert de NextCloud, (regarde ça interview sur youtube avec le développeur OwnCloud original pour plus de détails).

  • SparkleShare - utilise git pour garder les fichiers synchronisés. Selon la page d'accueil: bon pour beaucoup de petits fichiers, pas bon pour beaucoup de gros fichiers tels que la musique ou la collection de photos.

  • Seafile - Fournit un composant serveur que vous pouvez installer sur un ordinateur local. Seafile utilise un modèle de données semblable à git pour suivre les modifications. Fournit des clients de synchronisation pour les ordinateurs de bureau, les tablettes et les 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 périodique" (texte du site)

  • PowerFolder - Projet Java basé sur GPL v2. 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 et existant depuis des décennies, il ne conserve toutefois 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 les machines et XMPP pour communiquer les modifications.

  • annexe de git- outil en ligne de commande pour contourner les fichiers, basé sur git. Il y a une solution illustrative ici: http://git-annex.branchable.com/walkthrough/

  • Tonido - un freeware. Fournit une application de bureau qui partagera des fichiers avec d'autres appareils. Fournissez également des offres de cloud commercial, ainsi que l'ordinateur plug-in TonidoPlug.

  • BitTorrent Sync (freeware) - Synchronisation de fichiers peer-to-peer basée sur BitTorrent. Je ne sais pas grand chose à ce sujet car je ne vais pas l'utiliser car il n'est pas open source et ne lui faisant pas confiance pour conserver mes données dans mon réseau local, n'hésitez pas à modifier cette réponse avec de meilleures informations / expériences réelles.

  • Synchroniser - Développé en tant qu’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, apple iCloud sont tous rapides et peu coûteux, mais ils nécessitent tous la confiance d'une entreprise avec toutes vos données, et nécessitent une connexion Internet assez rapide.

  • Git / subversion - Utilisez directement un système de contrôle de source. Entièrement manuel et peut être une approche un peu complexe mais populaire avec certains utilisateurs familiers avec ces systèmes de les utiliser comme outils de programmation.

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

  • NFS mount - votre maison vit essentiellement sur une machine et vous l’accédez via le réseau, ce qui n’est pas bon pour les ordinateurs portables que vous emportez avec vous. Plus d'informations: http://www.linuxjournal.com/article/4880


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

  • Serveur central - certaines solutions nécessitent une machine pour être synchronisée avec les autres machines. 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 / Programmé - La meilleure façon d'éviter d'avoir à résoudre des conflits lorsque quelque chose change plus qu'une machine est d'avoir un programme sur chaque machine qui surveille les modifications et se synchronise immédiatement, de manière à réduire la possibilité de se retrouver avec plusieurs versions. Avec les processus manuels, vous devez toujours vous souvenir de lancer la synchronisation.

  • Accès à distance - souhaitez-vous vous synchroniser avec votre réseau local (aka home), pensez aux conséquences sur la sécurité de celui-ci.

  • Sécurité: vos données quittent-elles votre réseau chiffrées ou non, à quel point le transfert entre les machines est sécurisé? Que se passe-t-il si quelqu'un capture vos données en déplacement et que le cryptage présente des failles? Qui contrôle le serveur qui conserve vos données, les données sont-elles cryptées, pouvez-vous faire confiance à des tiers? Avez-vous des trous dans votre routeur pour obtenir un accès à distance? Pendant combien de temps les fichiers «supprimés» et les métadonnées associées restent sur les périphériques synchronisés et sur le serveur central. Vous synchronisez entre le stockage chiffré et non chiffré?

  • Déplacement de dossiers volumineux - les solutions que j'ai essayées ont toutes un problème: lorsque vous déplacez / renommez un fichier ou un dossier, la synchronisation ne le comprend pas et la télécharge à nouveau, puis supprime l'ancienne copie. Aidez-nous en marquant toutes les solutions ci-dessus qui sont capables de faire face à cela (je pense que les solutions basées sur git font que git n'en souffre pas en raison de l'adressage basé sur le contenu qu'il utilise mais que je ne connais pas ne les a pas utilisés).

  • Capacité du disque

  • Sauvegardes - la synchronisation n'est pas une sauvegarde. Supprimez un fichier important par erreur et bon nombre de ces éléments supprimeront toutes vos autres copies. Je recommande la lecture L'article de Mat Honan sur le piratage pour un bon compte de ce qui peut arriver si vous mettez tous vos oeufs numériques dans un seul panier numérique, pour ainsi dire.


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

Comme 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.

Les références:

  • LinuxFormat - Février 2014 LXF180 p31, "Hosted Storage Roundup"

piratage / tous /


77



J'ai un serveur sans accès root (nécessaire pour installer l'unisson, par exemple). Existe-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 vaut-il la peine de figurer dans votre liste? - YoungFrog


Unisson pourrait être un bon candidat:

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

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

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

Mettre à jour: Oui, Unison peut synchroniser plus de 2 machines. De leur Manuel utilisateur:

Utiliser Unison pour synchroniser plus de deux machines 
 
  Unison est conçu pour synchroniser des paires de répliques. Cependant, il est possible de l'utiliser pour maintenir la synchronisation de groupes plus importants de machines en effectuant plusieurs synchronisations par paires.

Si vous devez le faire, la manière la plus fiable de configurer les machines est d’organiser les machines en une "topologie en étoile", avec une machine désignée comme "hub" et le reste en "rayons", chaque machine étant synchronisée. uniquement avec le hub. Le gros avantage de la topologie en étoile est qu’elle élimine la possibilité de confondre «conflits fallacieux» du fait qu’Unarchie est maintenue pour chaque paire d’hôtes qu’elle synchronise.


27



J'ai eu quelques mauvaises expériences avec l'unisson, pour une raison quelconque de temps en temps au lieu d'ajouter les nouveaux fichiers à partir d'autres ordinateurs, il les a supprimés alors que d'autres fois, cela fonctionnait bien. - jhcaiced
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 effectuer une synchronisation bidirectionnelle fiable. Regardez la réponse suivante pour voir pourquoi à l'unisson peut gérer un cas que rsync ne peut pas: stackoverflow.com/questions/4504357/... - ndemou


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

Je ne modifie pas l'intégralité de mon répertoire personnel, mais seulement une poignée de sous-répertoires contenant des éléments importants. Mais je pense à la conversion en git, car cela semble être mieux pour ce type de travail. (une recherche rapide va vous envoyer dans la bonne direction).

Bonne chance


Mettre à jour: Un effet secondaire agréable avec git est qu'il est facile d'avoir des fichiers spécifiques à l'ordinateur, car il suffit d'avoir une branche pour cet ordinateur (et par défaut, vous obtenez cela par défaut). Donc, vous n'avez pas besoin d'avoir exactement les mêmes fichiers sur tout l'ordinateur, ils doivent seulement être similaires et avoir une branche "principale" commune avec les choses que vous voulez sur tous les différents ordinateurs.


19



Oui L'idée d'utiliser le contrôle de version pour la synchronisation de fichiers rend vraiment mon peau d'exploration. - JohnD
Oui, l'idée est étrange mais vraiment utile. Pensez à un répertoire comme ~ / bin / pour les scripts d'aide privés, ce genre de répertoire est excellent dans un système de contrôle de version. Alors qu'un répertoire tel que .kde se comportera probablement mal dans le système de contrôle de version et sera placé dans une liste d'ignorance pour le fichier non géré. - 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 que je possède dans ma maison sera partagée. La seule question est de savoir comment gérer les commits. c'est-à-dire que certains fichiers doivent entrer dans la validation initiale et refléter ensuite les modifications pour montrer qu'ils sont basés sur le système / etc / skel. - ony
Est-ce que maintenir quelques branches séparées avec vos fichiers est 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), cela n'est pas vraiment utile en ce qui concerne la question d'origine. - Chris


Votre principal problème lors de cette opération consiste à décider comment fusionner les modifications, propager les suppressions et résoudre les conflits. C'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. Étant donné qu'un utilisateur ne peut pas être à deux endroits à la fois (et donc générer des conflits), vous pouvez alors configurer un travail rsync pour qu'il s'exécute lors de la connexion afin d'obtenir des modifications et se déconnecter de l'un de vos ordinateurs. serait le maître ... donc à ce niveau de granularité, vous seriez en train de synchroniser / home / myuser à chaque fois plutôt que de l'intégralité / home /. Un raffinement supplémentaire (dans le cas de personnes ne se déconnectant pas) serait d'exécuter le script push après une courte période d'inactivité.

Il y a beaucoup d'autres solutions potentielles, mais aucune ne résout magiquement ce problème à ma connaissance. La première étape consiste probablement à réfléchir à la manière dont vous utilisez les machines et à élaborer une stratégie de synchronisation adaptée au comportement de votre utilisateur.


6





Je pense que vous pouvez obtenir ce que vous voulez mieux en installant un dossier d'accueil commun. Découvrez cet article http://www.linuxjournal.com/article/4880


5





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

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

rsync -alhz --stats --progress --exclude-from '/etc/rsync_backup_excludes.conf' / -e ssh user@10.10.0.1:/path/to/home/

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

--stats et --progress sont facultatifs 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/*

4



Anacron se synchronisera lorsque la machine est allumée, évitant les emplacements manquants dus aux temps d'arrêt. - Tim Abell
Cela copie l'intégralité de votre racine locale dans le dossier d'accueil distant. Ce n'est pas ce que l'OP a demandé, je ne peux pas non plus imaginer pourquoi quelqu'un voudrait que cela ... - Cerin


Check-out lsyncd

Lsyncd surveille une interface de moniteur d'événement d'arborescence locale   (inotify ou fsevents). Il regroupe et combine des événements pour quelques-uns   secondes, puis génère un (ou plusieurs) processus pour synchroniser le   changements. Par défaut, il s'agit de rsync. Lsyncd est donc un live léger   solution miroir relativement facile à installer ne nécessitant pas   nouveaux systèmes de fichiers ou périphériques de blocs et ne gênent pas le système de fichiers local   performance.

Rsync + ssh est une configuration d'action avancée qui utilise un SSH pour agir   fichier et répertoire se déplace directement sur la cible au lieu de   retransmission de la destination de déménagement sur le fil.

La personnalisation fine peut être réalisée via le fichier de configuration.   Des configurations d'action personnalisées peuvent même être écrites à partir de zéro en cascade   des couches allant de scripts shell à du code écrit dans le language Lua, des scripts shell au code écrit en Lua.


4





Jetez un coup d'oeil à la boîte de dépôt http://www.getdropbox.com/  Plate-forme croisée Win / Linux / Mac


2



Merci, mais non. Je l'ai déjà essayé. Ce n'est pas ce que je recherche. - lamcro
Dropbox est génial et j'utilise leur 2 Go gratuit pour stocker des liens, des photos et d'autres données non essentielles à la mission 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


Monter /home d'un ordinateur aux deux autres. Le montage automatique fonctionne plutôt bien pour cela.


2