Disco

No space left on device

Los servicios empiezan a fallar de formas raras: bases de datos que no arrancan, logs que se cortan, sesiones que no se guardan. Todo lo que escribe deja de funcionar a la vez.

Hay tres formas distintas de quedarse sin sitio y solo una la enseña df -h. Si el porcentaje de uso no está al 100% y el error persiste, es una de las otras dos, y ahí es donde se atasca la mayoría de las guías.

Qué comprobar, y en qué orden

En el orden en que lo miramos nosotros. No es un ranking de frecuencia: no publicamos estadísticas que no hemos medido.

  1. 1

    El sistema de ficheros está lleno de verdad.

    Comprobar

    df -h

    Corregir

    sudo du -xh --max-depth=1 / 2>/dev/null | sort -h | tail -15
    # Repetir bajando por el directorio más grande hasta encontrar el culpable.
  2. 2

    Se han agotado los inodos, no el espacio. Pasa con millones de ficheros pequeños —caché de sesiones, colas de correo, miniaturas— y df -h sigue mostrando sitio libre.

    Comprobar

    df -i

    Corregir

    # Localizar el directorio con más entradas:
    sudo find /var -xdev -type f 2>/dev/null | cut -d/ -f1-4 | sort | uniq -c | sort -n | tail -10
  3. 3

    Un fichero borrado sigue abierto por un proceso. El espacio no se libera hasta que ese proceso cierra el descriptor, así que du no lo ve pero df sí.

    Comprobar

    sudo lsof +L1 2>/dev/null | head -20

    Corregir

    # Reiniciar el servicio que lo mantiene abierto libera el espacio al instante.
    sudo systemctl restart el-servicio
  4. 4

    Los logs han crecido sin control porque la rotación no está funcionando.

    Comprobar

    sudo du -sh /var/log/*  | sort -h | tail -10
    journalctl --disk-usage

    Corregir

    sudo journalctl --vacuum-time=7d
    sudo logrotate -f /etc/logrotate.conf
  5. 5

    Imágenes y volúmenes de Docker acumulados. Es la causa más frecuente en máquinas que despliegan a menudo.

    Comprobar

    docker system df

    Corregir

    docker system prune -a --volumes
    # Ojo: borra volúmenes sin usar. Comprueba antes qué hay con docker volume ls.

Un detalle que ahorra tiempo

Los dos comandos juntos, siempre. Ejecutar solo df -h es lo que hace que un disco lleno de inodos parezca un problema sin explicación.

Los comandos de esta página se ejecutan en tu servidor y algunos modifican la configuración: léelos antes de pegarlos. Las rutas y los nombres de servicio varían entre distribuciones. Así se elabora este catálogo.