Linux: espacio ocupado no concuerda con archivos

Cómo liberar espacio bloqueado en disco en un sistema Linux.



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

Post a Comment

Mới hơn Cũ hơn