¿Dónde se fue el espacio en disco? Análisis y limpieza
“El disco está casi lleno” le acaba pasando a todo usuario de Ubuntu. Lo molesto es que df le dice que está lleno, pero no qué lo llenó. Este es el orden reproducible: primero localizar, después limpiar.
Paso 1: qué tan lleno está realmente
df -hMire la columna Use%, sobre todo la de / (el sistema de archivos raíz) y la de /home si es una partición aparte.
El equivalente gráfico es la barra de uso de Discos tras seleccionar una partición, o la barra de capacidad al pie de la barra lateral del gestor de archivos.
Paso 2: encontrar los directorios grandes
du puede calcularlo, pero acaba adivinando nivel a nivel:
# Size of each subdirectory here, largest first
du -h --max-depth=1 . | sort -hr | headEl Analizador de uso de discos (baobab) analiza todo el árbol de una vez y es mucho más fácil de leer:
sudo apt install baobab
baobab /home/$USEREmpieza a analizar la ruta que le indique y, al terminar, muestra esto:

Cómo leerlo:
- La lista de la izquierda está ordenada por tamaño; expanda las filas una a una con su flecha y obtendrá las rutas exactas, lo que es mejor que ir haciendo clic en los anillos
- Treemap Chart de la esquina inferior derecha convierte las proporciones en áreas, así el bloque más grande salta a la vista
- Esta captura es de una VM recién instalada en la que solo
snapocupa el 87 %. No es un fallo: cada aplicación Snap guarda varias revisiones
Analizar ~ tarda segundos; analizar / tarda minutos porque recorre todo el sistema. Empiece por ~ y analice / solo cuando eso no explique el uso.
Paso 3: limpiar los sospechosos habituales
Revisiones antiguas de Snap
Snap conserva las últimas revisiones para que pueda revertir, y cada una es una copia completa del programa. Eso es el 87 % de la captura anterior.
# Keep 2 revisions instead of the default 3
sudo snap set system refresh.retain=2
# Remove every disabled revision
sudo snap list --all | awk '/disabled/{print $1, $3}' | while read name rev; do
sudo snap remove "$name" --revision="$rev"
donePaquetes descargados
# Empty /var/cache/apt/archives
sudo apt clean
# Drop dependencies nothing needs any more
sudo apt autoremove --purgeJournal de systemd
Los registros de journalctl pueden llegar a ocupar varios GB:
# Keep at most 200 MB
sudo journalctl --vacuum-size=200M
# Or keep only 7 days
sudo journalctl --vacuum-time=7dCachés de usuario
Los navegadores, las miniaturas y las cachés de las aplicaciones viven en ~/.cache:
du -h --max-depth=1 ~/.cache | sort -hr | headPiénselo antes de borrar: las cachés del navegador se rellenan de nuevo bajo demanda y por lo general mantienen la sesión iniciada, mientras que ~/.cache/thumbnails siempre se puede eliminar sin riesgos.
Paso 4: cuando limpiar no es suficiente
Limpiar compra tiempo; el espacio real se consigue ampliando o moviendo:
- Máquinas virtuales: amplíe el disco virtual en la configuración de la VM y luego aumente la partición (
growpartmásresize2fs) - Máquinas físicas: añada un disco y formatéelo/móntelo — consulte Discos, montaje y fstab
- Mover datos: traslade directorios grandes como
~/Downloadso la raíz de datos de Docker al disco nuevo y móntelos mediantefstab
Preguntas frecuentes
df dice que está lleno, pero du suma mucho menos
El caso clásico: se eliminó un archivo pero un proceso aún lo mantiene abierto, así que el espacio solo se libera cuando ese proceso termina.
# Find deleted files that are still open
sudo lsof +L1 2>/dev/null | headEl culpable habitual es un escritor de registros que sigue en marcha; reinicie el servicio que lo posee (sudo systemctl restart <service>).
“No space left on device” pero df muestra espacio libre
Probablemente sea un agotamiento de inodos, típico con cantidades enormes de archivos pequeños (spools de correo, capas de contenedores).
# Check inode usage
df -iSi IUse% está al 100 %, ese es su problema; la solución es el mismo tipo de limpieza, solo que lo que hay que borrar son muchos archivos pequeños, no grandes.
Automatizar la limpieza
systemd-tmpfiles ya vacía /tmp y algunas cachés. Para limpiar la caché de apt de forma programada, añada una entrada de cron:
# Clean the apt cache every Sunday at 03:00
0 3 * * 0 root /usr/bin/apt cleanGuárdela como /etc/cron.d/apt-clean.
Relacionado
- Discos, montaje y fstab — particiones, formateo y montaje al arrancar
- Ajuste de rendimiento — htop y el monitor del sistema
- journalctl — tamaño y rotación de los registros