ESC

Start typing to search across invoices, services, domains, tickets, and more...

Search... Ctrl+K
Servidores Linux

Disco lleno en Linux: cómo liberar espacio y buscar archivos

7 pasos 13 min de lectura 1601 vistas 52
Contenido

Sitios web que no cargan, bases de datos que no pueden escribir y el mensaje "No space left on device" suelen indicar que el disco está lleno. Esta guía muestra formas prácticas de comprobar y liberar espacio en disco en Linux: localizar el uso con df -h y du, analizarlo de forma interactiva con ncdu, encontrar archivos grandes con find y limpiar de forma segura los registros del sistema, las cachés de paquetes y los datos de Docker. Los comandos sirven para Debian/Ubuntu y CentOS/Rocky/AlmaLinux; ejecútelos como root.

Paso 1: Compruebe el uso del espacio en disco con df -h

df -hT muestra el tamaño, el espacio usado y el porcentaje de uso de cada sistema de archivos, de modo que puede ver qué punto de montaje está cerca del 100 %. Ejecute también df -i para comprobar los inodos: si millones de archivos pequeños (cachés, sesiones) agotan los inodos, obtendrá errores de "disco lleno" aunque quede espacio libre.

df -hT          # space usage per filesystem
df -i           # inode usage (100% also means "No space left on device")

Paso 2: Localice los directorios grandes con du

Mida cada directorio de primer nivel, ordénelos por tamaño y profundice en el más grande. La opción -x mantiene du en el sistema de archivos actual para no contar los discos de datos montados. Los directorios que más espacio suelen ocupar son /var/log, /var/lib/docker, /var/lib/mysql, las carpetas de sitios web y los directorios de copias de seguridad.

# Tamaño de cada directorio de primer nivel en el sistema de archivos raíz, el más grande al final
du -xh --max-depth=1 / 2>/dev/null | sort -h

# Profundice, p. ej. en /var
du -xh --max-depth=1 /var 2>/dev/null | sort -h

Paso 3: Analice el uso del disco de forma interactiva con ncdu

ncdu es un analizador de disco para terminal. Tras el escaneo, puede recorrer los directorios con las flechas del teclado y pulsar d para eliminar, lo que resulta mucho más rápido que ejecutar du repetidamente.

# Debian / Ubuntu
apt install -y ncdu

# CentOS / Rocky / AlmaLinux (ncdu está en EPEL)
dnf install -y epel-release && dnf install -y ncdu

ncdu -x /

Paso 4: Encuentre archivos grandes en Linux

Liste todos los archivos de más de 500 MB. Así descubrirá rápidamente archivos de copia de seguridad olvidados, volcados de bases de datos o registros descontrolados. Confirme qué es cada archivo antes de eliminarlo; si no está seguro, muévalo primero a otro disco.

# Archivos de más de 500 MB en el sistema de archivos raíz
find / -xdev -type f -size +500M -exec ls -lh {} \; 2>/dev/null | sort -k5 -h

Paso 5: Limpie los registros del sistema y las cachés de paquetes

El journal de systemd puede crecer hasta varios gigabytes con el tiempo; recórtelo por tamaño o antigüedad con journalctl. No borre con rm un registro grande en el que un programa sigue escribiendo; vacíelo con truncate, ya que de lo contrario el espacio no se libera. Las cachés de paquetes se pueden borrar sin riesgo.

journalctl --disk-usage
journalctl --vacuum-size=200M
journalctl --vacuum-time=7d

# Vaciar un archivo de registro grande en el que un programa en ejecución sigue escribiendo (no use rm)
truncate -s 0 /var/log/nginx/access.log

# Cachés del gestor de paquetes
apt clean                 # Debian / Ubuntu
dnf clean all             # CentOS / Rocky / AlmaLinux

Para evitar que el journal vuelva a crecer, establezca un límite de tamaño:

# Limitar de forma permanente el tamaño del journal
mkdir -p /etc/systemd/journald.conf.d
printf '[Journal]\nSystemMaxUse=500M\n' > /etc/systemd/journald.conf.d/size.conf
systemctl restart systemd-journald

Paso 6: Libere espacio en disco de Docker

En los hosts con Docker, los contenedores detenidos, las imágenes sin usar y la caché de compilación se acumulan en /var/lib/docker. Compruebe el uso con docker system df y elimine lo que ya no necesite.

docker system df
docker container prune -f
docker image prune -a -f
docker builder prune -f
# Elimina todo lo que no se usa, incluidos los volúmenes: ¡compruébelo antes!
docker system prune -a --volumes
La limpieza con --volumes elimina todos los volúmenes que no use ningún contenedor, lo que puede incluir datos de bases de datos. Asegúrese de que no los necesita antes de ejecutarla.

Paso 7: Libere el espacio retenido por archivos eliminados

Si eliminó un archivo grande pero df no muestra cambios, algún proceso todavía lo tiene abierto. Encuéntrelo con lsof y reinicie ese servicio para liberar el espacio.

# Archivos eliminados que un proceso todavía mantiene abiertos
lsof +L1 2>/dev/null | head -n 20
# Reinicie el proceso que los mantiene, p. ej.
systemctl restart nginx

Preguntas frecuentes

¿Por qué du y df muestran un uso diferente?

Normalmente por uno de dos motivos: archivos eliminados que un proceso todavía mantiene abiertos (consulte el paso 7), o archivos ocultos bajo un punto de montaje porque se montó un disco encima. En el primer caso, reinicie el proceso; en el segundo, desmonte el disco e inspeccione el directorio.

¿Qué registros de /var/log se pueden eliminar sin riesgo?

Por lo general, se pueden eliminar los registros rotados con fecha o con la extensión .gz. Vacíe los registros activos con truncate. La solución a largo plazo es configurar logrotate para rotar y comprimir los registros periódicamente.

¿Sigue sin tener suficiente espacio después de limpiar?

Traslade los sitios web, las bases de datos o las copias de seguridad a un disco de datos, o amplíe el disco y extienda la partición siguiendo nuestra guía de LVM/growpart.

¿Sigue con problemas después de seguir estos pasos? Abra un ticket de soporte y el equipo técnico 24/7 de IMIDC le ayudará. Incluya la IP del servidor, el sistema operativo, los comandos que ejecutó y una captura de pantalla del error para que podamos localizar el problema más rápido.

¿Fue útil la respuesta?

Tutoriales relacionados