Información
Actualidad
Aquí encontraras noticias de actualidad sobre Gnu Linux y Open Source.

Además de información sobre la comunidad LiGNUx.
Distribuciones y entornos
Información ordenada sobre los diferenes sistema operativos Gnu Linux y las diferentes opciones de entornos gráficos.
Tutoriales y guías
Todos los pasos e informaciones que puedes desear para tu día a día.
Tutoriales
Tutoriales
Programación
Programación
About Us
Get to know the people behind the code and the mission behind the work
how we handle data
Privacy
Security
Legal

Presentación de godedupe (alternativa a fdupes)

18 julio, 2018

Unos compañeros y yo estuvimos trabajando hace un tiempo en una alternativa para fdupes. Como en este blog se suelen comentar muchas herramientas y programas diversos, decidí escribir este breve post explicando el proyecto y el estado actual para darlo a conocer.

Descripción

Originalmente queríamos aprender Go, estuvimos pensando en proyectos más o menos sencillos pero útiles y finalmente decidimos que una buena forma de hacerlo sería hacer una especie de fdupes. A diferencia de este, queríamos tratar de hacer una alternativa más eficiente y de paso tener la libertad de experimentar de forma relativamente sencilla. Así que decidimos crear este un nuevo proyecto (llamado godedupe). Su principal función, al igual que fdupes, es la de encontrar archivos duplicados en el sistema (pero godedupe según los tests tarda la mitad de tiempo y tiene opciones que fdupes no tiene).

Imágen random para cumplir con la recomendación del plugin de wordpress

 

Para buscar estos duplicados el algoritmo que sigue godedupe es el siguiente; primero comprueba si el tamaño de dos ficheros son iguales o no, si se da el caso es evidente que no son duplicados, en caso contrario (si tienen el mismo tamaño), se hace un checksum de los primeros 1024 kbytes de los dos archivos y se comprueba (de esta forma evitamos tener que leer todo el fichero), por último si el checksum sigue siendo el mismo hacemos un checksum de todo el fichero entero. Obviamente existe la posibilidad teórica de un falso positivo, pero dado que en total hacemos dos checksums y además comprobamos el tamaño del fichero, suponemos que la posibilidad de que eso ocurra en la práctica es despreciable (si alguien opina lo contrario, estaría interesante ver una prueba de ello).

A parte también queríamos (aún no esta implementado) usar fuzzy hashing para poder buscar archivos que sean muy similares aún no siendo duplicados, por ejemplo en el caso de que existieran dos ficheros de texto duplicados y se modificara uno de ellos. El problema es que esto resulta extremadamente lento, tienes que leer todos los archivos enteros.

Benchmark

Para evaluar la diferencia de rendimiento entre godedupe y fdupes se ejecuto un script (https://github.com/OSPG/godedupe/blob/develop/simple_benchmark.sh) muy sencillo que ejecuta tres veces fdupes y godedupe en dos casos de uso distinto. En un caso crea pocos ficheros pero de un gran tamaño (2 GB), en el segundo caso crea muchos ficheros de pequeño tamaño (pocos bytes). En cada caso imprime el tiempo que tarda en ejecutarse godedupe y fdupes.

Este test se probo en dos máquinas muy distintas (una tenía un i7 con 8 threads, 16GB y SSD y el otro un dual core bastante viejo con 4GB de RAM y un HDD que también era bastante lento), los resultados fueron los siguientes (los valores son la media de las tres ejecuciones).

  • Máquina 1
    • Test 1
      • 12.8s (fdupes)
      • 5.9s (godedupe)
    • Test 2
      • 1.05s (fdupes)
      • 0.2s (godedupe)
  • Máquina 2
    • Test 1
      • 117s (fdupes)
      • 59.8s (godedupe)
    • Test 2
      • 4.6s (fdupes)
      • 1.1s (godedupe)

Aún así, aún hay rango para experimentar y tratar de añadir más optimizaciones, sobretodo para la parte de I/O. Por ejemplo reduciendo la cantidad de lecturas al disco a la hora de recorrer los directorios.

Funcionalidades

A parte del tema de rendimiento, godedupe también tiene unos defaults más sanos. Por defecto ignora los ficheros y carpetas ocultas y los ficheros vacíos que en general no nos interesa comprobar. Por defecto también recorre las carpetas que se le pasen argumentos recursivamente, por lo que debería ser más fácil de usar que fdupes.

También tiene opciones que fdupes no tiene, como filtrar por pattern (por ejemplo para filtrar extensiones de ficheros),  o para limitar la profundidad de la búsqueda como find. Por otro lado falta añadir alguna opción como la que tiene fdupes para borrar los duplicados automáticamente.

 

Actualmente godedupe solo tiene un paquete disponible para Gentoo mediante un overlay externo (https://github.com/OSPG/gentoo-overlay/tree/master/app-misc/godedupe). Pero la idea es que a medida que el proyecto vaya madurando se vayan creando paquetes para otras distros, como arch o void. Si alguien estuviera interesado en hacer un paquete para alguna distro o aportar alguna idea o colaborar de cualquier forma esta bienvenido.

Para todo lo que sean ideas o propuestas en general lo mejor es abrir una issue o si es un aporte de código mandar una PR en el repositorio del proyecto alojado en Github (no, a mi tampoco me gusta Github) https://github.com/OSPG/godedupe. Si alguien tiene alguna otra duda también puede dejar un comentario en este post o contactarme por telegram a @stkw0 .

Escrito por David Roman

Suscribirse
Notificarme las
guest
1 Comentario
Los más recientes
Los más antiguos Más votados
Feedbacks en línea
Ver todos los comentarios
LiGNUx trabaja sobre una licencia de Creative Commons Reconocimiento 4.0 Internacional.
cloudflagpaperclipprinterfile-emptyfilm-playcamera-videopicturelaptop-phonebriefcasecrossmenu
linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram