Liberar espacio de /tmp que no recuperas aunque borres archivos

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.

This entry was posted in Blog and tagged , , , , . Bookmark the permalink.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


*