Objetivo:
Aprender a diagnosticar y resolver problemas de saturación de almacenamiento en sistemas Linux, utilizando comandos avanzados de análisis de espacio y localizando archivos ocultos o de gran tamaño que comprometen la estabilidad del sistema.
Escenario:
- Herramientas: Terminal Linux,
df,du,ncdu,find. - Conceptos analizados: Inodos vs. Espacio en bloques, puntos de montaje, archivos ocultos, crecimiento de logs y desbordamiento de directorios temporales.
- Proceso clave: Identificación de particiones al límite, análisis recursivo de directorios, detección de espacio ocupado por procesos activos y limpieza segura.
Escenario Real: El servidor se ha quedado sin espacio
Los usuarios del sistema de producción reportan que no pueden guardar archivos, los servicios críticos están fallando (los demonios no pueden escribir sus archivos de log) y el acceso remoto por SSH muestra errores extraños al intentar iniciar sesión. Como administrador de sistemas, tu misión es conectar de emergencia, averiguar exactamente qué está saturando el almacenamiento y liberar espacio de forma segura sin interrumpir los servicios esenciales.
NOTA: Para simular esta situación de manera segura sin saturar tu equipo real, volveremos a emplear un disco virtual en formato imagen (
.img) montado mediante un bucle loop. Esto nos permitirá experimentar con la administración de espacio y los puntos de montaje de forma totalmente aislada.
Instrucciones:
Fase 1: Preparación del entorno de simulación:
- Crear un archivo de 40 MB que actuará como nuestro disco virtual limitado:
dd if=/dev/zero of=disco_servidor.img bs=1M count=40 - Dar formato
ext4al disco virtual:mkfs.ext4 disco_servidor.img - Crear un punto de montaje dedicado y montar la partición:
sudo mkdir /mnt/servidor_datossudo mount -o loop disco_servidor.img /mnt/servidor_datos
- Otorgar permisos de escritura para la simulación:
sudo chmod 777 /mnt/servidor_datos
Fase 2: Diagnóstico inicial con df y detección del problema:
- Comprobar el estado general del almacenamiento y el porcentaje de uso de las particiones montadas mediante el comando:
df -h - Observa la línea correspondiente a
/mnt/servidor_datos. Verás que el espacio total es de aproximadamente 37 MB libres y un uso inicial del 1% o 3%. - Si necesitas comprobar específicamente el consumo de inodos (cuando hay espacio en disco pero el sistema dice que no se pueden crear archivos), se utiliza:
df -i
Fase 3: Generación del caos (Simulación de acumulación descontrolada):
- Acceder al punto de montaje:
cd /mnt/servidor_datos - Simular la acumulación de logs antiguos o voluminosos creando un archivo pesado de relleno:
dd if=/dev/zero of=app_error.log bs=1M count=25 - Simular archivos ocultos olvidados (un error clásico de desarrolladores):
dd if=/dev/zero of=.cache_oculto bs=1M count=10 - Volver a ejecutar
df -hy comprobar que la partición está casi al límite de su capacidad (alrededor del 90% o más).
.) son ocultos en Linux. Muchos administradores novatos los pasan por alto al listar directorios de manera convencional con un simple ls, lo que dificulta la resolución del problema.Fase 4: Localización milimétrica con du y herramientas interactivas:
- Para descubrir qué directorios o archivos están consumiendo los recursos dentro de nuestra ruta actual, utilizamos el comando
du(Disk Usage) ordenado por tamaño:du -sh * | sort -hr
- Si queremos listar absolutamente todo incluyendo archivos ocultos y ordenado de mayor a menor profundidad:
du -ah . | sort -hr | head -n 10
- Instalar y probar la herramienta interactiva definitiva para administradores de sistemas (
ncdu):- Instalación:
sudo apt update && sudo apt install ncdu -y - Ejecución en el directorio:
ncdu /mnt/servidor_datos - Navega por la interfaz visual usando las flechas del teclado, identifica los archivos pesados y pulsa
dsi quisieras eliminarlos directamente desde la interfaz (ten cuidado en entornos reales). Pulsaqpara salir.
- Instalación:
Fase 5: Búsqueda avanzada de archivos por criterios con find:
- A veces el problema no es cuánto ocupa un archivo, sino buscar archivos que superen un determinado tamaño (por ejemplo, mayores de 5 MB):
sudo find /mnt/servidor_datos -type f -size +5M -exec ls -lh {} \; - Este comando es extremadamente potente en servidores grandes donde el comando
dutardaría demasiado tiempo en recorrer todo el árbol de directorios.
Verificación y limpieza:
- Eliminar de forma segura los archivos de prueba que estaban saturando el disco:
rm app_error.log .cache_oculto - Comprobar de nuevo con
df -hque el espacio en la partición se ha liberado correctamente y ha vuelto a niveles seguros. - Desmontar finalmente el disco virtual y limpiar el entorno:
cd ~
sudo umount /mnt/servidor_datos
rm disco_servidor.img
Posibles errores y resolución de problemas:
Si ejecutas df -h y ves que una partición está al 100%, pero al sumar lo que ocupa cada carpeta con du el resultado no coincide y parece que falta espacio, el problema suele deberse a que un proceso en ejecución sigue teniendo abierto un archivo que fue borrado. Linux no libera el espacio en bloques en el disco duro hasta que el proceso que mantiene el descriptor de archivo abierto finaliza o se reinicia.
Solución: Identifica los archivos borrados pero aún abiertos mediante el comando
sudo lsof +L1o reinicia el servicio correspondiente.
Preguntas de reflexión:
- ¿Qué diferencia fundamental existe entre el comando
dfy el comandodua la hora de reportar el estado del almacenamiento en Linux? - ¿Por qué un sistema puede reportar "No queda espacio en el dispositivo" (No space left on device) aunque el comando
df -hindique que hay gigabytes libres en bloques? - ¿Qué implicaciones tiene borrar un archivo gigantesco de log mediante
rmmientras un demonio o servicio del sistema lo sigue escribiendo de forma activa? - ¿Por qué herramientas interactivas como
ncduson preferibles a los listados planos de texto en servidores con estructuras de directorios muy profundas?
Haz clic aquí para ver las soluciones y explicaciones
1. ¿Qué diferencia fundamental existe entre el comando df y el comando du a la hora de reportar el estado del almacenamiento en Linux?
df (Disk Free) consulta directamente al sistema de archivos el estado global del espacio total, usado y disponible a nivel de superbloque/partición. Por el contrario, du (Disk Usage) recorre de manera recursiva el árbol de directorios sumando el tamaño individual de los archivos que encuentra en su camino.
2. ¿Por qué un sistema puede reportar "No queda espacio en el dispositivo" (No space left on device) aunque el comando df -h indique que hay gigabytes libres en bloques?
Esto ocurre cuando se agotan los inodos de la partición (comprobable con df -i). Cada archivo o directorio requiere un inodo para almacenar su metainformación. Si el sistema crea millones de archivos diminutos, se consumen todos los inodos disponibles aunque los bloques de datos físicos sigan vacíos.
3. ¿Qué implicaciones tiene borrar un archivo gigantesco de log mediante rm mientras un demonio o servicio del sistema lo sigue escribiendo de forma activa?
Aunque el archivo desaparece visualmente del directorio y de la lista de ls, el espacio en disco no se libera físicamente. El proceso en ejecución mantiene abierto el descriptor del archivo. La solución correcta en esos casos no es borrarlo con rm, sino vaciar su contenido con un operador de truncado (ej. > archivo.log) para que el servicio siga escribiendo desde cero liberando los bloques al instante.
4. ¿Por qué herramientas interactivas como ncdu son preferibles a los listados planos de texto en servidores con estructuras de directorios muy profundas?
Porque permiten navegar visualmente de forma jerárquica, ordenando de mayor a menor consumo de manera automática y dinámica. Esto ahorra mucho tiempo al administrador, permitiéndole identificar con un solo golpe de vista qué subcarpeta específica está acumulando la basura digital sin tener que combinar manualmente comandos complejos de du y sort.