Skript-SMART: Porovnání verzí
Z Milan Kerslager
(Založení článku) |
(Žádný rozdíl)
|
Verze z 10. 5. 2007, 18:00
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.