Учимся работать со SMART, или гадание на блинах.

Думаю все более-менее продвинутые пользователи ПК знают что такое SMART или по крайней мере хоть раз о нём слышали.
Вырезка из википедии:
S.M.A.R.T. (от англ. self-monitoring, analysis and reporting technology — технология самоконтроля, анализа и отчётности) — технология оценки состояния жёсткого диска встроенной аппаратурой самодиагностики, а также механизм предсказания времени выхода его из строя.
Так что попытками предсказания смерти жёстких дисков мы сегодня и будем учиться.

Я, уже достаточно давно, для работы со SMART использую утилиту smartmontools, она работает и под Linux и под BSD и под Windows, под MacOS и Solaris. Т.к. у меня Gentoo, установка крайне проста:
korp # emerge smartmontools
У нас установится утилита smartctl, для работы со SMART и демон smartd, который можно будет настроить для автоматического мониторинга ошибок дисков.

Первым делом нам необходимо проверить — поддерживает ли наш HDD SMART (ну всякое бывает…)

korp # smartctl -i /dev/sdb

В ответ, помимо данных о диске мы получаем: SMART support is: Available — device has SMART capability.
Далее нам необходимо включить (если при проверке поддержки SMART мы получили — SMART support is: Disabled)

korp # smartctl -s on /dev/sdb

В ответ получаем — SMART Enabled.
Теперь проверим, были ли какие-либо ошибки у нашего HDD за время его жизни:

korp # smartctl -l error /dev/sdb

мой хард уже порядком изношен и требует замены (я специально стал приводить примеры именно на нём) и кишит ошибками (что бы не рвать страницу и мозг читателю, выложил выхлоп отдельно на pastebin.com). Ошибок много, жизнь этого харда была долгой и не лёгкой, по этому — ничего удивительного.
Ну а теперь мы получим полную информацию по этому HDD:

korp # smartctl --all /dev/sdb

Выхлоп опять-таки очень большой, по этому будет так же лежать на pastebin.com. Но здесь мы остановимся немного для того что бы разобраться со SMART Attributes:

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000f   116   090   006    Pre-fail  Always       -       107346388
  3 Spin_Up_Time            0x0003   096   090   000    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0032   100   100   020    Old_age   Always       -       246
  5 Reallocated_Sector_Ct   0x0033   100   100   036    Pre-fail  Always       -       26
  7 Seek_Error_Rate         0x000f   081   060   030    Pre-fail  Always       -       155322321
  9 Power_On_Hours          0x0032   066   066   000    Old_age   Always       -       30396
 10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   020    Old_age   Always       -       294
184 End-to-End_Error        0x0032   100   100   099    Old_age   Always       -       0
187 Reported_Uncorrect      0x0032   001   001   000    Old_age   Always       -       1230
188 Command_Timeout         0x0032   100   098   000    Old_age   Always       -       30065229831
189 High_Fly_Writes         0x003a   001   001   000    Old_age   Always       -       571
190 Airflow_Temperature_Cel 0x0022   064   048   045    Old_age   Always       -       36 (Min/Max 35/40)
194 Temperature_Celsius     0x0022   036   052   000    Old_age   Always       -       36 (0 27 0 0 0)
195 Hardware_ECC_Recovered  0x001a   049   026   000    Old_age   Always       -       107346388
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       11
198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       11
199 UDMA_CRC_Error_Count    0x003e   200   200   000    Old_age   Always       -       0

Cуществует 2 типа атрибутов (TYPE):
Критичные атрибуты: (Pre-fail)
Некритичные атрибуты: (Old_age)
Если VALUE стало меньше THRESH в случае Pre-fail атрибута — существует большая вероятность, что диск вылетит в ближайшие 24 часа.
Если VALUE стало меньше THRESH в случае Old_age атрибута — существует большая вероятность, что диск вылетит т.к. выработан ресурс. А вот когда это случиться — предвидеть не получится, если только вы не видите будущее (но тогда вам и показатели SMART`а в общем то не нужны :)). В общем во всех случаях — это большой повод как минимум — забэкапить всю нужную информацию, и как максимум — заменить жёсткий диск.

Теперь о том, какие есть атрибуты:
Критичные атрибуты:
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 — число операций переназначения секторов. SMART в современных дисках способен произвести анализ сектора на стабильность работы «на лету» и в случае признания его сбойным, произвести его переназначение.

Некритичные атрибуты:
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 — показывает частоту ошибок происходящих при записи на диск. Может служить показателем качества поверхности и механики накопителя.
Данные взяты из статьи SMART — технология внутренней оценки состояния HDD на 3dnews.ru.

Ну а теперь перейдём к демону smartd. Его настройка достаточно проста, нам нужно отредактировать файл:
nano /etc/smartd.conf
и вписать туда наши HDD таким образом:
/dev/sdb -d sat -H -S on -o on -I 194 -m korp@bk.ru
А теперь по пунктам — что есть что:
-d — указывает тип устройства (по-умолчанию установлено — auto, этого достаточно в большинстве случаев).
-H — проверяет показания SMART и если кол-во Prefailure атрибутов меньше или равно минимальному кол-ву — информация записывается в лог.
-S — включает/выключает автосохранение атрибутов (может принимать значение on или off).
-o — включает/выключает автоматические оффлайн тесты (может принимать значение on или off).
-I — игнорировать атрибут ID (в моём примере игнорируется показание Temperature_Celsius).
-m — адрес, куда направлять варнинги, в случае если такие вдруг появляются.
Более подробно о ключах, в офисиальном мане по smartd.conf. По аналогии мы добавляем все наши жёсткие диски для мониторига (лично у меня их аж 6 штук) и можем расслабиться, в случае появления проблем, мы получим соответствующее письмо и уже по обстановке будем действовать дальше.
Остаётся добавить демона в автозагрузку:

korp # rc-update add smartd default

Ну и напоследок, раз уж мы заговорили о тестировании жёстких дисков, оговорюсь о том, как можно просто быстро проверить скорость чтения/записи диска. Для этого нам понадобиться утилита dd, которая идёт «из коробки», и так:

korp # dd if=/dev/sdb1 of=/dev/null bs=16M count=256

О ключах:
bs — указывыаем количество байт, которые будут записаны за раз (грубо говоря — размер куска).
count — сколько кусочков будет скопировано (кусочков, размером которых мы выставили параметром bs).
т.е. у меня получается 256 кусочков по 16 мегабайт каждый. В итоге мы получаем строку: 4294967296 bytes (4.3 GB) copied, 39.1927 s, 110 MB/s и видим, что скорость чтения с диска у нас — 110 MB/s. К сожалению так же просто проверить скорость записи не получится, /dev/(u)random даёт слишком низкую скорость. По этому остаётся только протестировать на скорость чтения какой то другой HDD, если он имеется в системе, а потом копирование данных с одного диска на другой — посмотреть скорость копирования.

korp # dd if=/dev/sda3 of=/dev/null bs=16M count=256
4294967296 bytes (4.3 GB) copied, 22.6584 s, 190 MB/s

У меня, /dev/sda3 это рутовая партиция на системном SSD. Создаём тестовый файлик для копирования.

korp # dd if=/dev/urandom of=/test.dd bs=16M count=256

Копируем

korp # dd if=/test.dd of=/home/share/torrent/test.dd bs=16M count=256
4294967296 bytes (4.3 GB) copied, 38.9417 s, 110 MB/s

И видим, что скорость записи на диск, не уступает скорости чтения с этого же диска (/home/share/torrent/ это смонтированный раздел на диске /dev/sdb1).

Пожалуй на этом всё. Теперь у нас под рукой есть достаточное кол-во средств для тестирования жёстких дисков и выявления неисправностей.

Один ответ на “Учимся работать со SMART, или гадание на блинах.”

Добавить комментарий