Skript-SMART: Porovnání verzí
 (Používat /proc/partitions)  | 
				m (+kat)  | 
				||
| Řádka 80: | Řádka 80: | ||
   smartctl -l selftest /dev/hda  |    smartctl -l selftest /dev/hda  | ||
| + | |||
| + | [[Kategorie:Materiály ke studiu]]  | ||
Aktuální verze z 24. 9. 2009, 06:33
Skript řeší automatické spouštění S.M.A.R.T. testů na RHEL3 a RHEL4, kde nástroj smartctl ani démon smard neumí autodetekovat SATA disky. 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ý).
#!/bin/bash
PATH=/sbin:/usr/sbin:/bin:/usr/bin
TEMP=$(/bin/mktemp /tmp/disktest-smart.XXXXXX)
export LC_ALL=C
case $1 in
        short)
           TEST=short
           ;;
        *) TEST=long
           ;;
esac
function smartcheck() {
  # is the disk SMART capable?
  smartctl $2 -q silent $1
  RET=$?
  if [ $(($RET & 2)) -eq 0 -a $(($RET & 4)) -eq 0 ]; then
    # do we have to enable S.M.A.R.T?
    if smartctl $2 -c $1 | grep -q '^SMART Disabled'; then
      smartctl $2 -s on $1
    fi
    # does disk have 'No Self-test supported'
    if ! smartctl $2 -c $1 | grep -q 'No Self-test supported'; then
      if smartctl $2 -c $1 | grep -q 'Self-test routine in progress'; then
        # send to /dev/null to keep it quiet or send to $TEMP to be informed by email
        echo "Self-test routine already in progress for disc $1, skipping..." > /dev/null
      else
        echo "smartctl $2 -t $TEST $1" > $TEMP
        if ! smartctl $2 -t $TEST $1 >> $TEMP 2>&1; then
          mail -s "S.M.A.R.T. failed on $1" root < $TEMP > /dev/null
        fi
      fi
    fi
    sleep 5
  fi
}
for DEVICE in $(awk '/hd[a-z]$/ {print $4}' /proc/partitions); do
  # if it is IDE disk and does not honor SMART, don't ask via smartctl
  if ! [ -d /proc/ide/$DEVICE -a ! -f /proc/ide/$DEVICE/smart_values ]; then
    smartcheck /dev/$DEVICE
  fi
done
for DEVICE in $(awk '/sd[a-z]$/ {print $4}' /proc/partitions); do
  if smartctl -a /dev/$DEVICE | grep -q 'SATA devices are not supported via the SCSI device type';  then
    PARAM="-d ata"
  else
    PARAM=""
  fi
  smartcheck /dev/$DEVICE "$PARAM"
done
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. V souboru /etc/smartd.conf by tedy bylo:
# IDE disk /dev/hda -a -m root -M daily # SATA disk /dev/sda -a -m root -M daily -d ata # SCSI disk /dev/sdb -a -m root -M daily
Povolíme spouštění démona smatrd při startu a spustíme ho ručně:
chkconfig smartd on /etc/init.d/smartd start
V souboru /var/log/messages zkontrolujeme, jestli démon skutečně všechny disky monitoruje. Zkusíme ručně spustit skript s parametrem short a ujistíme se, že S.M.A.R.T. test byl spuštěn na všech discích:
bash -x /etc/cron.daily/disktest-smart short
Po asi 1 až 5 minutách si ověříme ve výpisu stavu disku, že test proběhl bez závad:
smartctl -l selftest /dev/hda