Un disco lleno es una de las averías más tontas y más frecuentes en un servidor Linux: la base de datos deja de escribir, los scripts fallan con errores poco claros y los servicios dejan de aceptar conexiones. Dos comandos de GNU coreutils que vienen en cualquier distribución bastan para adelantarse. df dice cuánto espacio queda en cada sistema de archivos montado y du dice qué directorios lo están consumiendo.
Las claves de df y du para controlar el disco en Linux en 20 segundos
df -hmuestra el espacio usado y libre de cada sistema de archivos.df -irevisa los inodos, que también pueden agotarse.du -h -d 1 | sort -rhlocaliza los directorios más grandes.- Si df y du no cuadran, suele haber archivos borrados que siguen abiertos.
El espacio no desaparece de golpe. Los registros crecen, las copias antiguas se acumulan, las imágenes de Docker se quedan sin limpiar y los temporales engordan durante meses. Cuando por fin algo falla, el disco ya está al 100 %. Esta guía parte de un repaso de Sabit sobre df publicado en julio de 2026 y lo completa con las opciones que faltan y los casos en los que los números engañan.
df: cuánto espacio queda en cada sistema de archivos
df (de disk free) lista cada sistema de archivos montado con su tamaño, lo usado, lo disponible, el porcentaje de uso y el punto de montaje. Sin opciones lo expresa en bloques de 1 KiB, difíciles de leer, así que lo habitual es añadir -h:
$ df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 795M 1.9M 794M 1% /run
/dev/sda1 98G 24G 69G 26% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
/dev/sda2 50G 30G 20G 60% /homeLenguaje del código: PHP (php)
Con -h las cifras usan potencias de 1.024 (K, M y G binarios). Si se quieren potencias de 1.000, como las que usan los fabricantes de discos, la opción es -H. Y si se necesita la cifra exacta, byte a byte, para un script o un informe, df -B1 fija el tamaño de bloque en un byte.
Las opciones que más tiempo ahorran en el día a día son estas:
df -h /var/log: muestra solo el sistema de archivos en el que está esa ruta. Sirve para saber en qué disco cae un directorio concreto.df -hT: añade la columna con el tipo de sistema de archivos (ext4, xfs, btrfs, nfs…).df -h -x tmpfs -x devtmpfs: excluye los sistemas de archivos en memoria, que no son disco y ensucian la salida. Con-t ext4se hace lo contrario, mostrar solo un tipo.df -h --total: añade una línea final con la suma. Ojo, suma todo lo que se lista, incluidos los tmpfs, así que para un total real conviene combinarlo con-x tmpfs -x devtmpfs.df --output=target,pcent,avail: elige qué columnas mostrar y en qué orden, muy útil para scripts.
Los inodos también se acaban
En sistemas de archivos como ext4, cada archivo y cada directorio consume un inodo, y el número total se fija al formatear. Un servidor que genera millones de archivos pequeños (cachés, sesiones, colas de correo) puede quedarse sin inodos con gigas libres, y entonces se comporta como si el disco estuviera lleno: no se pueden crear archivos y los mensajes de error, del tipo «No space left on device», despistan.
$ df -ih
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 6.4M 312K 6.1M 5% /
/dev/sda2 3.2M 2.9M 300K 91% /home
En el ejemplo, /home tiene espacio pero está al 91 % de inodos y empezará a rechazar archivos nuevos. Para encontrar el directorio culpable, du --inodes -d 1 /home | sort -rn | head cuenta inodos en lugar de bytes. XFS y Btrfs asignan inodos de forma dinámica, por lo que el problema es mucho menos habitual en ellos.
du: qué está ocupando el espacio
df dice cuánto queda, pero no qué lo ha llenado. Para eso está du (disk usage), que mide lo que ocupa un directorio y todo lo que contiene. Sin límite de profundidad, la salida es interminable, así que lo práctico es quedarse en el primer nivel y ordenar:
# Total de un directorio
du -sh /var
# Subdirectorios de primer nivel, de mayor a menor
du -h -d 1 /var | sort -rh | head -10Lenguaje del código: PHP (php)
Cuando el disco lleno es la raíz, añadir -x evita que du se meta en otros sistemas de archivos montados debajo, como /home, recursos NFS o /proc. Ejecutarlo con sudo permite medir directorios que el usuario normal no puede leer y evita una lluvia de errores de permisos, que también se pueden silenciar con 2>/dev/null.
La secuencia que resuelve la mayoría de los casos tarda menos de un minuto:
- Localizar con
df -hqué punto de montaje está cerca del 100 %. - Ver sus directorios más grandes con
sudo du -xh -d 1 /punto/de/montaje | sort -rh | head -10. - Repetir el comando sobre el directorio más grande hasta dar con los archivos concretos.
Los sospechosos habituales son /var/log, /var/lib/docker, /var/cache y los directorios personales. Algunas herramientas tienen su propio contador, más fiable que recorrer sus carpetas: journalctl --disk-usage para los registros de systemd y docker system df para imágenes, contenedores, volúmenes y caché de compilación de Docker. Quien prefiera algo interactivo tiene ncdu, y en nuestra selección de herramientas modernas para la terminal aparecen duf y dust, versiones más visuales de df y du.
Cuando df y du no cuadran
Es frecuente que df diga que el disco está casi lleno y que du sume bastante menos. Hay tres explicaciones habituales:
- Archivos borrados que siguen abiertos. Si se borra un registro enorme mientras un proceso lo tiene abierto, el nombre desaparece pero el espacio no se libera hasta que el proceso lo cierra.
sudo lsof +L1lista esos archivos con el proceso que los retiene. Reiniciar o recargar ese servicio libera el espacio. Para vaciar un registro activo sin este problema, mejor truncarlo (: > archivo.log) que borrarlo. - Bloques reservados. ext4 reserva por defecto un 5 % del espacio para root, y por eso el uso puede llegar al 100 % para un usuario normal con espacio libre en la columna de tamaño.
sudo tune2fs -l /dev/sda1 | grep -i reservedmuestra la reserva. En discos de datos grandes se puede reducir contune2fs -m 1, pero en la raíz conviene mantener margen. - Datos ocultos bajo un punto de montaje. Si algo se escribió en
/mnt/datosantes de montar el disco ahí, esos archivos ocupan la raíz pero quedan tapados por el montaje yduno los ve.
En Btrfs y ZFS, además, df da cifras aproximadas por las instantáneas, la compresión y los volúmenes compartidos. Ahí es mejor consultar btrfs filesystem usage o zfs list.
Un aviso sencillo antes del 100 %
El espacio se llena poco a poco y luego, de repente, cuando se va el último giga. Revisar df -h una vez por semana ya permite detectar los problemas al 60 % y no al 100 %. En producción lo correcto es tenerlo en la monitorización (Prometheus con node_exporter, Zabbix, Netdata o la que se use), pero mientras tanto basta un script en cron que avise al pasar de un umbral:
#!/bin/sh
# Avisa de los sistemas de archivos que superan el 85 % de espacio
UMBRAL=85
df -P -x tmpfs -x devtmpfs | awk -v u="$UMBRAL" 'NR>1 { p=$5; sub(/%/, "", p); if (p+0 >= u) print $6 " al " $5 }'Lenguaje del código: PHP (php)
La opción -P fuerza el formato POSIX, con cada sistema de archivos en una sola línea, lo que evita que nombres de dispositivo largos rompan el análisis. Programado cada hora en cron, el script solo imprime algo cuando hay un problema, y cron envía esa salida por correo si el servidor lo tiene configurado. Repetir la misma lógica con df -iP cubre también los inodos.
Preguntas frecuentes
¿Qué diferencia hay entre df y du?
df muestra el espacio total, usado y libre de cada sistema de archivos montado. du mide lo que ocupa un directorio concreto y su contenido, por lo que sirve para encontrar qué llena el disco.
¿Cómo veo el espacio exacto en bytes con df?
Con df -B1, que fija el tamaño de bloque en un byte. Para leerlo cómodamente se usa df -h, en potencias de 1.024, o df -H, en potencias de 1.000.
¿Por qué el disco aparece lleno si he borrado archivos?
Porque algún proceso puede seguir teniéndolos abiertos. sudo lsof +L1 los muestra y reiniciar el servicio que los retiene libera el espacio.
¿Qué pasa si se agotan los inodos?
No se pueden crear archivos nuevos aunque quede espacio. Se comprueba con df -i y el directorio responsable se busca con du --inodes.
Fuentes:
- GNU Coreutils: df invocation
- GNU Coreutils: du invocation
- tune2fs(8), página de manual
- Docker: docker system df
- Sabit, guía sobre el comando df (16/07/2026)







