Skript-SMART
Z Milan Kerslager
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.