Existe-t-il des scripts de déduplication qui utilisent CoW btrfs comme dédoublonnage?

9

Vous cherchez de nombreux outils de déduplication sous Linux, voir par exemple cette page wiki .

Presque tous les scripts effectuent uniquement la détection, l'impression des noms de fichiers en double ou la suppression des fichiers en double en les reliant en dur à une seule copie.

Avec la montée en puissance de btrfs, il y aurait une autre option: créer une copie CoW (copie sur écriture) d'un fichier (comme cp reflink=always). Je n'ai trouvé aucun outil qui le fasse, quelqu'un est-il au courant de l'outil qui le fait?

Peter Smit
la source
Mise à jour: La branche de développement de rmlint, et je crois également maître, a ajouté ce qui suit: 1) Hachage incrémentiel de fichiers. Il ne ré-hachera pas un fichier, sauf s'il a changé depuis la dernière exécution [c'est énorme]. 2) Déduplication incrémentielle . Il supprime uniquement les fichiers qui ne l'ont pas déjà été ou qui ont changé. [C'est encore plus énorme.] Combiné avec uniquement des fichiers de hachage après l'échec de toutes les autres méthodes de comparaison rapide, il est imbattable. Bedup est abandonné et ne compilera apparemment pas. J'ai fait une comparaison détaillée: docs.google.com/spreadsheets/d/…
Jim

Réponses:

17

J'ai écrit bedup à cet effet. Il combine l'analyse btree incrémentielle avec la déduplication CoW. Idéal pour Linux 3.6, où vous pouvez exécuter:

sudo bedup dedup
Gabriel
la source
Salut @Gabriel, un commentaire à ma réponse ci-dessous déclare que "... bedup ... mettre les choses dans des seaux de taille et ne lire que le fichier entier, pour créer des sommes de contrôle, si nécessaire." Est-ce vrai? Si oui, je voudrais mettre à jour ma réponse ci-dessous. (Et utilisez bedup moi-même!) Malheureusement, je n'ai pu le vérifier nulle part. J'ai essayé Google, la recherche sur votre page github et une recherche sur le code. Merci.
Jim
4

J'ai essayé de dormir. Bien qu'il soit bon (et possède des fonctionnalités différenciées utiles qui peuvent en faire le meilleur choix pour beaucoup), il semble analyser l'intégralité de tous les fichiers cibles pour les sommes de contrôle.

Ce qui est douloureusement lent.

En revanche, d'autres programmes, tels que rdfind et rmlint, analysent différemment.

rdfind a une fonctionnalité "expérimentale" pour utiliser le reflink btrfs. (Et des options "solides" pour les liens physiques, les liens symboliques, etc.)

rmlint a des options "solides" pour le clone btrfs, le reflink, les liens physiques réguliers, les liens symboliques, la suppression et vos propres commandes personnalisées.

Mais plus important encore, rdfind et rmlint sont nettement plus rapides. Comme dans, des ordres de grandeur. Plutôt que d'analyser tous les fichiers cibles pour les sommes de contrôle, il le fait, environ:

  • Analysez l'ensemble du système de fichiers cible, en rassemblant uniquement les chemins et les tailles de fichiers.
  • Retirez de la considération, les fichiers avec des tailles de fichiers uniques. Rien que cela, économisez du temps et de l'activité du disque. ("Scads" est une fonction exponentielle inverse ou quelque chose.)
  • Parmi les candidats restants, scannez les N premiers octets. Supprimez de la considération ceux qui ont les mêmes tailles de fichier mais différents N premiers octets.
  • Faites de même pour les N derniers octets.
  • Il ne reste que cette fraction (généralement minuscule ), recherchez les sommes de contrôle.

Je connais d'autres avantages de rmlint:

  • Vous pouvez spécifier la somme de contrôle. md5 trop effrayant? Essayez sha256. Ou 512. Ou une comparaison bit à bit. Ou votre propre fonction de hachage.
  • Il vous donne la possibilité de "cloner" Btrfs, et "reflink", plutôt que simplement reflink. "cp --reflink = always" est juste un peu risqué, en ce qu'il n'est pas atomique, il ne sait pas ce qui se passe d'autre pour ce fichier dans le noyau, et il ne conserve pas toujours les métadonnées. "Clone", OTOH (qui est un terme raccourci ... je supprime le nom officiel lié à l'API), est un appel au niveau du noyau qui est atomique et préserve les métadonnées. Il en résulte presque toujours la même chose, mais un peu plus robuste et sûr. (Bien que la plupart des programmes soient suffisamment intelligents pour ne pas supprimer le fichier en double, s'il ne parvient pas à créer un nouveau lien temporaire avec l'autre.)
  • Il a une tonne d'options pour de nombreux cas d'utilisation (ce qui est également un inconvénient).

J'ai comparé rmlint avec deduperemove - qui analyse également à l'aveugle tous les fichiers cibles pour les sommes de contrôle. Duperemove a pris plusieurs jours sur mon volume pour terminer (4 je pense), allant complètement. fmlint a pris quelques heures pour identifier les doublons, puis moins d'une journée pour les dédoubler avec le clone Btrfs.

(Cela dit, quiconque fait l'effort d'écrire et de prendre en charge un logiciel robuste et de qualité et le donne gratuitement, mérite des félicitations majeures!)

Btw: Vous devriez éviter à tout prix de dédoublonner en utilisant des liens physiques réguliers comme solution de déduplication "générale".

Bien que les liens physiques puissent être extrêmement pratiques dans certains cas d'utilisation ciblés (par exemple, des fichiers individuels ou avec un outil qui peut rechercher des types de fichiers spécifiques dépassant une certaine taille minimale - ou dans le cadre de nombreuses solutions de sauvegarde / instantané gratuites et commerciales), cela peut être désastreux pour la "déduplication" sur un grand système de fichiers à usage général. La raison en est que la plupart des utilisateurs peuvent avoir des milliers de fichiers sur leur système de fichiers, qui sont identiques en binaire, mais fonctionnellement complètement différents.

Par exemple, de nombreux programmes génèrent des modèles et / ou des fichiers de paramètres cachés (parfois dans chaque dossier qu'il peut voir), qui sont initialement identiques - et la plupart le restent, jusqu'à ce que vous, l'utilisateur, n'en ayez pas besoin.

À titre d'illustration spécifique: les fichiers de cache de miniatures de photos, que d'innombrables programmes génèrent dans le dossier contenant les photos (et pour une bonne raison - la portabilité), peuvent prendre des heures ou des jours pour être générés, mais faire de l'utilisation d'une application photo un jeu d'enfant. Si ces fichiers de cache initiaux sont tous liés ensemble, vous ouvrez ensuite l'application sur un répertoire et il crée un grand cache ... alors devinez quoi: Maintenant, CHAQUE dossier qui a un cache précédemment lié, a maintenant le mauvais cache. Potentiellement, avec des résultats désastreux pouvant entraîner une destruction accidentelle des données. Et aussi potentiellement d'une manière qui explose une solution de sauvegarde qui n'est pas compatible avec les hardlinks.

De plus, cela peut ruiner des instantanés entiers. L'intérêt des instantanés est que la version "en direct" puisse continuer à changer, avec la possibilité de revenir à un état précédent. Si tout est lié entre eux mais ... vous "revenez" à la même chose.

La bonne nouvelle, cependant, est que la déduplication avec le clone / reflink Btrfs peut réparer ces dommages (je pense - car pendant l'analyse, il devrait voir les fichiers liés comme identiques ... à moins qu'il ne soit logique de ne pas considérer les liens durs. Cela dépend probablement de l'utilitaire spécifique faisant la déduplication.)

Jim
la source
Ce n'est pas correct; bedup fait de même, met les choses dans des seaux de taille et ne lit que le fichier entier, pour créer des sommes de contrôle, si nécessaire. En outre, bedup stocke le résultat de cette opération afin que les exécutions suivantes soient encore plus rapides.
Peter Smit
@PeterSmit, je voudrais mettre à jour ma réponse (et envisager de revenir moi-même à Bedup), si je peux vérifier la première partie de votre commentaire. Le readme github de Bedup ne le mentionne pas, et une recherche de "taille de fichier" ou "taille de fichier" ne donne aucune réponse évidente. Comment puis-je vérifier?
Jim
De plus, le lit semble abandonné depuis 3 ans. Ce qui est dommage, car cela semble être une idée vraiment fantastique que j'aimerais utiliser! J'espère que vous le récupérerez.
Jim