Algunas cosas que parecen extrañas ocurren en todos los sistemas en los equipos con RHEL, Centos o Oracle Linux hay ocasiones que alguna partición se llena o se ocupa todo el espacio disponible aunque si verificas al espacio de disco usado no concuerda y no sabes que está ocupando el espacio. También ocurre en ocasiones que aunque borres algunos archivos grandes aparentemente no se libera el espacio por ejemplo en /tmp. Aquí te digo que puedes hacer para recuperar el espacio y se libere.
Como liberar espacio que parece no estar ocupado en /tmp
Hay ocasiones cuando en algunos servidores se reportan file systems con espacio agotado o con poco espacio libre pero que al parecer no está ocupado por archivos o directorios.
$ df -h Filesystem Size Used Avail Use% Mounted on udev 7.6G 0 7.6G 0% /dev tmpfs 1.6G 2.8M 1.6G 1% /run /dev/mapper/rootfs 914G 250G 618G 29% / /dev/sda1 488M 148M 305M 33% /boot /dev/sda2 2.1G 2.0G 105M 99% /tmp
Pero cuando buscas el uso de disco en el sistema de archivos no concuerda la información o tamaños. Aunque es solo un ejemplo, puedes ver algo como esto:
$ du -sh /tmp
509M /tmp
Esto indica que el comando df reporta solo 105MB libres sin embargo el uso de disco solo reporta 509 MB, ¿donde está la diferencia?
La respuesta es que pueden ser archivos temporales que han sido borrados pero no liberados por algún proceso como una base de datos o algún servidor web. Para localizar estos archivos puedes utilizar este comando:
lsof | grep '(deleted)' | grep tmp
Al ver estos archivos notarás que tienen la leyenda (deleted) y lo que hay que identificar es el proceso que esta bloqueando esos archivo. Por alguna razón el proceso no termina, por lo que el archivo en realizar no se libera aunque ha sido borrado.
Una forma de liberar ese espacio es matar los procesos que están bloqueando esos archivos. con el comando kill.
Pero si quieres borrar por ejemplo los archivos bloqueados en /tmp por algún proceso se puede utilizar este comando:
for i in $(lsof | grep '(deleted)' | grep tmp | awk {'print $2'}); do kill -9 $i; done
Esto encontrará todo los procesos que tienen esos archivos bloqueados en /tmp, generará una lista de esos procesos y los pasará al comando kill.
Esto liberará el espacio bloqueado en el file system y luego al ejecutar el comando df y du los valores tendrán sentido de nuevo.
$ df -h Filesystem Size Used Avail Use% Mounted on udev 7.6G 0 7.6G 0% /dev tmpfs 1.6G 2.8M 1.6G 1% /run /dev/mapper/rootfs 914G 250G 618G 29% / /dev/sda1 488M 148M 305M 33% /boot /dev/sda2 2.1G 509M 1.4G 24% /tmp
Ahora ve el estado del uso de disco
$ du -sh /tmp 509M /tmp
Verificar el estado de uso del file system y el estado uso de disco en una ruta te permitirá detectar si hay archivos bloqueados o no.