-->

No queda espacio en disco y nadie sabe por qué

Objetivo:

Diagnosticar y resolver una incidencia crítica de saturación de almacenamiento en un sistema Linux donde el espacio en disco se ha agotado por completo, aprendiendo a localizar de forma metódica ficheros ocultos de gran tamaño, directorios temporales descontrolados, registros inflados y copias de seguridad antiguas mediante el uso avanzado de comandos de análisis.

Escenario:

  • Herramientas: Terminal Linux, comandos df, du, find, ncdu y gestión de inodos con df -i.
  • Conceptos analizados: Ocupación de bloques en sistemas de archivos ext4/XFS, ficheros abiertos retenidos por procesos zombie o detenidos, volúmenes de logs acumulados y directorios temporales (/tmp, /var/tmp, /var/log).
  • Proceso clave: Identificación del punto de montaje saturado, búsqueda estructurada de los directorios y ficheros que más espacio consumen, detección de ficheros fantasmas retenidos por demonios activos y purga controlada de elementos obsoletos.

Escenario Real: Servidor con caída de servicios por espacio al 100%

Un servidor web de producción ha dejado de registrar accesos y las bases de datos han sufrido un bloqueo repentino. Al intentar acceder por SSH, el sistema emite errores continuos indicando falta de espacio de almacenamiento. Como administrador de sistemas, debes realizar una auditoría de urgencia para localizar qué elementos están consumiendo el 100% de la capacidad y liberar espacio de forma segura sin comprometer la estabilidad del sistema.

Por defecto, la acumulación silenciosa de ficheros temporales, rotaciones de logs fallidas o descargas huérfanas puede colapsar el almacenamiento sin que las alertas tradicionales lo detecten a tiempo. Dominar las herramientas de inspección de espacio es un recurso vital para la continuidad operativa.

NOTA: Para realizar esta práctica de limpieza con total seguridad, utilizaremos comandos de consulta analítica y exclusión de ficheros protegidos del kernel, evitando eliminar dependencias esenciales del sistema operativo.

Instrucciones:

Fase 1: Identificación del volumen o partición saturada:

  • Comprobar de forma global el estado del espacio ocupado y disponible en todos los puntos de montaje del sistema: df -h
  • Verificar si el problema se debe al agotamiento estricto de bloques de datos o a la saturación total de inodos (ficheros máximos permitidos): df -i

Fase 2: Localización de los mayores consumidores de espacio con du y find:

  • Analizar el consumo detallado de los subdirectorios principales dentro de la partición raíz ordenándolos de mayor a menor tamaño: sudo du -h --max-depth=1 / | sort -hr
  • Buscar de forma específica en todo el sistema aquellos ficheros cuyo tamaño supere un umbral crítico (por ejemplo, mayores de 100 MB): sudo find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null

Fase 3: Auditoría de directorios críticos (Logs, Temporales y Backups):

  • Inspeccionar el directorio de registros del sistema para detectar ficheros de log sobredimensionados: sudo du -sh /var/log/* | sort -hr
  • Revisar el contenido de los directorios temporales en busca de ficheros residuales acumulados durante semanas: sudo du -sh /tmp/* /var/tmp/* 2>/dev/null
  • Localizar copias de seguridad antiguas, ficheros comprimidos (.tar.gz, .zip) o imágenes ISO olvidadas en directorios de usuarios o rutas raíz.

Fase 4: Detección de ficheros fantasmas retenidos por procesos activos:

  • Identificar aquellos ficheros que han sido borrados desde la terminal pero cuyos procesos asociados los siguen manteniendo abiertos en memoria (consumiendo espacio oculto): sudo lsof +L1
  • Reiniciar o recargar los servicios asociados a dichos procesos liberadores para recuperar de inmediato el espacio fantasma ocupado en el disco.

Verificación:

  • Comprobar mediante el comando df -h que el punto de montaje afectado ha recuperado un porcentaje de espacio libre seguro (por debajo del 85-90% de ocupación).
  • Verificar que los servicios críticos del sistema (como bases de datos o servidores web) han reanudado su actividad normal tras la liberación de almacenamiento.

Posibles errores y resolución de problemas:

Si tras eliminar ficheros voluminosos de registros o copias de seguridad observas que el comando df -h sigue indicando que el espacio ocupado está al 100% y no se ha liberado ningún bloque en el disco, se debe al fenómeno de retención por procesos en ejecución.

  • Solución: Un proceso sigue escribiendo o manteniendo abierto el descriptor del fichero eliminado. Utiliza sudo lsof +L1 para localizar el PID responsable y reinicia el servicio correspondiente para forzar la liberación definitiva del espacio.

Alternativa directa: Inspección visual interactiva con ncdu

Si necesitas navegar de forma rápida, intuitiva y visual por la jerarquía de directorios para detectar qué carpetas están devorando el espacio del disco sin recurrir a comandos complejos de consola, puedes instalar y ejecutar la utilidad de análisis interactivo:

sudo apt install ncdu -y && sudo ncdu /

Preguntas de reflexión:

  1. ¿Por qué un sistema Linux puede reportar que el disco está totalmente lleno (100% de ocupación) a pesar de haber borrado ficheros pesados recientemente?
  2. ¿Qué diferencia técnica existe entre auditar la ocupación del almacenamiento mediante bloques de datos (df -h) frente a la comprobación de inodos disponibles (df -i)?
  3. ¿Qué riesgos implica para la estabilidad del sistema operativo eliminar de forma indiscriminada ficheros temporales activos en el directorio /tmp sin verificar su uso actual?
  4. ¿Por qué se recomienda configurar políticas automatizadas de rotación de registros (como logrotate) en los servidores de producción?
Haz clic aquí para ver las soluciones y explicaciones

1. ¿Por qué un sistema Linux puede reportar que el disco está totalmente lleno (100% de ocupación) a pesar de haber borrado ficheros pesados recientemente?

Ocurre porque el comando de borrado (rm) elimina la ruta o el enlace del fichero, pero si un proceso en ejecución mantiene abierto el descriptor de ese mismo fichero en memoria, el sistema de archivos no libera físicamente los bloques de disco hasta que el proceso se cierra por completo o se reinicia.


2. ¿Qué diferencia técnica existe entre auditar la ocupación del almacenamiento mediante bloques de datos (df -h) frente a la comprobación de inodos disponibles (df -i)?

El espacio en bloques mide la capacidad total en megabytes o gigabytes ocupada por el contenido de los ficheros. Por el contrario, los inodos son las estructuras de metadatos que identifican a cada fichero de manera unívoca. Un sistema puede tener espacio físico libre en bloques, pero si se generan millones de ficheros diminutos, se agotan los inodos y el sistema deja de permitir la creación de nuevos archivos.


3. ¿Qué riesgos implica para la estabilidad del sistema operativo eliminar de forma indiscriminada ficheros temporales activos en el directorio /tmp sin verificar su uso actual?

Muchos demonios en ejecución, bases de datos o entornos de compilación utilizan ficheros temporales y sockets de comunicación activos (Unix sockets) albergados en /tmp o /var/tmp. Borrarlos de forma agresiva puede congelar procesos en curso, corromper sesiones de usuario o provocar fallos inesperados en las aplicaciones.


4. ¿Por qué se recomienda configurar políticas automatizadas de rotación de registros (como logrotate) en los servidores de producción?

Porque los servicios escriben mensajes de depuración e información de forma continua en los ficheros de log. Sin una herramienta automatizada que comprima, archive y elimine periódicamente los registros antiguos, los ficheros crecerán de manera infinita hasta agotar por completo el espacio libre del disco duro del servidor.