removealltempfiles.jpg

Me volvió a suceder, esta vez en mi Slackware:

19:41 emi@vaio ~ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda5        29G   27G     0 100% /
/dev/sda1       1.9G   21M  1.8G   2% /boot
/dev/sda6        29G   19G  8.0G  70% /home
/dev/sda8       191G  186G  4.9G  98% /data
tmpfs           2.0G  4.0K  2.0G   1% /dev/shm
/dev/sda9       173G  152G   22G  88% /vault

Como podrán observar, estoy algo complicado de espacio en disco. Pero lo torpe fue haber llenado el sistema de archivos raíz /. Muy raro siendo que dicha partición tiene 30 GB. Cosas que suceden por no utilizar un esquema de particionado más sensato (como mínimo montar los directorios /tmp y /var en particiones separadas). Aunque se puede perdonar el descuido por tratarse de un sistema de escritorio.

El punto es que me sorprendí al encontrar el sistema de archivos raíz colmado, pues tenía la sensación de que había espacio de sobra. Pero lo que más me sorprendió fue ésto:

/dev/sda5        29G   27G     0 100% /

Si el tamaño total es 29G y tiene 27G utilizados, ¿cómo puede ser que esté 100% en uso y el espacio disponible sea 0?

Interesante situación, y es la primera vez que me ocurre. Había oído de este caso dialogando con un experto: quedan 2GB de espacio disponible, pero df reporta que el filesystem está lleno, quedan 0 bytes disponibles. ¿A qué se debe ésto? A que se ha llenado la tabla de i-nodos. Por más que queden bloques libres, no quedan i-nodos disponibles para crear nuevos archivos (que puedan utilizar esos bloques libres), sólo es posible que los archivos existentes aumenten su tamaño. Se ha llegado al límite máximo de archivos en el filesystem.

Lo primero que se me ocurrió ante esta situación fue revisar el directorio de archivos temporales: /tmp, y me topé con cientos, miles de archivos como éstos:

[...]

-rw-------   1 emi  wheel  963 Aug 25  2014 virtuoso_ZT1000.ini
-rw-------   1 emi  wheel  963 Aug  9  2014 virtuoso_ZT1001.ini
-rw-------   1 emi  wheel  963 Aug 18  2014 virtuoso_ZT1002.ini
-rw-------   1 emi  wheel  963 Sep  5  2014 virtuoso_ZT1003.ini
-rw-------   1 emi  wheel  963 Sep  8  2014 virtuoso_ZT1004.ini
-rw-------   1 emi  wheel  963 Sep 20  2014 virtuoso_ZT1007.ini
-rw-------   1 emi  wheel  963 Sep  7  2014 virtuoso_ZT1008.ini
-rw-------   1 emi  wheel  963 Sep 17  2014 virtuoso_ZT1009.ini
-rw-------   1 emi  wheel  963 Apr 10  2014 virtuoso_ZT1010.ini
-rw-------   1 emi  wheel  963 Sep 17  2014 virtuoso_ZT1011.ini
-rw-------   1 emi  wheel  963 May  2  2014 virtuoso_ZT1012.ini
-rw-------   1 emi  wheel  963 May 29  2014 virtuoso_ZT1017.ini
-rw-------   1 emi  wheel  963 Sep 19  2014 virtuoso_ZT1020.ini
-rw-------   1 emi  wheel  963 Feb 10  2014 virtuoso_ZT1021.ini
-rw-------   1 emi  wheel  963 Sep 12  2014 virtuoso_ZT1022.ini
-rw-------   1 emi  wheel  963 Sep 19  2014 virtuoso_ZT1026.ini
-rw-------   1 emi  wheel  963 Sep  6  2014 virtuoso_ZT1028.ini
-rw-------   1 emi  wheel  963 Aug 15  2014 virtuoso_ZT1030.ini

[...]

Se trata de archivos temporales generados Virtuoso Universal Server, un motor de bases de datos híbrido utilizado por KDE.

Zorro viejo Sysadmin, donde pone el ojo pone la bala.

Me dispuse a eliminar el contenido del directorio de archivos temporales:

19:43 emi@vaio ~ $ sudo rm -fr /tmp/*

Como era de esperarse, la operación demoro bastante tiempo, clara pauta de que habían miles de archivos para borrar.

Y luego de la operación se liberaron nada mas y nada menos que 12 GB del directorio temporal:

19:43 emi@vaio ~ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda5        29G   16G   12G  59% /
/dev/sda1       1.9G   21M  1.8G   2% /boot
/dev/sda6        29G   19G  8.0G  70% /home
/dev/sda8       191G  186G  4.9G  98% /data
tmpfs           2.0G  4.0K  2.0G   1% /dev/shm
/dev/sda9       173G  152G   22G  88% /vault

Ahora bien, por más que mi Slack lleva ya más de un año y medio corriendo sin problemas, no me gustaría que esto suceda nuevamente.

Cómo borrar los archivos temporales automáticamente

Revisando la documentación de Slackware, encontré un artículo que explica cómo utilizar el script /etc/rc.d/rc.local_shutdown para ejecutar tareas de mantenimiento justo antes de apagar el sistema.

Recordar que Slackware utiliza el gestor de inicio System V, y todos los scripts de gestión de los demonios (servicios) se encuentran dentro del directorio /etc/rc.d/. Aunque, sólo se inician aquellos cuyo script tiene permisos de ejecución. Por ende, en lugar de habilitar/deshabilitar servicios utilizando una herramienta, se habilitan/deshabilitan servicio otorgando y quitando permisos de ejecución respectivamente (esto es KISS, señores).

Para habilitar este script, el cual es lanzado al momento de apagar el sistema desde el script /etc/rc.d/rc.6 (con el objetivo de cerrar demonios y procesos de forma limpia), simplemente se le debe otorgar permisos de ejecución:

# chmod +x /etc/rc.d/rc.local_shutdown

Si no existe debe ser antes creado (touch /etc/rc.d/rc.local_shutdown). En mi caso ya existía, dado que desde dicho script se inicia el apagado de las máquinas virtuales QEMU/KVM.

Para borrar los temporales desde este script, agregar las siguientes líneas al final de archivo.

# Remove temporary files
rm -fr /tmp/* >/dev/null 2>&1

ADVERTENCIA: Un error en este comando puede provocar la pérdida total de los datos en el sistema. Se debe verificar la correctitud antes de guardar los cambios en el script, preferentemente en un entorno chrooted.

Antes de apagar el sistema, crear un directorio "prueba" y un archivo de gran tamaño:

17:12 root@vaio emi # mkdir /tmp/prueba
17:12 root@vaio emi # dd if=/dev/zero of=/tmp/prueba/archivo bs=4096 count=10000
10000+0 records in
10000+0 records out
40960000 bytes (41 MB) copied, 0.234932 s, 174 MB/s
17:12 root@vaio emi # ll /tmp/
total 32K
drwx------ 2 emi  wheel 4.0K Aug 20 16:57 akonadi-emi.FlEERa
-rw-r--r-- 1 emi  wheel    6 Aug 20 16:58 blueman-applet-1000
drwx------ 2 emi  wheel 4.0K Aug 20 16:57 kde-emi
drwx------ 2 root root  4.0K Aug 20 16:57 kde-root
drwx------ 2 emi  wheel 4.0K Aug 20 16:59 ksocket-emi
drwx------ 2 root root  4.0K Aug 20 16:57 ksocket-root
drwx------ 2 emi  wheel 4.0K Aug 20 17:06 plugtmp
drwxr-xr-x 2 root root  4.0K Aug 20 17:12 prueba
17:12 root@vaio emi # du -hs /tmp/
40M     /tmp/

Se observa que el directorio temporal ocupa 40 MB. Reiniciar.

# reboot

Al iniciar nuevamente, el directorio /tmp a ocupa sólo 732 KB:

17:18 root@vaio emi # ll /tmp/
total 24K
drwx------ 2 emi  wheel 4.0K Aug 20 17:16 akonadi-emi.FlEERa
-rw-r--r-- 1 emi  wheel    6 Aug 20 17:17 blueman-applet-1000
drwx------ 2 emi  wheel 4.0K Aug 20 17:16 kde-emi                                           
drwx------ 2 root root  4.0K Aug 20 17:16 kde-root                                          
drwx------ 2 emi  wheel 4.0K Aug 20 17:16 ksocket-emi                                       
drwx------ 2 root root  4.0K Aug 20 17:16 ksocket-root
17:18 root@vaio emi # du -hs /tmp/
732K    /tmp/

Notar que los archivos que contiene tienen fecha posterior al reinicio (fueron creados durante el inicio de KDE).

Adicionalmente es posible lograr que se listen los archivos que se están borrando durante el apagado (a costa de hacer el apagado algo más lento) modificando el script de la siguiente forma:

# Remove temporary files
echo "Borrando temporales...";
rm -vfr /tmp/*

 

Fuente: linuxito

¿Quién está en línea?

Hay 3184 invitados y ningún miembro en línea