Skript-SMART

Z Milan Kerslager
Verze z 10. 5. 2007, 18:00, kterou vytvořil Milan.Kerslager (diskuse | příspěvky) (Založení článku)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Přejít na: navigace, hledání

Skript řeší automatické spouštění S.M.A.R.T. testů. Pokud je spuštěn s parametrem short, je spuštěna zkrácená verze selftestu (cca 2 minuty – na disku se zkontrolují čtením náhodné sektory). Bez parametru jsou na všech nalezených discích spuštěny dlouhé testy (desítky minut až několik hodin podle velikosti – disk se zkontroluje čtením úplně celý).

     1 #!/bin/bash
     2
     3 PATH=/sbin:/usr/sbin:/bin:/usr/bin
     4 TEMP=$(/bin/mktemp /tmp/disktest-smart.XXXXXX)
     5 case $1 in
     6         short)
     7            TEST=short
     8            ;;
     9         *) TEST=long
    10            ;;
    11 esac
    12 for DRIVE in /dev/hd[a-z] /dev/sd[a-z]; do
    13   BASEDRIVE=$(basename $DRIVE)
    14   # if it is IDE disk and does not honor SMART, don't ask via smartctl
    15   if ! [ -d /proc/ide/$BASEDRIVE -a ! -f /proc/ide/$BASEDRIVE/smart_values ]; then
    16     # does the disk SMART capable?
    17     smartctl -q silent $DRIVE
    18     RET=$?
    19     if [ $(($RET & 2)) -eq 0 -a $(($RET & 4)) -eq 0 ]; then
    20       # do we have to enable S.M.A.R.T?
    21       if smartctl -c $DRIVE | grep -q 'SMART Disabled'; then
    22         smartctl -s on $DRIVE
    23       fi
    24       # does disk have 'No Self-test supported'
    25       if ! smartctl -c $DRIVE | grep -q 'No Self-test supported'; then
    26         if smartctl -c $DRIVE | grep -q 'Self-test routine in progress'; then
    27           echo "Self-test routine already in progress for disc $DRIVE, skipping..." > /dev/null
    28         else
    29           echo "smartctl -t $TEST $DRIVE" > $TEMP
    30           if ! smartctl -t $TEST $DRIVE >> $TEMP 2>&1; then
    31             mail -s "S.M.A.R.T. failed on $DRIVE" root < $TEMP > /dev/null
    32           fi
    33         fi
    34       fi
    35       sleep 5
    36     fi
    37   fi
    38 done
    39 rm -f $TEMP

Skript je vhodné umístit do adresáře /etc/cron.daily/, aby byl spuštěn jednou denně. DO souboru /etc/cron.d/disktest-smart-short pak umístíme jeden řádek. který zajistí spouštění krátkých testů každých 6 hodin:

0 */6 * * * root exec /etc/cron.daily/disktest-smart short

V systému by měl běžet démon smatrd v monitorovacím režimu, aby v případě selhání selftestu byl automaticky poslán mail správci počítače.