UMGUM.COM 

S.M.A.R.T ( Мониторинг состояния аппаратного обеспечения файловой системы. )

1 августа 2010  (обновлено 2 ноября 2014)

Эта публикация отнесена в архив. Она неактуальна.
Ресурс по следующей ссылке является преемником: Построение простейшей распределённой расширяемой сетевой горизонтальной файловой системы с использованием технологий MDADM, LVM, NFS и MHDDFS.

OS: Debian Linux.

Нет ничего вечного - это аксиома, многократно подтверждённая и ни разу не опровергнутая.
Соответственно, наше оборудование сломается; рассмотрим способы приглядывания за аппаратным обеспечением в ожидании неминуемого сбоя и методы заблаговременного обнаружения устройств нуждающихся в замене.

Анализ технического состояния дисковых устройств будем производить с помощью утилит, обращающихся к устройствам используя технологию S.M.A.R.T (Self Monitoring Analysing and Reporting Technology).

Указанная технология позволит нам с долей вероятности не менее 50% выявить проблемы аппаратной составляющей дисковых устройств:

Проблемы блока магнитных головок;
Повреждения дисков;
Проблемы механики;
Проблемы электроники.

Устанавливаем пакет S.M.A.R.T:

# aptitude install smartmontools


Инсталлятор потянет за собой кучку пакетов почтового сервиса для обеспечения работы сервиса smartd, который висит фоновой задачей, периодически проводит тесты оборудования и высылает на почтовый ящик администратора уведомления о состоянии. На самом деле я не планирую использовать сервис smartd, ограничившись утилитой smatrctl, но пакет идёт "как есть" и придётся смириться с волей его создателей.

По умолчанию smartd не запускается автоматически при старте системы, и это хорошо. Для разрешения запуска нужно прямо указать это в файле "/etc/default/smartmontools" опцией "start_smartd=yes", но я делать этого не буду, ограничившись использованием утилиты smartctl.

Выясняем, поддерживает ли дисковое устройство технологию S.M.A.R.T:

# smartctl -i /dev/sda

=== START OF INFORMATION SECTION ===
Device Model:     ST31000528AS
Serial Number:    9VP2A1PZ
Firmware Version: CC37
User Capacity:    1,000,203,804,160 bytes
ATA Version is:   8
ATA Standard is:  ATA-8-ACS revision 4
Local Time is:    Wed May 12 13:05:27 2010 ALMT
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

В случае, если S.M.A.R.T для устройства выключен - включаем его (или smartctl -s off /dev/sda - для отключения S.M.A.R.T):

# smartctl -s on /dev/sda

Полный вывод состояния устройства:

# smartctl --all /dev/sda

В полном выводе на предмет анализа состояния нас будут интересовать значения атрибутов обозначенные ключём "Pre-fail"; насколько я понимаю, это критические параметры устройства, с помощью которых можно судить о его перспективах.
У атрибутов есть значения выстроенные в колонки, которые мы будем анализировать:

RAW_VALUE - непосредственное значение атрибута текущего состояния устройства;
VALUE     - "нормализованное" условное значение текущего состояния устройства (от 0 до 255);
WORST     - минимальное условное значение состояния устройства, установленное производителем;
THRESH    - условное значение - нет шансов на дальнейшую работу.

В случае анализа состояния температуры или скорости вращения удобно оперировать непосредственными значениями из колонки "RAW_VALUE", а вот для оценки состояния в зависимости от количества ошибок проще положиться на значения "нормализованные" производителем и их отношением к рекомендуемым значениям.

Примерный вывод:

# smartctl --all /dev/sda | grep Pre-fail

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE
....
  1 Raw_Read_Error_Rate     0x000f   115   100   006    Pre-fail
  3 Spin_Up_Time            0x0003   095   095   000    Pre-fail
  5 Reallocated_Sector_Ct   0x0033   100   100   036    Pre-fail
....
10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail
....

Видно, что параметры атрибутов вполне укладываются в рамки допустимых.

Для примера, напишем скрипт, который будет с определённой периодичностью проверять состояние S.M.A.R.T всех имеющихся дисков SATA по списку параметров контролируемых атрибутов и сигнализировать отправлением письма на электронный почтовый ящик об обнаруженных проблемах.
Для простоты, обнаружение первой же неисправности примем за повод поднять панику - сразу же будем отсылать письмо.

# mkdir -p /etc/custom/hdd/smart
# touch /etc/custom/hdd/smart/check-smart.sh
# chmod ugo+x /etc/custom/hdd/smart/check-smart.sh

#!/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
HOSTNAME=`cat /etc/hostname`
OBJECTS=`ls /dev | grep -i "^sd[a-z]$"`
DATE=`date +"%Y-%m-%d %H:%M:%S"`
EMAIL=`cat /etc/custom/hdd/email`

# Перебираем в цикле все обнаруженные дисковые устройства по наименованию
for OBJECT in ${OBJECTS}; do

  HEALTH=""
  ATTRIBUTES=""
  PROBLEM=""

  # Проводим общий тест средствами S.M.A.R.T
  HEALTH=`smartctl --health /dev/$OBJECT | grep PASSED`
  if [ "$HEALTH" != "" ]
  then
    # Получаем таблицу атрибутов S.M.A.R.T поддерживаемых устройством
    ATTRIBUTES=`smartctl --attributes /dev/$OBJECT | grep Pre-fail`
    # Выбираем для анализа четыре атрибута, обозначенные как критичные
    RRER=`echo $ATTRIBUTES | awk -F Raw_Read_Error_Rate '{print $2}' | awk '{result=$2-$3; print (result)}'`
    SUT=`echo $ATTRIBUTES | awk -F Spin_Up_Time '{print $2}' | awk '{result=$2-$3; print (result)}'`
    RSC=`echo $ATTRIBUTES | awk -F Reallocated_Sector_Ct '{print $2}' | awk '{result=$2-$3; print (result)}'`
    SRC=`echo $ATTRIBUTES | awk -F Spin_Retry_Count '{print $2}' | awk '{result=$2-$3; print (result)}'`

    # Проверяем, не выходят ли значения за пределы рекомендованных
    if [ $RRER -lt 0 ] || [ $SUT -lt 0 ] || [ $RSC -lt 0 ] || [ $SRC -lt 0 ]
    then
      PROBLEM="wrong-attributes-test"
    fi

  else
    PROBLEM="wrong-health-test"
  fi

  # Отрабатываем сообщения о найденных проблемах
  if [ "$PROBLEM" = "wrong-health-test" ] || [ "$PROBLEM" = "wrong-attributes-test" ]
  then
    # Извлекаем серийный номер тестируемого устройства
    SERIAL=`smartctl --info /dev/$OBJECT | grep -i "Serial Number" | awk '{print $3}'`
    # Посылаем письмо с уведомлением о проблеме на электронный почтовый ящик
    echo -e "Subject: Warning S.M.A.R.T: $HOSTNAME:/dev/$OBJECT\n$DATE. Host: $HOSTNAME. Device: /dev/$OBJECT. SN: $SERIAL. Have problem with checking S.M.A.R.T: $PROBLEM" | sendmail -F$HOSTNAME $EMAIL
  fi

done

exit 0

Периодический запуск скрипта реализуем с помощью утилиты cron.
Думаю, что промежуток между запусками в пять часов будет оптимальным; достаточно часто и, с учётом того, что число нечётно по отношению к количеству часов в сутках, скрипт будет отрабатывать по скользящему графику.

# cat /etc/crontab

....
0  */5  * * *   root    /etc/custom/hdd/smart/check-smart.sh &
....

Приведённый выше скрипт тестирования не претендует на звание рабочего, скорее - это демонстрация. Технология S.M.A.R.T имеет весьма богатые возможности как для прямого интерактивного тестирования оборудования, так и для изменения параметров до удобных нам.
С помощью анализа состояния параметров списка атрибутов можно многое узнать о дисковых устройствах; для примера, привожу расшифровку часто применяемых атрибутов и их значений:

Критичные атрибуты:

Raw_Read_Error_Rate - частота ошибок при чтении данных с дискового устройства, происхождение которых обусловлено аппаратной частью устройства. Низкое нормализованное значение параметра указывает на неисправность поверхности пластин дискового пакета;
Spin_Up_Time - время раскрутки пакета дискового устройства из состояния покоя до рабочей скорости. При расчёте нормализованного значения (Value) практическое время сравнивается с некоторой эталонной величиной, установленной производителем. Не ухудшающееся не максимальное значение при Spin_Up_Retry_Count_Value = max (Raw равном 0) не говорит ни о чем плохом. Отличие времени от эталонного может быть вызвано рядом причин, например, недостаточный уровень напряжения блока питания;
Spin_Up_Retry_Count - число повторных попыток раскрутки дискового устройства до рабочей скорости, в случае если первая попытка была неудачной. Ненулевое значение Raw (соответственно не максимальное Value) свидетельствует о проблемах в механической части устройства;
Seek_Error_Rate - частота ошибок при позиционировании блока головок. Высокое значение Raw свидетельствует о наличии проблем, которыми могут являться повреждение серво-меток, чрезмерное термическое расширение дисковых пластин, механические проблемы в блоке позиционирования и другое. Постоянное высокое значение Value не говорит ни о чем плохом;
Reallocated_Sector_Count - число операций переназначения секторов. S.M.A.R.T в современных дисковых устройствах способен произвести анализ сектора на стабильность работы "на лету" и в случае признания его сбойным, произвести его переназначение.

Некритичные атрибуты:

Start_Stop_Count - полное число запусков/остановок шпинделя. Гарантировано мотор дискового устройства способен перенести лишь определённое число включений/выключений. Это значение выбирается в качестве Treshold. Первые модели дисков со скоростью вращения 7200 оборотов/мин имели ненадёжный двигатель, могли перенести лишь небольшое их число и быстро выходили из строя;
Power_On_Hours - число часов проведённых дисковым устройством во включённом состоянии. В качестве порогового значения для него выбирается паспортное время наработки на отказ (MTBF). Обычно величина MTBF огромна, и маловероятно, что этот параметр достигнет критического порога. Но даже в этом случае выход из строя устройства совершенно не обязателен;
Drive_Power_Cycle_Count - количество полных циклов включения-выключения дискового устройства. По этому и предыдущему атрибуту можно оценить, например, сколько использовалось устройство до покупки;
Temperatue - показания встроенного температурного датчика. Температура имеет огромное влияние на срок службы дискового устройства (даже если она находится в допустимых пределах). Вернее имеет влияние не на срок службы устройства, а на частоту возникновения некоторых типов ошибок, которые влияют на срок службы;
Current_Pending_Sector_Count - число секторов, являющихся кандидатами на замену. Они не были ещё определены как плохие, но считывание их отличается от чтения стабильного сектора, так называемые подозрительные или нестабильные сектора;
Uncorrectable_Sector_Count - число ошибок при обращении к сектору, которые не были скорректированы. Возможными причинами возникновения могут быть сбои механики дискового устройства или порча поверхности дисковых пластин;
UDMA_CRC_Error_Rate - число ошибок, возникающих при передаче данных по внешнему интерфейсу. Могут быть вызваны некачественными кабелями, нештатными режимами работы;
Write_Error_Rate - показывает частоту ошибок происходящих при записи на дисковое устройство. Может служить показателем качества поверхности и механики устройства;
Seek_Time_Perfomance - время в миллисекундах, которое требуется считывающей головке для позиционирования. Низкое нормализованное значение параметра может означать дефект механики.

Переход к настройке прослойки абстракции в области именования устройств файловой системы.


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )