Error: No space left, pero el disco no está lleno

Existe un error un tanto desconcertante que es bastante raro pero que cuando ocurre hace que muchas cosas puedan salir mal rápidamente y no da muchos indicios de qué es lo que falla. Este error te puede causar mensajes que te indican que servicio no pudieron arrancar o que se hayan caído de forma extraña y los log y errores te mostrarán mensajes de «No space left on device» pero al revisar los puntos de montaje verás que tienen espacio libre, es decir no están al 100% como se esperaría. Pero ¿qué causar un Error: No space left, pero el disco no está lleno? aquí te dijo.

Se acabó el espacio pero el disco no esta lleno, espera ¿Qué?

Durante la operación de muchos años administrando servidores Linux me ha ocurrido en varias ocaciones un error bastante peculiar en el que aparentemente no hay espacio disponible en el sistema, pero al revisar el espacio de los puntos de montaje hay espacio libe en los dispositivos.

No space left on device error de espacio en dispositivos inodes file system ext4

Si se ejecuta un comando df para ver el espacio de cada punto de montaje se podrá observar que nigún punto de montaje reporta un 100% de espacio ocupado, sin embargo los logs de algunas aplicaciones reportan que no hay espacio disponible para escribir en el dispositivo.

El problema no es el espacio pero el espacio en disco al menos con el sistema de archivos Ext4 también esta relacionado otro elementos: los inodes.

Los inodes son estructuras de datos en un sistema de archivos en Linux y otros sistemas operativos similares a Unix que almacenan toda la información sobre un archivo excepto su nombre y sus datos reales. Asi que cuando los inodes se agotan no es posible escribir en los dipositivos por no hay como guardar esa información «adicional» a un archivo.

Una forma de validar si este es el cado es ejecutando el comando df con el parámetro -i para que muestre el estado de los inodes para los puntos de montaje.

df -i

Esta situación ocuerre generalmente por que una gran cantidad de archivos ha sido creada en alguna parte de sistema de archivos y esto ha agotado los inodes disponibles en el sistema de archivos. Una forma de encontrar este directorio o ruta que tiene esa gran cantidad de archivos la puedes encontrar con este comando:

{ sudo find / -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n; } 2>/dev/null

En este ejemplo de salida de este comando se puede observar los directrios que tiene el mayor número de archivos, en este caso el último tiene casi 4 millones de archivos.

968 /usr/share/man/man8
1124 /usr/share/man/man3p
1320 /usr/lib64
1802 /usr/share/man/man1
1877 /usr/bin
3181 /usr/share/foomatic/db/source/printer
3822 /usr/share/man/man3
3790759 /var/spool/postfix/maildrop

Una vez que localices el directorio afectado puede elimiar los archivo que sea posible y liberar inodes para que se pueda escribir de nuevo en el sistema de archivos.

Un punto importante a considear es que el comando rm * por si mismo no va a funcionar por la gran cantidad de archivo en el directorio, así que tendrás que utilizar otro enfoque.

Debes ir al directorio afectado con el comando cd y la ruta que tenta la cantidad mayor de archivos.

cd /var/spool/postfix/maildrop

Luego debes ejecutar el comando find par encontrar todos los archivos presentes en este directorio y pasarlos como parámetro para ejecutar el comando rm -f

find ./ -type f -name "*" -exec rm -f {} \;

Al volver a ejecutar el comando df -i podrás ver que ahora debe haber inodes libre y se podrá escribir de nuevo en el sistema de archivos.

This entry was posted in Blog and tagged , , , . Bookmark the permalink.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


*