Solución al error "fwrite(): write of 2082 bytes failed with errno=28 No space left on device"
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!.