Debido a mi profesión, tengo que tratar con problemas que van surgiendo en el diario, que gracias al conocimiento adquirido a lo largo de los años y a la ayuda de la búsqueda de problemas similares en Internet, finalmente he podido solucionar.

El problema surge cuando tenemos un error y no sabemos de dónde puede provenir.

En mi caso particular me pasaba lo siguiente:

– El servidor dedicado donde alojo las webs, no me permitía reiniciar el proceso me daba errores del tipo “no space left on device” , “write failed” “user block limit reached”

– Era bastante extraño este error, ya que, el disco duro es de 1TB y comprobándolo, tenía la siguiente la información:

~ # df
S.ficheros         Bloques de 1K   Usado    Dispon Uso% Montado en
/dev/md/1             10403064   3252248   6626532  33% /
udev                   4035092       208   4034884   1% /dev
/dev/md/2            958137332  49863180 859986824   6% /home
shm                    4035092         0   4035092   0% /dev/shm

– Curioso, ejecutando el comando df  pude observar que tan solo tenía ocupado un 33%.

– Indagando, encontré que el fallo se produjo por una saturación de i-nodos , ejecutando el comando df -i obtuve la siguiente información

~ # df -i
S.ficheros           Nodos-i NUsados NLibres NUso% Montado en
/dev/md/1             655360  655360       0   100% /
udev                 1008773    5418 1003355    1% /dev
/dev/md/2            60366848  910175 59456673    2% /home
shm                  1008773       1 1008772    1% /dev/shm

– Generalmente esto se produce por la creación de infinidad de ficheros pequeños dentro del directorio, en este caso, raíz /.

– ¿Cómo encontrar dónde se encuentran dichos ficheros? Ejecutando

find . -printf "%i\n" | sort -u | wc -l

– De esta forma obtendremos el número de ficheros de cada directorio, empezaremos por el principal / y luego por los directorios que haya , hasta encontrar el que contiene más ficheros.

– En mi caso particular el problema surgió por el proceso qmail, el cual había generado (y generaba) de forma constante una serie de emails que insertaba continuamente en la cola de correos (queue).

– Para solucionar este problema, realicé los siguientes pasos:

  1. Descargué queue-repair de la web http://pyropus.ca/software/queue-repair/
  2. Lo descomprimí, en mi caso dentro del directorio /root/temp/
  3. Y cree un script en bash con los siguientes parámetros
#!/bin/bash

/etc/init.d/qmail stop
rm -rf /var/qmail/queue
/root/temp/queue-repair-0.9.0/queue_repair.py -c -s 23 --no-bigtodo .
/root/temp/queue-repair-0.9.0/queue_repair.py -c -s 23 --no-bigtodo /var/qmail

rm -rf /var/log/qmail/lock
/etc/init.d/qmail start

De esta forma, cada vez que tengo algún problema con la cola de correo qmail, ejecutando el script, realiza todos los pasos necesarios para solucionarlo.

Para comprobar que de nuevo funciona correctamente, utilizo el siguiente comando para enviarme un correo desde qmail

# echo test | mail emailquesea@loquesea.com
# tail -f /var/log/qmail/current

Espero que os sirva de ayuda y que encontréis esta solución sin perder tanto tiempo como el que invertí yo.