Rsync qui gère les mouvements de manière sensible

10

J'ai utilisé avec succès rsync pour synchroniser mes répertoires personnels entre mon ordinateur portable et mon netbook (tous deux utilisant ext4 avec Linux). Mon seul problème est que de temps en temps j'aime complètement réorganiser certains répertoires, et rsync voit cela comme des suppressions et la création de nouveaux fichiers, ce qui le rend très lent et inefficace.

Quelqu'un connaît-il un bon logiciel qui gère bien les mouvements de fichiers?

J'ai trouvé que l' unisson devrait être capable de cela, mais cela ne semble pas fonctionner dans la pratique. J'ai testé à l' unisson en synchronisant deux répertoires locaux, chacun avec un gros fichier, et il a toujours détecté mon mouvement comme une suppression + création et était en fait encore plus lent que rsync .

De plus, si je me souviens bien de ma lecture du code source de unison il y a quelques mois, il a essayé de faire quelque chose comme faire des sommes sha - et je ne veux pas que ma solution idéale fasse des sommes sha - qui est trop lent en général fichiers / répertoires. J'aimerais quelque chose qui remarque des choses comme:

"La dernière contrepartie source de ce fichier semble avoir été supprimée et il y a un nouveau fichier ailleurs dans l'arborescence du répertoire source qui a la même date, la même taille et le même numéro d'inode, donc je vais juste supposer qu'il s'agissait d'un mouvement et déplacer son homologue cible en conséquence au lieu de faire une suppression + copie. "

Il est important pour moi de pouvoir synchroniser ces machines rapidement.

Aucune suggestion?

PSkocik
la source

Réponses:

6

Vous devriez jeter un œil à rdiff-backup qu'il fait en rsyncdessous, mais avec l'intelligence supplémentaire dont vous avez besoin (et il permet des sauvegardes incrémentielles capables de revenir en arrière, mais vous pouvez configurer pour désactiver cela).

La dernière version est ancienne (2009), mais c'est un signe de stabilité.

Zelda
la source
2
Quelqu'un a essayé ça?
brume
3

Unison fait ce que vous voulez, mais uniquement pour la synchronisation à distance. Essayez d'utiliser ssh://localhost/path/to/dircomme l'une des racines.

Unison fonde ses décisions sur le contenu des fichiers, il ne suit pas les numéros d'inode.

Gilles 'SO- arrête d'être méchant'
la source
1

Vous pouvez gérer les fichiers déplacés et renommés avec rsync si les systèmes de fichiers des répertoires source et cible prennent en charge les liens matériels. L'idée est de laisser rsync reconstruire les liens durs avant le transfert réel. Vous pouvez trouver une bonne explication ici

Nous nous sommes retrouvés avec une solution simple qui crée une arborescence cachée de liens durs dans le répertoire source / cible, le script de base pourrait être comme ceci:

# Name of hidden directory
Shadow=".rsync_shadow"

# do real sync
rsync -ahHv --stats --no-inc-recursive --delete --delete-after "$Source"/ "$Target"

# update/create hidden dir of hard links in source
rsync -a --delete --link-dest="$Source" --exclude="/$Shadow" "$Source"/ "$Source/$Shadow"

# update/create hidden dir of hard links in target
rsync -a --delete --link-dest="$Target" --exclude="/$Shadow" "$Target"/ "$Target/$Shadow"

J'ai un exemple de script sur GitHub . Mais je vous conseille de faire un grand nombre de tests avant d'utiliser cette méthode en production.

dparoli
la source
0

Si vous souhaitez synchroniser des fichiers entre plusieurs machines, vous pouvez simplement utiliser un système de contrôle de version centralisé comme Subversion (ou FSVS, qui utilise SVN comme backend). La bonne partie est que tout dans votre / home (que vous ajoutez au contrôle de version) est ensuite versionné et peut être facilement synchronisé avec d'autres machines, ou annulé.

tgharold
la source
0

lsyncd gère également les fichiers déplacés avec le comportement rsync + ssh, bien que quelque peu bogué (j'obtiens environ 15% des mouvements traités comme supprimer / copier, mais je ne sais pas pourquoi). La plupart du temps, cela fonctionne.

Support NK
la source