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 la terminal arroja un error de disco lleno (No space left on device), pero al ejecutar el comando df -h descubrimos que todavía tenemos gigabytes de almacenamiento disponibles. Este frustrante escenario se debe al agotamiento de los inodos (inodes), la estructura de datos que almacena la metainformación de cada archivo y directorio en los sistemas de ficheros ext4 o similares.
¿Cuáles son las causas de que se agoten los inodos?
El sistema operativo asigna una cantidad fija de inodos al formatear una partición. Cada archivo, enlace simbólico o directorio consume exactamente un inodo. Las causas principales de su agotamiento son:
- Acumulación masiva de archivos pequeños, como cachés de aplicaciones, sesiones web o miniaturas.
- Procesos automatizados (cron jobs) que generan miles de logs diminutos diariamente.
- Directorios de correo electrónico (Maildir) con miles de mensajes individuales antiguos.
Método 1: Identificar qué directorio está consumiendo todos los inodos
Antes de borrar información al azar, debemos localizar el origen exacto del problema ejecutando una serie de comandos en la terminal con privilegios de superusuario.
- Abre tu terminal SSH o local en Linux.
- Ejecuta el siguiente comando para ver el uso de inodos por partición:
df -i - Identifica la partición afectada (por ejemplo,
/dev/sda1al 100% de uso de inodes). - Utiliza un bucle en la terminal para analizar qué subdirectorios acumulan más elementos ejecutando:
sudo du --inodes -s /* | sort -hr
Método 2: Limpieza masiva de archivos temporales y cachés
Una vez localizado el directorio problemático (frecuentemente /var/log, /var/spool o directorios tmp de aplicaciones), procede a eliminar el exceso de archivos pequeños.
- Navega hasta el directorio que descubriste saturado utilizando el comando
cd. - Si se trata de archivos de caché antiguos o logs, puedes borrarlos de forma segura. Por ejemplo, para eliminar archivos con más de 30 días de antigüedad, ejecuta:
sudo find . -name "*.log" -type f -mtime +30 -delete - Si necesitas vaciar un directorio específico que contiene miles de archivos temporales de sesión, utiliza:
sudo find /var/lib/php/sessions/ -type f -delete
Método 3: Prevención futura y optimización del sistema
Para evitar que este error vuelva a interrumpir tus servicios en el futuro, es recomendable implementar políticas de mantenimiento automatizado.
- Configura herramientas de rotación de registros como Logrotate para comprimir y depurar logs automáticamente.
- Evita almacenar miles de archivos minúsculos en una sola ruta; en su lugar, distribúyelos en subdirectorios o utiliza bases de datos para metadatos si tu arquitectura de desarrollo lo permite.