Восстановление данных в результате «физической смерти» носителя информации не самое приятное времяпрепровождение в жизни любого системного администратора. Следовательно, чем долгие часы исправлять ситуацию, а данных у нас очень много, лучше её предотвратить — организовав мониторинг.
У жестких и твердотельных накопителей есть встроенная технология, которая позволяет производить самостоятельную самодиагностику — S.M.A.R.T., к ней мы и будем работать.
S.M.A.R.T. — технология оценки состояния жёсткого диска встроенной аппаратурой самодиагностики, а также механизм предсказания времени выхода его из строя.
SMART не является панацеей от всех бед, но определенные сведения и некое планирование, посредством полученных данных, можно осуществить вовремя, тем самым чуть-чуть облегчить себе жизнь.
В качестве исходного сервера выступает Linux CentOS 6, работающий, в роли файлового хранилища.
Linux содержит группу пакетов под названием «Smartmontools», которые представляют собой набор утилит для проверки состояния дисков. Непосредственно конфигурация демона smartd для регулярного тестирования и мониторинга SMART, выходит за рамки данной статьи, интересующиеся могут самостоятельно найти примеры настройки в Интернете.
Нас же интересует графическое отображение ключевых параметров, аномальное изменение которых можно увидеть порой только визуально. И в этом нам поможет Cacti.
Для начала ставим пакет smartmontools:
# yum provides "smartctl*" # 1:smartmontools-5.43-1.el6.x86_64 : Tools for monitoring SMART capable hard disks # yum install smartmontools |
После установки, можно проверить параметры дисков:
smartctl -a DEVICE |
Как правило, вместо «DEVICE» будет что-то вроде /dev/sda (первый диск), /dev/sdb (второй).
Иногда необходимо принудительно включить SMART на диске:
smartctl -s on DEVICE |
В настоящее время технология SMART недоступна для USB дисков, несмотря на то, что диск внутри бокса может отдать необходимую информацию.
Получение SMART требует определенных привилегии, у демона SNMPd они как правило отсутствуют, поэтому основная работа по сбору промежуточных данных будет происходить через CRON скрипт:
cat /etc/snmp/smart-cronjob # where to keep the files STORE=/tmp/snmp # update smart parameters for devfull in /dev/sd?; do dev=`basename $devfull` /usr/sbin/smartctl -n idle -a $devfull >$STORE/smart-$dev.TMP mv $STORE/smart-$dev.TMP $STORE/smart-$dev done |
Не забываем создать дирректорию /tmp/snmp и поместить запуск в CRON
cat /etc/crontab |grep smart */5 * * * * root /etc/snmp/smart-cronjob |
Этот код ищет устройства «/dev/sd?» (/dev/sda, /dev/sdb и т.д.) и пытается записать их SMART данные в файл.
#ll /dev/sd? brw-rw---- 1 root disk 8, 0 Oct 25 14:42 /dev/sda brw-rw---- 1 root disk 8, 16 Oct 25 14:42 /dev/sdb brw-rw---- 1 root disk 8, 32 Oct 25 14:42 /dev/sdc brw-rw---- 1 root disk 8, 48 Oct 25 14:42 /dev/sdd brw-rw---- 1 root disk 8, 64 Oct 25 14:42 /dev/sde brw-rw---- 1 root disk 8, 80 Oct 25 14:42 /dev/sdf |
Все SMART параметры имеют порядковый номер. Соответствующая нумерация будет использоваться в PERL скрипте, вместо того, чтобы рассматривать каждый параметр сам по себе.
Perl скрипт для извлечения параметров SMART для SNMP (smart-generic)
Выставляем скрипту права на выполнение:
CHMOD + х /etc/snmp/smart-generic |
Этот скрипт принимает номер SMART параметра и выводит разницу между текущим значением и трешхолдом (порогом) для этого параметра.
Стоит отметить, что в зависимости от производителя, модели или версии прошивки, трешхолды могут быть разными. Поэтому само значение не представляет собой большого интереса, а вот необычные колебания или тенденции к снижению, стоит принимать во внимание. Для температуры, как правило, необходимо получить мгновенное значение.
Добавляем snmpd.conf строки (или другие, если вы хотите контролировать «свои» показатели. Общее представление о параметрах можно получить в Википедии):
extend smartdevices /etc/snmp/smart-generic devices extend smartdescriptions /etc/snmp/smart-generic description extend smart1 /etc/snmp/smart-generic 1 extend smart3 /etc/snmp/smart-generic 3 extend smart4 /etc/snmp/smart-generic 4 extend smart5 /etc/snmp/smart-generic 5 extend smart7 /etc/snmp/smart-generic 7 extend smart9 /etc/snmp/smart-generic 9 extend smart10 /etc/snmp/smart-generic 10 extend smart12 /etc/snmp/smart-generic 12 extend smart170 /etc/snmp/smart-generic 170 extend smart171 /etc/snmp/smart-generic 171 extend smart172 /etc/snmp/smart-generic 172 extend smart177 /etc/snmp/smart-generic 177 extend smart178 /etc/snmp/smart-generic 178 extend smart179 /etc/snmp/smart-generic 179 extend smart180 /etc/snmp/smart-generic 180 extend smart181 /etc/snmp/smart-generic 181 extend smart182 /etc/snmp/smart-generic 182 extend smart183 /etc/snmp/smart-generic 183 extend smart184 /etc/snmp/smart-generic 184 extend smart187 /etc/snmp/smart-generic 187 extend smart189 /etc/snmp/smart-generic 189 extend smartR190 /etc/snmp/smart-generic R190 extend smartR194 /etc/snmp/smart-generic R194 extend smart195 /etc/snmp/smart-generic 195 extend smart196 /etc/snmp/smart-generic 196 extend smart199 /etc/snmp/smart-generic 199 extend smart203 /etc/snmp/smart-generic 203 extend smart226 /etc/snmp/smart-generic 226 extend smart230 /etc/snmp/smart-generic 230 extend smart231 /etc/snmp/smart-generic 231 extend smart232 /etc/snmp/smart-generic 232 extend smart233 /etc/snmp/smart-generic 233 extend smart235 /etc/snmp/smart-generic 235 extend smart241 /etc/snmp/smart-generic 241 |
Рестартуем демона и проверяем выдачу (необходимо подставить свои «SNMP_Community» и «host_name»):
$ snmpwalk -v2c -c SNMP_Community host_name NET-SNMP-EXTEND-MIB::nsExtendOutLine NET-SNMP-EXTEND-MIB::nsExtendOutLine."smart1".1 = STRING: 101 NET-SNMP-EXTEND-MIB::nsExtendOutLine."smart1".2 = STRING: 101 ... NET-SNMP-EXTEND-MIB::nsExtendOutLine."smartdevices".1 = STRING: sda NET-SNMP-EXTEND-MIB::nsExtendOutLine."smartdevices".2 = STRING: sdb NET-SNMP-EXTEND-MIB::nsExtendOutLine."smartdescriptions".1 = STRING: WDC WD2003FYYS-... [01.01D01] 2 TB NET-SNMP-EXTEND-MIB::nsExtendOutLine."smartdescriptions".2 = STRING: WDC WD2003FYYS-... [01.01D01] 2 TB |
Cacti Templates
В архиве основной шаблон, содержащий все параметры на одном графике. В отдельный график выведена температура.
Для работы необходимо переместить файл сопоставления disk_smart.xml в /resource/snmp_queries/
И импортировать cacti_host_template_smart_parameters.xml в кактус.
Если все правильно настроено, то при добавлении «Disk SMART Parameters» в Associated Data Queries устройства должен появиться статус опрошенных объектов.
Не забываем выбрать правильный шаблон при непосредственном создании графиков. По умолчанию графики строятся для SSD дисков (AGILITY3), что не совсем правильно.
Примеры графиков:
Статья подготовлена на основе материала SMART stats on Cacti (via SNMP)