Fondamentalement, je cherche à voir s'il existe un outil ou un script qui peut détecter les fichiers déplacés ou renommés afin que je puisse obtenir une liste de fichiers renommés / déplacés et appliquer la même opération à l'autre extrémité du réseau pour économiser la bande passante.
Fondamentalement, le stockage sur disque est bon marché, mais la bande passante ne l'est pas, et le problème est que les fichiers seront souvent réorganisés ou déplacés dans une meilleure structure de répertoires.Par conséquent, lorsque vous utilisez rsync pour effectuer la sauvegarde, rsync ne remarquera pas qu'il s'agit d'un fichier renommé ou déplacé le fichier et le retransmettre sur le réseau à nouveau malgré le même fichier à l'autre extrémité.
Je me demande donc s'il existe un script ou un outil qui peut enregistrer où se trouvent tous les fichiers et leurs noms, puis juste avant une sauvegarde, il réanalyserait et détecterait les fichiers déplacés ou renommés, alors je peux prendre cette liste et réappliquer l'opération déplacer / renommer de l'autre côté.
Voici une liste des fonctionnalités "générales" des fichiers:
- Grands fichiers immuables
- Ils peuvent être renommés ou déplacés
[Modifier:] Ce sont toutes de bonnes réponses, et ce que je finis par faire à la fin était de regarder toutes les réponses et j'écrirai du code pour y faire face. Fondamentalement, ce à quoi je pense / travaille actuellement:
- Utiliser quelque chose comme AIDE pour l'analyse "initiale" et me permettre de garder des sommes de contrôle sur les fichiers car ils sont censés ne jamais changer, donc cela aiderait à détecter la corruption.
- Créer un démon inotify qui surveillerait ces fichiers / répertoires et enregistrer toutes les modifications relatives aux renommages et déplacer les fichiers vers un fichier journal.
- Il existe certains cas marginaux où inotify peut ne pas enregistrer que quelque chose est arrivé au système de fichiers, il y a donc une dernière étape d'utilisation de la recherche pour rechercher dans le système de fichiers les fichiers dont le temps de modification est supérieur à la dernière sauvegarde .
Cela présente plusieurs avantages:
- Somme de contrôle / etc de AIDE pour pouvoir vérifier / s'assurer que certains médias ne sont pas corrompus
- Inotify réduit l'utilisation des ressources et n'a pas besoin de réanalyser le système de fichiers encore et encore
- Pas besoin de patcher rsync; Si je dois patcher des choses que je peux, mais je préférerais éviter de patcher des choses pour réduire la charge (IE n'a pas besoin de re-patcher chaque fois qu'il y a une mise à jour).
- J'ai déjà utilisé Unison et c'est vraiment sympa, mais j'aurais juré qu'Unison garde des copies sur le système de fichiers et que ses fichiers "archive" peuvent devenir assez gros?
C'est un peu une solution étrange, mais ... git détecte les mouvements et renomme en fonction du contenu du fichier, donc si vous deviez garder les répertoires en question sous contrôle de version, alors git serait en mesure de détecter les mouvements et autres et éviter de transférer le contenu (car il est déjà des deux côtés du fil) tout en déplaçant les choses dans l'arbre.
Juste une pensée.
la source
suggestions intéressantes ici. Penser également à utiliser les capacités du système de fichiers, c'est-à-dire ZFS J'ai trouvé étrange qu'il n'y ait aucun outil qui fasse cette chose simple. L'option Unison ne fonctionne pas dans la plupart des cas, comme le rapportent les gens, pas pour moi non plus.
Je souhaite que la fonctionnalité conserve la sauvegarde de ma collection de films sur le deuxième disque dur en synchronisation lors de la réorganisation des dossiers.
Maintenant, j'ai trouvé ce simple script C http://sourceforge.net/projects/movesync/
Semble bien fonctionner. Exécutez-le puis synchronisez normalement avec ie à l'unisson.
la source
Vous pourrez peut-être utiliser un ID basé sur l'hôte tel que AIDE et écrire un script wrapper en utilisant sa sortie. Vous devrez probablement écrire une logique plus complexe compte tenu des sommes de contrôle.
Sinon, un système de fichiers basé sur le réseau pourrait avoir un sens, car les modifications seraient reflétées à tous les emplacements. Néanmoins, je soupçonne que vous transférez sur Internet, ce qui limitera les options ici.
la source
Vous pourriez essayer à l' unisson ; en particulier le
option mentionnée dans les documents comme
on dirait qu'il pourrait faire ce que vous voulez.
la source
Syrep fait ce dont vous avez besoin. Il garde à jour les résumés des messages dans une arborescence de fichiers; garder les résumés autour le rend plus efficace que rsync. Il a été conçu pour sneakernet, vous pouvez donc ajouter un wrapper qui met à jour / makepatch / fusionne à la fois.
la source
Je ne sais pas s'il existe un outil existant qui le fait pour vous, mais vous pouvez écrire un script simple qui exécute simplement un
find
sur le répertoire de base oùmtime
est plus récent que la dernière sauvegarde. Cela vous donnera une liste de tous les fichiers qui ont été modifiés . Si un fichier a été simplement déplacé, il n'apparaîtra pas dans la liste. Malheureusement, cette liste inclura les répertoires dans lesquels les fichiers ont été déplacés, car le répertoire est mis à jour lorsqu'un fichier est ajouté / supprimé.Avec cette liste de fichiers, vous pouvez utiliser rsync pour synchroniser uniquement ces fichiers. rsync a une option pour lire dans une liste de fichiers. Voici un test montrant cet exemple:
Veuillez noter que j'ai attendu environ 1 minute entre l'exécution de chaque
find
commande. De cela, il montre que lors de la création initiale du fichier, il est répertorié parfind
. Si je déplace le fichier dans un autre répertoire et réexécute lafind
commande, il n'affiche que le répertoire dans lequel j'ai déplacé le fichier, et non le fichier lui-même. Vous pouvez utiliser une combinaison de commandesfind
etrsync
pour répertorier uniquement les fichiers que vous souhaitez, il peut probablement atteindre votre objectif.J'espère que ça aide.
la source
Compte tenu de votre flux de travail, je me demande si travailler au niveau du fichier (comme ce que d'autres ont proposé jusqu'à présent) est la meilleure solution. Tu pourrais travailler ...
Au niveau du système de fichiers
L'idée est que le système de fichiers garde une trace des opérations entre les sauvegardes. Au lieu de faire une sauvegarde du système de fichiers, sauvegardez le journal du système de fichiers (et éventuellement relisez les modifications sur la machine de sauvegarde, si vous voulez une sauvegarde prête à l'emploi). Un journal de système de fichiers exprime naturellement les mouvements et les suppressions en quelques octets.
Fuse facilite la conception d'un système de fichiers avec des exigences spécifiques qui se trouve au-dessus d'un «vrai système de fichiers». Je ne l'ai jamais utilisé, mais LoggedFS semble prometteur.
Avec cette solution, il serait utile d'avoir une forme de compression de journal. Par exemple, si un fichier a été écrasé 10 fois, ne conservez que sa dernière mise à jour dans le journal. Une autre optimisation intéressante serait de reconnaître les opérations de copie et, mieux encore, les modifications (c'est-à-dire la création d'un fichier qui est principalement mais pas complètement identique à un autre fichier). Je ne sais pas si quelqu'un a mis cela en œuvre. Pour votre flux de travail, je ne pense pas que cela importerait de toute façon.
Au niveau du volume
L'idée est que le gestionnaire de volumes garde la trace des opérations entre les sauvegardes. Au lieu de faire une sauvegarde du système de fichiers, prenez un instantané avec le gestionnaire de volume et sauvegardez l'instantané exprimé en diff de l'instantané précédent.
Cela devrait bien fonctionner si tout ce que vous faites est de créer des fichiers, de les renommer et de les supprimer. Il serait beaucoup plus difficile de détecter des choses comme les copies et les modifications, ou d'optimiser la création d'un fichier suivie de sa suppression.
la source
Unison est bon pour cela, mais doit toujours copier les fichiers localement et il ne peut pas détecter un déplacement / renommage si le contenu du fichier a également changé un peu.
J'ai créé un script Python simple pour détecter les fichiers et répertoires renommés / déplacés à l'aide de numéros d'inode (* nix uniquement) et relire ces modifications sur la machine synchronisée. Vous pouvez l'utiliser seul ou comme "préprocesseur renommant" pour Unison ou rsync. Il se trouve ici
la source