Buenas, acabo de tener un problema con un servidor en el cual el espacio en disco decía que estaba casi vacío, pero los inodos me indicaban que la partición estaba llena, impidiendo el arranque de servicios, que en mi caso particular era postgresql. Revisando me di cuanta que los problemas con inodos, generalmente son debido a problemas con archivos 0 bytes, lo cuales no tienen peso pero si ocupan espacio de otra forma.
Básicamente un inodo o i-nodo se utiliza para cada archivo en el sistema de archivos. Así quedarse sin inodos generalmente significa que se tiene una gran cantidad de archivos pequeños por ahí. Teniendo esto claro que la pregunta a hacerse es ¿que directorio tiene un gran número de archivos?
En este caso, el sistema de archivos donde tenía el problema era /var/ y para solucionar este problema usé los siguientes comandos:
Primero para evidenciar que los inodos del sistema se archivos se han llenado en la partición ejecutamos:
Lo cual nos da la siguiente información:
Filesystem Inodes IUsed IFree IUse% Mounted on rootfs 655360 60902 594458 10% / udev 59464 250 59214 1% /dev tmpfs 63478 187 63291 1% /run /dev/xvda 655360 60902 594458 10% / tmpfs 63478 3 63475 1% /run/lock tmpfs 63478 2 63476 1% /run/shm /dev/xvdc 655360 251084 404276 100% /var
Viendo esto, y sin saber donde diantres se están siendo usados los inodos usamos el siguiente comando para buscar volcar una lista de todos los directorios del sistema de archivos con el prefijo del número de archivos (y subdirectorios) en ese directorio. Así, el directorio con el mayor número de archivos aparecerá al final:
find /var -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n
la salida es la siguiente:
318 /var/lib/postgresql/9.1/main/base/27925 400 /var/chroot/usr/bin 1830 /var/lib/dpkg/info 202205 /var/chroot/var/lib/php5
cuando hagan un ls (sin comandos adicionales so pena de que tarden 10 veces mas para mostrar la información) se darán cuenta de que muchos archivos están con 0 bytes, convirtiéndose de esta manera en archivos parásitos.
Teniendo esto en cuenta buscamos de borrarlos de la siguiente forma
find /var/chroot/var/lib/php5/ -type f -size 0 -print0 | xargs -I{} -0 rm {}
va a tardar, dependiendo de cuantos archivos dispongan, que para llenar los inodos deben ser bastantes.Cuando terminen.
Vuelvan a usar el comando df -i y verán la mágia.
Filesystem Inodes IUsed IFree IUse% Mounted on rootfs 655360 60902 594458 10% / udev 59464 250 59214 1% /dev tmpfs 63478 187 63291 1% /run /dev/xvda 655360 60902 594458 10% / tmpfs 63478 3 63475 1% /run/lock tmpfs 63478 2 63476 1% /run/shm /dev/xvdc 655360 144847 510513 23% /var
Ahora pude arrancar el servicio y pude respirar tranquilo.
Con este método fácil y practico espero puedan lograr solucionar cualquier problemas de este tipo.
Saludos y gracias por visitar el blog.
Actualización 07/03/2019
tenia un problema con un servidor xenserver y este problema me ayudó, sin embargo al borrar los archivos en 0 todavía quedaban un montón con más de 0 bites y ocupaban el 30% de los inodos. Para limpiarlo ejecuté el siguiente comando:
find /var/log -type f -mtime +2 -print0 | xargs -I{} -0 rm {}
Espero les sirva