S.M.A.R.T. (от англ. self-monitoring, analysis and reporting technology — технология самоконтроля, анализа и отчётности) — технология оценки состояния жёсткого диска встроенной аппаратурой самодиагностики, а также механизм предсказания времени выхода его из строя.
Ставим пакет smartmontools
#apt-get install smartmontools #smartctl -a /dev/sda smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.11.0-20-generic] (local build) Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net === START OF INFORMATION SECTION === Model Family: Seagate Barracuda 7200.7 and 7200.7 Plus Device Model: ST3120022A Serial Number: 5JS0E07Z Firmware Version: 3.06 User Capacity: 120.034.123.776 bytes [120 GB] Sector Size: 512 bytes logical/physical Device is: In smartctl database [for details use: -P show] ATA Version is: 6 ATA Standard is: ATA/ATAPI-6 T13 1410D revision 2 Local Time is: Mon May 26 21:59:24 2014 EEST SMART support is: Available - device has SMART capability. SMART support is: Enabled .... SMART Attributes Data Structure revision number: 10 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE ..... 7 Seek_Error_Rate 0x000f 089 060 030 Pre-fail Always - 886804289 9 Power_On_Hours 0x0032 074 074 000 Old_age Always - 22790 10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 0 12 Power_Cycle_Count 0x0032 096 096 020 Old_age Always - 4388 194 Temperature_Celsius 0x0022 042 050 000 Old_age Always - 37 195 Hardware_ECC_Recovered 0x001a 062 057 000 Old_age Always - 104312508 197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x003e 200 164 000 Old_age Always - 255 200 Multi_Zone_Error_Rate 0x0000 100 253 000 Old_age Offline - 0 202 Data_Address_Mark_Errs 0x0032 100 253 000 Old_age Always - 0 .....
Для получения S.M.A.R.T. нужны права root, у службы snmpd таких прав нет, поэтому создадим скрипт, который будет собирать данные S.M.A.R.T. в файл.
#touch /etc/snmp/getsmart.sh #nano /etc/snmp/getsmart.sh
содержимое файла
#!/bin/sh for drive in /dev/sd?; do device=`basename $drive` /usr/sbin/smartctl -a -n idle $drive > /tmp/smart_$device done
Выставляем права на выполнение
#chmod +x /etc/snmp/getsmart.sh
теперь можно добавить скрипт в крон
#nano /etc/crontab
добавить в конец файла такую запись
*/5 * * * * root /etc/snmp/getsmart.sh
Cкрипт для извлечения параметров S.M.A.R.T. для SNMPD
#touch /etc/snmp/attrsmart.sh #nano /etc/snmp/attrsmart.sh
содержимое файла
#!/bin/sh for smartlog in $(ls /tmp/smart*); do case "$1" in -temp ) ATTR=`cat $smartlog | /bin/grep 'Temperature_Celsius' | /usr/bin/awk '{ print $10; }'` ;; -reloc ) ATTR=`cat $smartlog | /bin/grep 'Reallocated_Sector_Ct' | /usr/bin/awk '{ print $10; }'` ;; -pendsec ) ATTR=`cat $smartlog | /bin/grep 'Current_Pending_Sector' | /usr/bin/awk '{ print $10; }'` ;; -rawerror ) ATTR=`cat $smartlog | /bin/grep 'Raw_Read_Error_Rate' | /usr/bin/awk '{ print $10; }'` ;; -seekerror ) ATTR=`cat $smartlog | /bin/grep 'Seek_Error_Rate' | /usr/bin/awk '{ print $10; }'` ;; -device ) ATTR=`echo $smartlog | grep -Eo '.{3}$'` ;; *) ATTR=`cat $smartlog | grep "Device Model" | awk '{ print $3,$4 }'` ;; esac echo $ATTR done
Выставляем права на выполнение
#chmod +x /etc/snmp/attrsmart.sh
скрипт выводит только самые необходимые параметры S.M.A.R.T.
теперь добавляем вызов скрипта в конец файла /etc/snmp/snmpd.conf
#nano /etc/snmp/snmpd.conf
одна строка для каждого параметра
extend "model" /etc/snmp/attrsmart.sh extend "device" /etc/snmp/attrsmart.sh -device extend "temperature" /etc/snmp/attrsmart.sh -temp extend "relocseccount" /etc/snmp/attrsmart.sh -reloc extend "rawreaderror" /etc/snmp/attrsmart.sh -rawerror extend "seekerrorrate" /etc/snmp/attrsmart.sh -seekerror
перезапускаем службу snmpd
#service snmpd restart
и проверяем
snmpwalk -c server104_ubuntu -v 2c localhost NET-SNMP-EXTEND-MIB::nsExtendObjects NET-SNMP-EXTEND-MIB::nsExtendNumEntries.0 = INTEGER: 7 NET-SNMP-EXTEND-MIB::nsExtendCommand."model" = STRING: /etc/snmp/attrsmart.sh NET-SNMP-EXTEND-MIB::nsExtendCommand."device" = STRING: /etc/snmp/attrsmart.sh NET-SNMP-EXTEND-MIB::nsExtendCommand."temperature" = STRING: /etc/snmp/attrsmart.sh NET-SNMP-EXTEND-MIB::nsExtendCommand."rawreaderror" = STRING: /etc/snmp/attrsmart.sh NET-SNMP-EXTEND-MIB::nsExtendCommand."relocseccount" = STRING: /etc/snmp/attrsmart.sh NET-SNMP-EXTEND-MIB::nsExtendCommand."seekerrorrate" = STRING: /etc/snmp/attrsmart.sh NET-SNMP-EXTEND-MIB::nsExtendArgs."model" = STRING: NET-SNMP-EXTEND-MIB::nsExtendArgs."device" = STRING: -device NET-SNMP-EXTEND-MIB::nsExtendArgs."temperature" = STRING: -temp ..... NET-SNMP-EXTEND-MIB::nsExtendOutLine."seekerrorrate".1 = STRING: 0 NET-SNMP-EXTEND-MIB::nsExtendOutLine."seekerrorrate".2 = STRING: 713406629
Теперь можно использовать snmp для мониторинга S.M.A.R.T.