¿Por qué el programa `updatedb` se ejecuta tan rápido?

22

Por lo general, cuando tengo programas que realizan un análisis completo del disco y revisan todos los archivos del sistema, tardan mucho tiempo en ejecutarse. ¿Por qué updatedb se ejecuta tan rápido en comparación?

hugomg
fuente

Respuestas:

22

La respuesta depende de la versión de locateque está utilizando, pero hay una buena posibilidad es mlocate, cuyaupdatedb carreras rápidamente evitando hacer exploraciones de disco completo:

mlocate es una implementación de localizar / actualizadob. La 'm' significa "fusión": updatedb reutiliza la base de datos existente para evitar volver a leer la mayor parte del sistema de archivos, lo que hace que updatedb sea más rápido y no destruye tanto el caché del sistema.

(La base de datos almacena la marca de tiempo de cada directorio, ctime o la mtimeque sea más nueva).

Como la mayoría de las implementaciones de updatedb, mlocate's también omitirá los sistemas de archivos y las rutas que está configurado para ignorar. Por defecto no hay ninguno en mlocateel caso 's, pero las distribuciones suelen proporcionar un básico updatedb.confque ignora los sistemas de archivos en red, sistemas de archivos virtuales, etc. (véase el archivo de configuración de Debian , por ejemplo, lo que es una práctica estándar en Debian, por lo GNU de updatedbestá configurado de manera similar ).

Stephen Kitt
fuente
Bastante buena pregunta y respuesta, ni siquiera sabía que había escaneos "diferenciales".
Rui F Ribeiro
1
¡Gracias! Nunca me había dado cuenta de que modificar un archivo también cambia el ctime y el mtime de todos sus directorios principales.
Hugomg
44
@hugomg No creo que realmente lo haga. Solo debe cambiar el mtimede su padre inmediato.
Kusalananda
Entonces, si lo entiendo correctamente, me mlocateimporta ctimey lo mtimeque implica que solo le importa si la lista de entradas del directorio sigue siendo la misma (sin archivos eliminados o agregados), lo que significa que no le importan los archivos reales. Es eso correcto ?
Sergiy Kolodyazhnyy
@Sergiy: Por supuesto. locateno es grep -R. No lee el contenido del archivo.
Kevin
9

Además de verificar los tiempos de modificación, mlocatetambién ignora ciertos subárboles del sistema de archivos que tienen muchos archivos poco interesantes o potencialmente duplicados, como se especifica en /etc/updatedb.conf (y se describe en man updatedb.conf ):

  • Monturas de unión
  • Algunos tipos de sistemas de archivos (9p, afs, bdev, etc.)
  • Bases de datos del repositorio de VCS (.git, .hg, etc.)
  • Algunos directorios codificados (/ media, / tmp, / var / spool / cups, etc.).
hugomg
fuente
Sin embargo, este no es el caso por defecto, por lo que el comportamiento base depende de la distribución que se utilice. (Otras updatedbimplementaciones también admiten exclusiones configuradas.)
Stephen Kitt
En efecto. Estaba describiendo los valores predeterminados para Fedora.
Hugomg