Guía completa para detectar y liberar espacio que queda ocupado en disco por archivos borrados pero aún abiertos por procesos vivos. Ideal para contenedores LXC en Proxmox o servidores Linux.

? 1. Diagnóstico inicial con df y du

Comando para ver uso total del disco:

df -h

Ejemplo:

Filesystem      Size  Used Avail Use% Mounted on
/dev/loop8       14G   13G  809M  94% /

Comando para ver uso por carpetas:

du -h / --max-depth=1 | sort -hr | head -n 10

Ejemplo:

5.0G    /
1.9G    /var
1.3G    /root
1.1G    /usr
671M    /tmp

⚠️ Si du muestra mucho menos que df, es porque hay espacio oculto.

? 2. ¿Por qué no coincide el espacio entre df y du?

Porque hay archivos eliminados pero aún abiertos por procesos vivos. El espacio no se libera hasta que mueren esos procesos.

? 3. Detectar archivos abiertos pero eliminados

sudo lsof | grep deleted

Verás líneas como:

chrome 3785737 root ... /tmp/archivo (deleted)

? 4. ¿Cómo liberar ese espacio?

? Matar el proceso manualmente:

kill -9 3785737

O todos de un tipo:

pkill -9 chrome

♻️ Reiniciar el contenedor si no puedes cerrarlos:

pct reboot <ID_DEL_CONTENEDOR>

?️ 5. Cómo evitarlo en el futuro

  • No borres archivos abiertos. Usa:
    truncate -s 0 archivo.log
  • Asegúrate de cerrar siempre Puppeteer o Chrome:
    const browser = await puppeteer.launch();
    await browser.close();
  • No limpies /tmp mientras procesos estén vivos.

? 6. Script para detectar y matar procesos con archivos eliminados

#!/bin/bash

echo "Procesos con archivos borrados:"
lsof | grep deleted | awk '{print $2}' | sort -u | while read pid; do
    name=$(ps -p $pid -o comm=)
    echo "PID $pid - $name"
done

read -p "¿Quieres matarlos todos? [s/N]: " confirm
if [[ "$confirm" == "s" ]]; then
    lsof | grep deleted | awk '{print $2}' | sort -u | xargs -r kill -9
    echo "Procesos eliminados. El espacio debería liberarse."
else
    echo "No se ha hecho nada."
fi

Guarda como liberar_espacio.sh y ejecuta:

chmod +x liberar_espacio.sh
sudo ./liberar_espacio.sh

? 7. Ver cuántos MB están ocupando archivos borrados

sudo lsof +L1 | awk '{if ($7 ~ /^[0-9]+$/) sum+=$7} END {print sum/1024/1024 " MB"}'

? Conclusión

  • Si df muestra disco lleno pero du no lo refleja, hay archivos (deleted) abiertos.
  • Solo se liberan al cerrar los procesos que los usan.
  • Puppeteer, Chrome y otros headless browsers lo causan frecuentemente.
  • Automatiza con script o reinicia el contenedor para liberar todo.