¿Qué es un Inodo y por qué se llena en Linux?
Uno de los problemas más frustrantes para los administradores de sistemas Linux ocurre cuando comandos como df -h muestran que aún hay espacio disponible en el disco duro, pero el sistema operativo arroja errores como 'No space left on device' (No hay espacio en el dispositivo) al intentar crear un archivo nuevo o guardar cambios. Este fallo no se debe a la falta de megabytes o gigabytes, sino al agotamiento de los inodos.
Un inodo (índice de nodo) es una estructura de datos en los sistemas de archivos tipo Unix (como ext4, ext3 o ext2) que almacena la información metadatos de un archivo, excluyendo su nombre y su contenido real. Cada archivo, directorio y enlace simbólico consume exactamente un inodo. Si una aplicación genera masivamente archivos pequeños (por ejemplo, sesiones de PHP, cachés web o registros de correo electrónico), puedes agotar la cantidad total de inodos antes de consumir la capacidad total de almacenamiento.
Cómo comprobar el uso de inodos en la terminal
Antes de aplicar cualquier solución, debes confirmar si el problema realmente está en los inodos y no en el espacio de almacenamiento tradicional. Abre tu terminal de Linux y ejecuta el siguiente comando:
df -i
Este comando desplegará una tabla similar a la de df -h, pero enfocada en los inodos. Analiza las columnas correspondientes:
- Inodos: Número total de inodos disponibles en la partición.
- IUsados: Cantidad de inodos que están siendo utilizados actualmente.
- IFree: Inodos que aún quedan libres.
- IUse%: Porcentaje de uso de inodos. Si marca el 100%, has encontrado la causa del error.
Método 1: Encontrar el directorio con mayor consumo de inodos
Una vez diagnosticado el problema, el siguiente paso es identificar qué carpeta o aplicación está acaparando todos los inodos del sistema. Para ello, puedes utilizar una combinación de los comandos cd, du y sort ejecutados con permisos de superusuario (sudo).
- Accede a la raíz de tu sistema de archivos o al directorio sospechoso (por ejemplo,
/varo/home):cd /var - Ejecuta el siguiente comando para listar los subdirectorios ordenados por cantidad de archivos que contienen:
sudo find . -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n - Revisa la salida en pantalla. El número a la izquierda de cada ruta indica la cantidad de archivos (inodos) contenidos en esa carpeta.
Método 2: Limpiar cachés, sesiones y archivos temporales masivos
Los sospechosos habituales de agotar los inodos suelen ser directorios específicos del sistema donde se acumulan miles de ficheros pequeños. Dependiendo de los servicios que ejecutes en tu servidor Linux, aplica alguna de las siguientes soluciones:
- Sesiones de PHP: Si al revisar detectas millones de archivos en
/var/lib/php/sessions/, puedes purgarlos ejecutando:sudo find /var/lib/php/sessions/ -type f -mmin +1440 -delete(esto eliminará las sesiones con más de 24 horas de antigüedad). - Correos no entregados (Mailqueue): En servidores Postfix o Exim, la cola de correo acumulada en
/var/spool/mqueue/o/var/spool/postfix/incoming/genera muchísimos inodos. Detén el servicio de correo y limpia la cola de forma segura. - Cachés CMS (WordPress, Magento): Revisa las carpetas de caché de tus aplicaciones web donde se guardan miniaturas de imágenes o consultas temporales.
Método 3: Optimización preventiva y buenas prácticas
Para evitar que este molesto error vuelva a interrumpir tus servicios en el futuro, te recomendamos implementar las siguientes medidas de mantenimiento:
- Configura tareas automatizadas en el Cron de Linux para limpiar regularmente directorios temporales (
/tmpy/var/tmp) utilizando herramientas comotmpwatchosystemd-tmpfiles. - Si creas particiones nuevas desde cero en el futuro, ten en cuenta que puedes ajustar la densidad de inodos mediante el comando
mkfs.ext4 -i bytes-per-inode /dev/sdXpara asignar más inodos si prevés almacenar millones de archivos pequeños.