• # plusieurs outils de dédoublonnage

    Posté par (Mastodon) . En réponse au journal fdupes : un utilitaire pour gagner de la place sur son disque dur. Évalué à 9. Dernière modification le 10 mai 2018 à 21:59.

    Il existe plusieurs outils de dédoublonnage en mode ligne de commande et qui ne soient pas forcément intégré au système de fichiers (comme l'est celui dans BTRFs) :
    fslint (findup), fdupes, jdupes, rdfind, duff, hadori, hardlink

    Certains sont des forks, réécritures ou amélioration d'un outil existant (jdupes par rapport fdupes)

    J'ai tenté il y a quelques mois de faire un mini-bench de ces outils (j'ai mis la version du paquet Debian à côté du nom du logiciel) :

    fdupes version 1.6.1-1+b1

    fdupes -rm /var/www/
    115221 duplicate files (in 21103 sets), occupying 4825.5 megabytes
    real 0m41,128s
    user 0m18,632s
    sys 0m22,264s

    rdfind version 1.3.4-2.1

    rdfind -n true /var/www/
    removed 71019 files from list.135099 files left.
    (DRYRUN MODE) It seems like you have 135099 files that are not unique
    (DRYRUN MODE) Totally, 4 Gib can be reduced.
    real 0m25,722s
    user 0m21,384s
    sys 0m4,316s

    duff version 0.5.2-1.1+b2

    duff -ar /var/www/ > /dev/null
    ... (pas de mode summary / trop de lignes)
    real 0m32,140s
    user 0m28,696s
    sys 0m3,408s

    jdupes version 1.7-2

    jdupes -rm /var/www/
    116284 duplicate files (in 21102 sets), occupying 5033 MB
    real 0m9,985s
    user 0m4,616s
    sys 0m5,292s

    hadori version 1.0-1

    hadori -tn /var/www/
    (beaucoup trop long...arrêt du programme !)

    hardlink version 0.3.0+b1

    hardlink -n /var/www/
    Mode: dry-run
    Files: 327890
    Linked: 36010 files
    Compared: 0 xattrs
    Compared: 333440 files
    Saved: 1,22 GiB
    Duration: 3,55 seconds
    real 0m3,520s
    user 0m1,140s
    sys 0m2,368s

    Le test portait sur le répertoire /var/www qui contenait 327890 fichiers, 2144 liens symboliques et 50712 répertoires (et quelques répertoires/fichiers inaccessibles pour agrémenter le tout), mais qui avait aussi déjà 46235 fichiers hardlinkés (lien dur).

    On se rends compte que c'est hardlink qui est le plus rapide (3,5 secondes), mais qu'il trouve bien moins de fichiers identiques que jdupes qui met à peine plus de 6 secondes supplémentaires pour trouver 116284 fichiers en double parmi 21102 groupes (c'était probablement dû aux 46k fichiers déjà liés (hard link via ln), mais ça n'empêche que le compte n'y est pas.

    Je n'ai malheureusement pas creuser ce test et je continue d'utiliser hardlink ou jdupes selon les cas (par ex. pour éliminer les sauvegardes PostgreSQL redondantes).

    n.b. : la commande findup du paquet fslint n'a pas été testée (/usr/share/fslint/fslint/findup)

    Il est intéressant de noter que seul jdupes propose une option (-B / --dedupe) permettant d'envoyer un ioctl "same-extents" pour indiquer au système de fichier Btrfs de déclencher une déduplication au niveau FS (lorsque l'outil a été compilé avec le support idoine).