![](https://habrastorage.org/getpro/habr/post_images/8a8/b26/074/8a8b26074461831b641787110fb3bb1c.jpg)
Восстановление данных в результате «физической смерти» носителя информации не самое приятное времяпрепровождение в жизни любого системного администратора. Следовательно, чем долгие часы исправлять ситуацию, а данных у нас очень много, лучше её предотвратить — организовав мониторинг.
У жестких и твердотельных накопителей есть встроенная технология, которая позволяет производить самостоятельную самодиагностику — S.M.A.R.T., к ней мы и будем работать.
S.M.A.R.T. — технология оценки состояния жёсткого диска встроенной аппаратурой самодиагностики, а также механизм предсказания времени выхода его из строя.
SMART не является панацеей от всех бед, но определенные сведения и некое планирование, посредством полученных данных, можно осуществить вовремя, тем самым чуть-чуть облегчить себе жизнь.
В качестве исходного сервера выступает Linux CentOS 6, работающий, в роли файлового хранилища.
Linux содержит группу пакетов под названием «Smartmontools», которые представляют собой набор утилит для проверки состояния дисков. Непосредственно конфигурация демона smartd для регулярного тестирования и мониторинга SMART, выходит за рамки данной статьи, интересующиеся могут самостоятельно найти примеры настройки в Интернете.
Нас же интересует графическое отображение ключевых параметров, аномальное изменение которых можно увидеть порой только визуально. И в этом нам поможет Cacti.
1) Для начала ставим пакет 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 скрипте, вместо того, чтобы рассматривать каждый параметр сам по себе.
![](https://habrastorage.org/getpro/habr/post_images/791/94b/414/79194b414f679b383c546ea39ae6ad95.png)
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
2. Cacti Templates
В архиве основной шаблон, содержащий все параметры на одном графике. В отдельный график выведена температура.
Для работы необходимо переместить файл сопоставления disk_smart.xml в /resource/snmp_queries/
И импортировать cacti_host_template_smart_parameters.xml в кактус.
![](https://habrastorage.org/getpro/habr/post_images/e47/159/e90/e47159e908fe68169bbc5901e31a4980.png)
![](https://habrastorage.org/getpro/habr/post_images/981/31d/535/98131d535e2f013fd84a014184a7dfa3.png)
Если все правильно настроено, то при добавлении «Disk SMART Parameters» в Associated Data Queries устройства должен появиться статус опрошенных объектов.
![](https://habrastorage.org/getpro/habr/post_images/6e1/859/a43/6e1859a438e7e6b8eb9e5dea0cfb8f9a.png)
Не забываем выбрать правильный шаблон при непосредственном создании графиков. По умолчанию графики строятся для SSD дисков (AGILITY3), что не совсем правильно.
![](https://habrastorage.org/getpro/habr/post_images/c91/a29/430/c91a294308ce3b8891c6b942efbc9310.png)
3. Примеры графиков:
![](https://habrastorage.org/getpro/habr/post_images/496/e16/eb4/496e16eb4261d4f630d81994dcef5be6.png)
![](https://habrastorage.org/getpro/habr/post_images/76c/fa8/530/76cfa8530bb34aab936602877db6ac7a.png)
Статья подготовлена на основе материала SMART stats on Cacti (via SNMP)