#!/bin/sh # testhd (0.04) Test de disco duro automático (usuario/cron) # # Copyright Manel Marin @ 2000 Cubierto por la licencia GNU GPL disponible en # http://www.gnu.org/copyleft/gpl.html Se puede copiar, distribuir y modificar # libremente bajo los términos de la GPL e incluyendo siempre este párrafo # # # Uso: testhd # Testea todas las particiones de todos los discos # testhd /dev/hda /dev/hdb # Testea los discos (todo seguido) # testhd /dev/hda1 /dev/hda2 # Testea las particiones # # Sugiero: Lanzar como root desde cron una vez a la semana, se nos enviará un # mail con el resultado (Es una feature de cron ;-) # También se puede usar por root desde un terminal mostrando progreso # #6.11.99 (0.01) # Utiliza df para conocer particiones y su tamaño # y badblocks para testear las particiones montadas #3.9.00 (0.02) # Emplear df para mostrar ocupación # Utilizar fdisk -l para hacer lista de particiones de todos los discos # Utilizar fdisk -s para obtener los bloques de cada partición # Mostrar progreso si se lanza desde usuario (y *NO* desde cron) # Cronometrar el tiempo de test de cada partición y medir la carga del # sistema antes y después #5.9.00 (0.03) # Sustituyo `time badblocks' por date antes para que funcione $? #4.1.01 (0.04) # nice -n 15 badblocks para reducir prioridad # SE ESPECIFICA PARTICION/ES A TESTEAR if [ "$1" != "" ] then echo "testhd: Testeando $*" echo TESTLIST="$*" else # NO SE ESPECIFICA PARTICION A TESTEAR, TESTEAR TODAS LAS PARTICIONES echo "testhd: Testeando todas las particiones..." # HACER LISTA CON LAS PARTICIONES DE TODOS LOS DISCOS TESTLIST=`fdisk -l | awk ' # Las particiones empiezan con "/dev" en la primera palabra, y no queremos # las extendidas, ya que son "contenedores" para otras particiones $1 ~ "^\/dev" && $0 !~ "Extend" { LISTA = LISTA " "$1 } END { print LISTA } '` echo "$TESTLIST" echo fi # EN MODO CONSOLA MOSTRAR PROGRESO (Desde cron *NO*) # TRUCO: $USER no está definida en la ejecución desde cron if [ $USER ] then MODE="-s" # Lanzado por usuario: Mostrar progreso else MODE="-v" # Lanzado por cron: NO mostrar progreso fi # MOSTRAR HORA ANTES echo -n " "; date # MOSTRAR CARGA DEL SISTEMA echo -n " CARGA: " cat /proc/loadavg # MOSTRAR INFO DE OCUPACION echo "DF:" df echo # PROCESAR LA LISTA (TEST DE PARTICIONES UNA A UNA) for TEST in $TESTLIST do # CONSEGUIR EL TAMAÑO EN BLOQUES HD_BLOCKS=`fdisk -s $TEST` # TESTEAR HD Y DAR MENSAJE DE RESULTADO Y TIEMPO EMPLEADO echo "* Testeando $TEST de $HD_BLOCKS bloques" nice -n 15 badblocks $MODE $TEST $HD_BLOCKS if [ $? == 0 ] then echo "--- testhd: OK ---" echo echo -n " "; date # Hora al acabar cada partición echo -n " CARGA: " cat /proc/loadavg # Mostrar carga del sistema else echo "!!! testhd: *** ERROR ****************** !!!" echo echo -n " "; date # Hora al acabar cada partición echo -n " CARGA: " cat /proc/loadavg # Mostrar carga del sistema fi echo done