Introducción al problema de Inodos llenos en Linux
Uno de los dolores de cabeza más comunes para los administradores de sistemas Linux ocurre cuando las aplicaciones fallan, los servicios se detienen y al ejecutar el comando df -h descubres que todavía hay gigabytes de espacio disponible en el disco duro. El problema no es el espacio en disco en sí, sino el agotamiento de los inodos (inodes).
Un inodo es una estructura de datos en un sistema de archivos tipo Unix que almacena información sobre un archivo o directorio (excepto su nombre y datos reales). Si tu sistema operativo acumula millones de archivos pequeños (como sesiones PHP, cachés o correos electrónicos), puedes agotar la tabla de inodos antes de llenar la capacidad física del disco.
¿Cómo saber si el problema son los Inodos? Causas principales
Para confirmar si el error se debe a los inodos, debes ejecutar un comando específico en tu terminal Linux que te mostrará el uso porcentual de los mismos en lugar del espacio de almacenamiento tradicional.
La causa principal de este fallo es la acumulación masiva de archivos diminutos. Los escenarios más frecuentes incluyen:
- Directorios de sesiones de PHP (
/var/lib/php/sessions) con millones de archivos huérfanos. - Colas de correo electrónico bloqueadas en sistemas como Postfix o Exim (
/var/spool/mail). - Cachés de aplicaciones web o frameworks que no limpian sus archivos temporales automáticamente.
Método 1: Diagnosticar el uso de inodos con df
El primer paso para solucionar el problema es verificar el estado actual de los inodos en todas las particiones montadas de tu servidor.
- Abre tu terminal SSH y conéctate a tu servidor Linux con privilegios de administrador.
- Ejecuta el siguiente comando para listar el uso de inodos:
df -i - Revisa la columna
IUse%. Si alguna partición muestra el 100% de uso, has encontrado la causa exacta del fallo del sistema.
Método 2: Identificar qué directorio está consumiendo todos los inodos
Una vez confirmado que el sistema se ha quedado sin inodos, debes rastrear exactamente qué carpeta o ruta está acaparando los recursos.
- Navega a la raíz del sistema de archivos o a la partición afectada:
cd / - Ejecuta el siguiente bucle en la terminal para contar los archivos y subdirectorios en cada carpeta principal:
sudo du --inodes -s * | sort -g - Analiza la salida de texto. El directorio con el número más alto será el responsable del agotamiento. Por lo general, suele ser
/varo/home. - Repite el proceso ingresando al directorio infractor (por ejemplo,
cd /var/lib/php/sessions) y ejecutasudo ls -U | wc -lpara verificar la cantidad exacta de archivos.
Método 3: Limpiar y liberar inodos de forma segura
Una vez localizado el directorio problemático, debes proceder a la limpieza. Precaución: No utilices el comando clásico rm -rf * si hay millones de archivos, ya que la terminal podría congelarse por el error Argument list too long.
- Utiliza la herramienta
findcombinada condeletepara eliminar archivos antiguos de forma controlada. Por ejemplo, para borrar sesiones de PHP con más de 2 días de antigüedad:sudo find /var/lib/php/sessions/ -type f -mmin +2880 -delete - Si necesitas vaciar completamente un directorio lleno de archivos pequeños sin bloquear el sistema, utiliza el comando
rsynccreando primero una carpeta temporal vacía:mkdir /tmp/vacio && rsync -a --delete /tmp/vacio/ /var/lib/php/sessions/ - Finalmente, vuelve a comprobar el estado de los inodos ejecutando de nuevo:
df -i