Solución al error "fwrite(): write of 2082 bytes failed with errno=28 No space left on device"

Author
Por Darío Rivera
Publicado el en PHP

Trabajar con servidores en la nube nos brinda flexibilidad y escalabilidad, pero también nos enfrenta a desafíos técnicos inesperados. Uno de los problemas más comunes que podemos encontrar es el error fwrite(): write of 2082 bytes failed with errno=28 No space left on device. Este mensaje indica que el sistema ha agotado su espacio de almacenamiento, lo que puede interrumpir el funcionamiento de aplicaciones críticas. En este artículo, compartiré cómo identificar y solucionar este problema en tus servidores en la nube.

Descripción del problema

El problema se presentó de manera sorpresiva cuando una de mis aplicaciones PHP comenzó a fallar, generando el siguiente error:

fwrite(): write of 2082 bytes failed with errno=28 No space left on device.

Este error claramente indica que no queda espacio disponible en el dispositivo de almacenamiento del servidor. Sin embargo, comprender qué lo causó y cómo resolverlo puede ser un desafío, especialmente si todo estaba funcionando sin problemas hasta ese momento.

Solución

El error en cuestión nos da una idea acerca de que está pasando detrás de escena. Por "No space left on device" podemos entender que el disco se ha quedado sin espacio y no se puede escribir en él. La cuestión aquí es identificar en donde está la sobreescritura. Para esto, vamos a entrar en nuestro servidor remote y vamos a ejecutar el siguiente comando:

sudo du -sh /* 2>/dev/null | sort -rh | head -20

Vamos a obtener una salida muy similar a la siguiente:

5.7G	/var
1.3G	/usr
300M	/home
62M	/boot
12M	/run
7.4M	/etc

Desde este punto, lo que sigue es un proceso iterativo para descubrir cuales archivos son los más grandes en el sistema. Por lo general resultan ser logs. Así que nuestro próximo comando, siguiente el anterior output, sería el siguiente:

sudo du -sh /var/* 2>/dev/null | sort -rh | head -20

Nota que lo único que ha cambiado es el path hacia el cual estamos encaminando el comando. La salida que puedes obtener te puede dar otra vez de manera clara una idea de en donde están los archivos grandes.

5.1G	/var/www
441M	/var/lib
119M	/var/cache
13M	/var/log
1.4M	/var/backups

Una vez identificados los archivos puedes proceder de diferentes maneras de acuerdo a tus necesidades. Por lo general los archivos más comunes tienden a ser logs del sistema. En este caso específico si no deseas conservarlos deberás eliminarlos.

sudo rm /var/www/mysite/storage/logs/access.log

Si los archivos que encuetras pertenecen a tu aplicación o son generados por ella, por ejemplo videos u otro tipo de archivos pesados deberás proceder de otra manera. Hasta la próxima!.


Acerca de Darío Rivera

Author

Application Architect at Elentra Corp . Quality developer and passionate learner with 10+ years of experience in web technologies. Creator of EasyHttp , an standard way to consume HTTP Clients.

LinkedIn Twitter Instagram

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.