El sistema de monitorización que uso para ver si las máquinas virtuales tienen el disco lleno, la CPU al 100%, etc. me envió un correo diciendo que el directorio raíz de un sistema Linux estaba prácticamente lleno. Me conecté a la máquina afectada y lo comprobé:
root@host:/# df -h S.ficheros Size Used Avail Use% Montado en /dev/sda1 38G 30G 5,9G 84% / tmpfs 7,9G 0 7,9G 0% /lib/init/rw udev 7,9G 100K 7,9G 1% /dev tmpfs 7,9G 0 7,9G 0% /dev/shm
Al ejecutar el comando df vi que había 30 GB usados de un total de 38 GB aprovisionados en /dev/sda1. En cambio, al mirar qué carpeta estaba ocupando más espacio en disco mediante du, no vi ningún directorio donde se concentrara esa ocupación. Tampoco el total de GB ocupados cuadraban con los mostrados por df. Como vemos, no había más de 3 GB usados en total:
root@host:/# du -hs * | sort -h 0 dead.letter 0 initrd.img 0 proc 0 sys 0 vmlinuz 4,0K lib64 4,0K mnt 4,0K opt 4,0K selinux 8,0K backup 8,0K srv 12K media 16K lost+found 52K tmp 100K dev 3,6M lib32 4,5M sbin 5,8M bin 6,6M etc 16M boot 22M root 49M home 115M lib 1,0G usr 1,8G var
Lo que podía estar ocurriendo es que algún proceso estuviese usando un archivo que hubiese sido eliminado y como el buffer no se podía vaciar porque no existía el archivo hacia el que el proceso quería escribir, se mantuviera esa información en el limbo hasta que ese proceso mueriera, aumentando así el tamaño del buffer hasta ocupar esos 30 GB mencionados anteriormente.
Podemos ver qué procesos usan archivos que han sido borrados mediante:
root@host:/# lsof | grep deleted
En el resultado, vi que el programa apache2 estaba tratando de escribir en los archivos /var/log/apache2/error.log y /var/log/apache2/other_vhosts_access.log, los cuales habían sido eliminados:
apache2 ... /var/log/apache2/error.log (deleted) apache2 ... /var/log/apache2/other_vhosts_access.log (deleted)
Como el causante era Apache, tras reiniciar Apache se liberó el espacio ocupado en /dev/sda1:
root@host:/# df -h S.ficheros Size Used Avail Use% Montado en /dev/sda1 38G 4,7G 32G 14% / tmpfs 7,9G 0 7,9G 0% /lib/init/rw udev 7,9G 100K 7,9G 1% /dev tmpfs 7,9G 0 7,9G 0% /dev/shm
¡Misterio resuelto!
Fuentes:
https://serverfault.com/questions/315181/df-says-disk-is-full-but-it-is-not