feed://
Anotaciones
Comentarios

Liberando espacio (y II)

Esta anotación es continuación de la anterior. Se recomienda (aunque no es del todo necesario) previa lectura a la anotación anterior. Voy a mostraros un sencillo script que he hecho en BASH esta mañana que se basa en lo dicho en la primera parte de esta historia y que está inspirado en este hilo de los foros de Gentoo. Básicamente consiste en una función que es llamada tres veces con parámetros distintos en cada una de ellas (directorios, tamaños máximos que pueden almacenar y tamaños actuales). En dichas llamadas se realiza una comprobación entre tamaños (el máximo y el actual) de uno u otro directorio dando como resultado la eliminación del contenido en los directorios en donde el tamaño actual de estos sobrepase al tamaño máximo fijado en el script. Es un modo sencillo de automatizar lo que en el post anterior hablábamos; en fin, aquí lo tenéis:

#!/bin/sh
 
#
# script  : checkDisk.sh
# version : 1.0
# author  : enrique@barbeito.org
# date    : jue ago 28 10:36:18 CEST 2003
#
# Requirements:
#  - none
#
# Description:
#  Script de mantenimiento para Gentoo Linux.
#  Comprueba los tamaños de ciertos directorios
#  que tienden a llenarse y si superan el máximo
#  de bytes determinado, los vacia.
#  Se recomienda colocarlo en /etc/cron.monthly/
#
 
# tamaños máximos (en bytes)
kTAM_1=500000 # 500MB
kTAM_2=50000  # 50 MB
kTAM_3=10000  # 10 MB
 
# directorios de trabajo
kDIR_1=/usr/portage/distfiles
kDIR_2=/var/tmp/portage
kDIR_3=/tmp
 
#
# checkDir(); , comprobación de directorios
#
function checkDir
{
        if [ $1 -gt $2 ]; then
                let "i=$2/1000"
                echo -e "$3 : ocupa más de $i MB"
                echo -e "Limpiando directorio ...\n"
                rm -Rf $3/*
        fi
}
 
#
# comprobacion de usuario
#
if [ `/usr/bin/whoami` != 'root' ]; then
        echo -e "Error: debes ser root."
else
        # tamaños (en bytes) de los directorios
        tamanyo_1=`du -s $kDIR_1 | cut -f 1`
        tamanyo_2=`du -s $kDIR_2 | cut -f 1`
        tamanyo_3=`du -s $kDIR_3 | cut -f 1`
 
        # llamadas a la funcion
        checkDir $tamanyo_1 $kTAM_1 $kDIR_1
        checkDir $tamanyo_2 $kTAM_2 $kDIR_2
        checkDir $tamanyo_3 $kTAM_3 $kDIR_3
 
        echo -e "Completado."
fi
 
# 

nombre: checkDisk.sh - BASH script

Ejemplo de ejecución:
# df -hT
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/hda3     ext3    8.8G  5.1G  3.3G  61% /

# ./checkDir.sh
/usr/portage/distfiles : ocupa más de 500 MB
Limpiando directorio …

/var/tmp/portage : ocupa más de 50 MB
Limpiando directorio …

/tmp : ocupa más de 10 MB
Limpiando directorio …

Completado.

# df -hT
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/hda3     ext3    8.8G  3.3G  5.1G  40% /

Ahí lo tenéis :) Inicialmente he hecho un df -hT para comprobar el espacio usado de la partición / (5.1G), después he ejecutado el script y he vuelto a comprobar el espacio usado; ¡¡ este ha bajado hasta 3.3G !! El tiempo de ejecución del script es proporcional al número de ficheros y tamaño del contenido total a explorar/[eliminar]. Es decir, que tardará más cuantas más cosas haya (y más ocupen) en los directorios que explora (/usr/portage/distfiles/, /var/tmp/portage/ y /tmp/).

¡A disfrutarlo con salud!
exit

Hay 2 comentarios

  1. on 29 Ago 2003 at 00:24 ebarbeito

    Espero que os haya gustado este pequeño script. Ahora me gustaría dar unas notas/recomendaciones sobre su manejo.

    Bueno, ante todo, debe tener permisos de ejecución y el propietario debería ser root (chmod 755 checkDisk.sh && chown root.root checkDisk.sh). Luego, puedes usarlo de distintas formas; aquí te comento varias:

    - Moviéndolo a /usr/local/sbin/ y añadiendo la llamada al script al archivo /etc/conf.d/local.start -> este archivo ejecuta en la inicialización del sistema aquellos comandos que tenga listados. Yo no recomiendo hacer esto puesto que relentizarás la inicialización del sistema bastante tal vez y además porque no es necesario lanzar el script siempre que inicies el sistema. Piénsalo: ¿Vas a llegar a los topes máximos en alguno de los directorios? No, a no ser de que acabes de instalar el sistema y hayas instalado muuuuchos paquetes sin reiniciar :)

    - Añadirlo a /usr/local/sbin/ y ejecutarlo manualmente cada cierto tiempo. Sería una buena opción pero …. espera a escuchar mi tercera sugerencia :)

    - Hacer que CRON (manejador de tareas) lance por si mismo el script mensualmente. Es una opción muy recomendable puesto que, aunque tampoco creo que llegues a los topes máximos exigidos por el script para que pueda borrar contenido de los mismos, las llamadas al script quedan muy lejanas (temporalmente) unas de otras, con lo que no es tan pesado de hacer. Y también, es un proceso automático que casi no te enterarás del mismo -> no tendrás que ejecutar nada, pero si verás los correspondientes mensajes que imprime por pantalla cuando limpia algún directorio (ideal :)

    Eso es todo, (a ver si alguien comenta algo… jeje)
    Un saludo

  2. on 01 Sep 2003 at 22:30 _Aik_

    Bueno… bonito… y barato :)

    Ingenioso y muy bien explicado. ¡Así se hace!

    Nos vemossss

Trackback URI |