Linux – no se puede crear archivo nuevo

Published on

in

,

Esta crónica comienza con una llamada vespertina, hay un incidente en ambiente productivo. El log del programa indica que el error ocurre en la linea 143, la descripción del error: log file has not been initialized.

Habiendo revisado el código fuente, el log se inicializa unas cuantas líneas antes de la reportada en el.error, en la número 113 para ser exactos. Entre esta y la línea 143, hay algunas asignaciones y líneas en blanco, ninguna instrucción que cierre o libere el apuntador al log. Entonces, ¿Por qué ese error?

La primera revisión de rutina es validar qué cuenta de usuario ejecuta el programa y en qué ruta de disco se está intentando escribir. El resultado de esta revisión es que el usuario que ejecuta el programa y el grupo al que pertenece es propietario del programa, del directorio donde se pretende escribir el log y con permisos de escritura.

La segunda revisión de rutina es, sin duda, validar que haya espacio disponible en disco. Ya he tenido experiencias en que no se depuran los logs y se deja que se acumulen, por años, y/o que crezcan virtualmente sin límite. Ejecutamos la confiable

$df -h .

Al menos 4GB libres.

Tercera revisión de rutina. Verificamos que el nombre de archivo haga sentido al sistema operativo, es decir, que no tenga caracteres especiales, espacios, algún caracter o palabra reservada. Era poco probable porque ese código no se ha movido en años. Si bien, el nombre de archivo se construye a partir de datos que se obtienen de una tabla en base datos, quizás algún usuario creativo se puso a jugar con ellos.

Nada, todas las revisiones arrojaron resultados esperados, hasta que hice una revisión para validar cuándo se había creado correctamente el último archivo (fecha y hora) tratando de reconstruir los eventos que derivaron en ese error.

El ls simplemente se limitó a responder: la lista de archivos es denasiado larga. Esto también me lo he encontrado cuando en efecto la lista es absurdamente larga, hablando de cientos de miles de archivos. Intenté reducir la lista buscando patrones que hicieram el conjunto más pequeño pero ni así logré un ls exitoso. ¿En verdad había tantos archivos?

Así fue, había un millón cuatroscientos veintiseis mil setecientos doscientos sesenta y nueve archivos (1,426,269) en ese directorio. Entonces me pregunté ¿Cuál es el número máximo de archivos que linux puede manejar por directorio? Un número mayor que Windows, sin duda, ¿Pero cuántos? No puede ser infinito, para esos que defienden linux con argumentos sin sentido.

Resulta que eso depende de la configuración de las particiones y otros tantos parámetros, y puede variar entre cada uno, pero, sí se puede saber explícitamente el límite superior con el comando:

df -i

Este comando mostrará los detalles del total de inodes disponibles, los utilizados y los que quedan libres. Cada inode es un posible archivo.

Ahí estaba el problema.

Según la captura de pantalla, la línea resaltada corresponde con el directorio donde no se podía crrar nuevos archivos, indica que hay 15523 nodos disponibles, sí debería poder crear archivos nuevos con base en este análisis, ¿Entonces?

Hablé con quien reportó el problema y me dijo «pensé que era por falta de espacio, así que borré unos archivos pero el problema persistió».

Eso explicaba por qué había nodos disponibles, pero no el porqué seguía sin poder crear un log.

Depuré el directorio, había archivos de log con más de seis meses de antigüedad, logs tan viejos no sirven, esa sería la primera parte de la moraleja de esta crónica: depura los logs. Quedaron más de 300mil nodos disponibles (la depuración final la dejé para el verdadero administrador del servidor).

Cuando revisé el log de la aplicación nuevamente, en efecto mantenía el mensaje de error, pero, lo que tardamos en advertir es que el mensaje tenía tres horas de haberse emitido, como si se hubiera congelado. Detuve y reinicie el programa… Nuevamente todo funcionaba. Segunda parte de la moraleja: revisa la fecha y hora de los mensajes en el log y valida contra la fecha y hora actuales.

Así cerramos estra crónica de logs, logs y más logs.

Deja un comentario

Descubre más desde Crónicas de Programación

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo