Учимся работать со 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, или гадание на блинах.»