Skip to main content

Monitorizando el sistema de ficheros


Debido a un problema en un servidor acabé teniendo que monitorizar los eventos de un sistema de ficheros ext3 para comprobar que ciertos ficheros estaban siendo escritos en el disco.

Para ello, busqué información relativa al tema y encontré dnotify.
Dnotify trabaja abriendo tantos descriptores de ficheros como directorios intentas monitorizar de esta forma monitoriza el cambio de estado de un directorio pero implica el tener algún método de monitorizar los cambios internos de los ficheros dentro del directorio.
Además implica problemas adicionales al no poder desmontar las unidades monitorizadas ya que se encuentran secuestradas por el descriptor del fichero.
Otro de sus inconvenientes se destapa al tratar de monitorizar una gran cantidad de archivos. En estos casos es probable llegar al limite máximo de descriptores de ficheros permitidos en el equipo, produciendo un comportamiento errático del mismo.

Por fortuna, encontré inotify, una herramienta de monitorización de cambios en ficheros o directorios basado en inodos.

Además de las librerías de inotify, podemos encontrar inotify-tools e inoticoming. Ambas son herramientas muy útiles que nos permiten lanzar acciones según los cambios de estado del fichero o directorio monitorizado.

Vale la pena darles una buena ojeada ya que su uso puede resultar muy provechoso.
Uno de los ejemplos más graciosos es realizar tail -f mediante el uso de la librería inotify, por lo que no se realizaran pulls frecuentes para monitorizar el estado, simplemente se recibirá el evento en el momento del cambio, ahorrando tiempo de proceso y de i/o.

Para acabar, sólo aclarar que para poder usar inotify el kernel debe de poder soportarlo. Prácticamente viene siempre de serie con la rama del kernel 2.6.

Comments

Popular posts from this blog

Programando un algoritmo de flocking / manada

Hace tiempo me interesé por los algoritmos de flocking o movimientos de manada. Esto pude sonar a chino, pero simplemente se trata de tratar emular los movimientos en conjunto de los pajaros, bancos de peces, ovejas…, vamos, cualquier conjunto de animales en movimiento. Las reglas de movimiento, a pesar de que puedan parecer complejas a simple vista, estan basadas sólo en tres simples leyes: Repulsión : Intentar no chocar con los compañeros. Alineamiento : Avanzar en una dirección semejante a la de tus compañeros. Cohesión : Acercarse hacia el centro del grupo. De la media de estos valores se extrae el vector director de cada individuo. VectorDirector = (Repulsión + Alineamiento + Cohesión)/3 Pues con esta idea intenté ayer programar una pequeña demo para implementarlo. Aquí os pongo un video de como esta quedando. Aún quedan por retocar varias cosas ya que algunas reglas no las estoy aplicando estrictamente. La parte más importante que no esta implementada es el

Himno de Teleco

Himno de la carrera de ingeniería de Telecomunicaciones, al más puro estilo Dragon Ball. Para echarte unas risas. Aviso de antemano: el humor de la canción está dirigido exclusivamente a estudiantes de Telecomunicaciones, ingenieros de ídem o a cualquiera que tenga unos conocimientos básicos (universitarios) sobre señales y sistemas. Vamos con Payán, todos a la vez a buscar con ahínco un sistema de transmisión. Sin duda será, convencido estoy, lineal, invariante y sin distorsión. Este mundo es como un filtro ideal donde hay escondido un suspenso en él. Como un filtro multicolor con un cero de transmisión, como una variable aleatoria con toda su gran inversión, el proceso empieza ahora, ¡vamos a filtrar, filtrar, filtrar, filtrar, filtrar! Hallaremos su covarianza y también su correlación, con la respuesta al impulso hallaremos convolución, el filtro sin distorsión será al fin nuestro, oh. Integrémoslo por Fourier, unidos a Gauss no hay que temer pues tenemos el DSP, ¡que no sirve p

Be a pointer, my friend

Empty your memory, with a free()… like a pointer! If you cast a pointer to a integer, it becomes the integer... if you cast a pointer to a struct, it becomes the struct... The pointer can crash..., and can Overflow… Be a pointer, my friend...