Introducción
Uno de los problemas más desconcertantes a los que se enfrentan los administradores de sistemas y usuarios avanzados de Linux es el mensaje No space left on device al intentar guardar un archivo o instalar un paquete, a pesar de ejecutar el comando df -h y notar que aún hay gigabytes de espacio libre. Este fallo suele estar relacionado con el agotamiento de los inodos o con archivos eliminados que siguen siendo retenidos por procesos activos.
Causas del Error No Space Left on Device
Existen principalmente dos motivos por los cuales Linux arroja este error aunque parezca haber almacenamiento disponible:
- Agotamiento de inodos (Inodes): Cada archivo y directorio en Linux requiere un inodo para almacenar sus metadatos. Si el sistema operativo genera una cantidad masiva de archivos pequeños (como cachés o sesiones), los inodos se agotan antes que el espacio físico en disco.
- Archivos borrados pero abiertos: Si un proceso en ejecución mantiene abierto un archivo de registro (log) y dicho archivo es eliminado desde la terminal, el espacio en disco no se libera hasta que el servicio correspondiente se reinicia.
Método 1: Verificar y liberar inodos agotados
Para comprobar si el problema es la falta de inodos, debes utilizar el siguiente comando en tu terminal:
df -inode
Si el porcentaje de uso (Use%) de tu partición principal llega al 100%, debes encontrar qué directorio está acaparando los inodos ejecutando:
sudo du -a /ruta/a/investigar | sort -n -r | head -n 20
Una vez localizado el directorio problemático (frecuentemente /var/cache o /tmp), puedes limpiar los archivos temporales o antiguos para recuperar inodos disponibles.
Método 2: Liberar espacio ocupado por procesos fantasma
Si los inodos están correctos pero el error persiste, es probable que existan archivos borrados que siguen consumiendo espacio en el sistema de ficheros. Ejecuta el siguiente comando para identificarlos:
sudo lsof +L1
Este comando listará todos los archivos que han sido desvinculados pero que siguen abiertos por un proceso. Para liberar ese espacio de inmediato sin reiniciar todo el servidor, simplemente reinicia el servicio afectado o mata el proceso asociado con:
sudo kill -9 [PID_DEL_PROCESO]
Método 3: Limpieza automática de logs y caché del sistema
Para prevenir futuros errores de almacenamiento, es recomendable realizar un mantenimiento periódico. Si utilizas una distribución basada en Debian o Ubuntu, puedes limpiar la caché del gestor de paquetes ejecutando:
sudo apt-get clean
Asimismo, puedes vaciar de forma segura los registros antiguos del sistema utilizando la herramienta journalctl para limitar el tamaño de los logs a un máximo de 100 megabytes:
sudo journalctl --vacuum-size=100M