jueves, 15 de junio de 2017

Limpiar Inodos linux al 100%

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:

df -i

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

No hay comentarios:

Publicar un comentario