Filesystem Full
Table of contents
- Filesystem Full
- Medidas inmediatas (haz esto primero)
- Identificar qué está lleno
- Encontrar archivos y directorios grandes
- Limpiar culpables comunes
- Recuperación rápida cuando el espacio es crítico
- Limpiar Archivo Grande
- Comprobar la salud del sistema de archivos
- Prevenir recurrencias (tareas de seguimiento)
- Comandos diagnósticos rápidos (one-liners)
- Usando -maxdepth, -mindepth
- Cuándo pedir ayuda / acciones riesgosas
Ocassionalmente, el sistema de archivos puede llenarse, lo que puede causar problemas en el sistema. Aquí hay algunos pasos para solucionar este problema:
- Verificar el uso del disco: Utiliza el comando
df -hpara ver el uso del disco y determinar qué partición está llena. - Identificar archivos grandes: Utiliza el comando
du -sh /*para identificar los directorios que están utilizando más espacio en disco. - Limpiar archivos temporales: Puedes limpiar archivos temporales con el comando
sudo apt-get cleanosudo yum clean all, dependiendo de tu distribución. - Eliminar archivos innecesarios: Revisa los directorios y elimina archivos que ya no necesites, especialmente en
/var/log,/tmp, y otros directorios temporales. - Revisar archivos de registro: Asegúrate de que los archivos de registro no estén creciendo demasiado. Puedes rotarlos o eliminarlos si es necesario.
- Revisar contenedores y volúmenes: Si estás utilizando Docker, revisa los contenedores y volúmenes que pueden estar ocupando espacio. Usa
docker system dfpara ver el uso del disco por parte de Docker.
Aquí tienes los pasos prácticos y concisos para solucionar y recuperar un sistema de archivos lleno en Ubuntu.
Medidas inmediatas (haz esto primero)
Cambia a root o usa sudo para todos los comandos:
-> sudo -i
Detén servicios no esenciales para evitar crecimiento de logs (ajusta según el sistema):
-> sudo systemctl stop apache2 mysql postfix docker
Abre una consola raíz en un tty separado si el interfaz gráfico no responde.
Identificar qué está lleno
Mostrar uso por sistema de archivos:
-> df -hT
Identificar puntos de montaje con uso al 100% o cercano:
-> df -hT | awk '$6 ~ /^\// && $5+0 >= 90 {print}'
Encontrar archivos y directorios grandes
Resumen rápido del uso en la raíz (rápido):
-> sudo du -shx /* 2>/dev/null | sort -h
Profundizar en un directorio (ejemplo /var):
-> sudo du -shx /var/* 2>/dev/null | sort -h
Buscar archivos individuales mayores a 100 MB:
-> sudo find / -xdev -type f -size +100M -exec ls -lh {} \; 2>/dev/null
Mostrar los 20 archivos más grandes:
-> sudo find / -xdev -type f -printf '%s %p\n' 2>/dev/null | sort -nr | head -20 | awk '{printf "%.1f MB\t%s\n",$1/1024/1024,$2}'
Limpiar culpables comunes
Limpiar la caché de apt:
-> sudo apt-get clean
Eliminar kernels antiguos (método seguro):
-> sudo apt-get autoremove --purge
Truncar logs grandes (no eliminar logs en uso; truncar con seguridad):
-> sudo truncate -s 0 /var/log/syslog /var/log/kern.log /var/log/*.log
Rotar y comprimir logs inmediatamente:
-> sudo systemctl restart rsyslog
-> sudo logrotate -f /etc/logrotate.conf
Limpiar logs del journal:
-> sudo journalctl --vacuum-size=200M
o por tiempo:
-> sudo journalctl --vacuum-time=7d
Limpiar Docker (si está instalado):
-> sudo docker system prune -a --volumes
Eliminar paquetes huérfanos y cachés:
-> sudo apt-get autoremove
-> sudo apt-get autoclean
Recuperación rápida cuando el espacio es crítico
Localiza y borra un archivo grande no esencial (alivio temporal). Ejemplo:
-> sudo rm /paso/a/archivo-grande
Si rm falla por archivos borrados pero abiertos, identifícalos y libera su espacio:
-> sudo lsof -nP | grep '(deleted)'
Crea espacio temporal moviendo archivos grandes a otra partición:
-> sudo mv /paso/a/archivo-grande /mnt/temporal/
NO HAGAS ESTO: sudo rm -rf /paso/archivo-grande/*
Esa acción en un sistema activo puede tener resultados inesperados.
Limpiar Archivo Grande
Supongamos que queremos limpiar /tmp.
Primero que nada, no debemos borrar el contenido entero the un sistema que esta corriendo.
No hagas esto:
rm -rf /tmp/*
Para limpiar un archivo grande, sigue los pasos a seguir.
Por ejemplo, operemos en archivos de 7 dias os más de viejos.
Listar archivos viejos:
find /tmp -type f -mtime +7
Borrar archivos 7 días o más de viejos.
sudo find /tmp -type f -mtime +7 -delete
Borrar carpetas 7 días o más de viejos..
sudo find /tmp -mindepth 1 -mtime +7 -exec rm -rf {} +
En sistemas que utilizan systemd, el enfoque preferido suele ser:
systemd-tmpfiles --clean
porque respeta las políticas de limpieza configuradas.
Puedes consultar la póliza aquí:
cat /usr/lib/tmpfiles.d/tmp.conf
o aqui:
cat /etc/tmpfiles.d/*.conf
Un patrón de limpieza manual más seguro en los sistemas de producción es:
sudo find /tmp -xdev -type f -atime +3 -delete
Eso evita cruzar los límites del sistema de archivos y solo elimina archivos antiguos no utilizados.
También nota:
- muchos sistemas Linux limpian automáticamente /tmp
- Reiniciar puede borrar /tmp dependiendo de la distribución/configuración
- /var/tmp está pensado para archivos temporales de mayor duración y normalmente sobrevive al reinicio
Comprobar la salud del sistema de archivos
- Para particiones desmontadas, ejecuta
fsck(desde recuperación o live USB):-> sudo umount /dev/sdXN -> sudo fsck -f /dev/sdXN - Para la raíz, arranca en recuperación o usa medios en vivo para ejecutar
fsck.
Prevenir recurrencias (tareas de seguimiento)
- Añade monitorización y alertas:
- Scripts cron sencillos que envíen df -h por correo o usa monitorización (Prometheus + node_exporter + Grafana).
- Añade herramientas de análisis de uso:
- Instala
ncdupara análisis interactivo:sudo apt-get install ncdu - Ejecuta:
sudo ncdu /
- Instala
- Configura rotación de logs y limita el tamaño del journal:
- Edita
/etc/systemd/journald.conf: SystemMaxUse=200M - Asegura políticas adecuadas en
/etc/logrotate.d.
- Edita
- Mueve directorios grandes y volátiles a particiones más grandes (ej.: mover
/var/lib/dockero/homea otro disco) y usa bind-mounts. - Usa cuotas en sistemas multiusuario:
sudo apt-get install quota; configura/etc/fstabyedquota.
Comandos diagnósticos rápidos (one-liners)
-> df -hT
-> sudo du -shx /* | sort -h
-> sudo find / -xdev -type f -size +100M -exec ls -lh {} \; | sort -k5 -h
-> sudo journalctl --disk-usage
-> sudo lsof +L1 (lista archivos borrados pero abiertos)
Usando -maxdepth, -mindepth
Puede que haya un caso en el que tengamos el sistema de archivos raíz /, y quizá /mnt justo debajo, ¿cómo usar maxdepth para mirar solo en la raíz sin recorrer /mnt?
Ejemplos (ejecuta como root o con sudo):
Usar -xdev para evitar descender a otros sistemas de archivos (recomendado):
sudo find / -xdev -type f -size +100M -printf '%s %p\n' 2>/dev/null | sort -nr | head -20
Usar -maxdepth para buscar solo en entradas de primer nivel bajo / (no recorrerá /mnt si /mnt es un punto de montaje separado):
sudo find / -maxdepth 2 -mindepth 2 -type f -size +100M -printf '%s %p\n' 2>/dev/null | sort -nr | head -20
(Con -maxdepth 2 se listan archivos en subdirectorios inmediatos de /; ajusta la profundidad según necesites. Usa -maxdepth 1 para listar solo archivos directamente en /.)
Combina ambos para mayor seguridad (mantente en el mismo FS y limita la profundidad):
sudo find / -xdev -maxdepth 3 -type f -printf '%s %p\n' 2>/dev/null | sort -nr | head -20
Notas:
xdevimpide descender a otros sistemas de archivos montados (por ejemplo /mnt si es un montaje separado).maxdepthcontrola la profundidad de recursión pero no evita por sí solo cruzar puntos de montaje; usa ambos cuando corresponda.
Cuándo pedir ayuda / acciones riesgosas
- No borres archivos desconocidos en
/var,/etc,/bootsin confirmar su propósito. - Pide ayuda si liberar espacio requiere eliminar paquetes del sistema, kernels o archivos profundos.
- Para sistemas con NFS o volúmenes en la nube, coordina con operaciones antes de redimensionar o desmontar.