Так уж вышло, что диски имеют свойство умирать. Но часто выяснить причину смерти накопителя бывает очень легко. Диски современных накопителей вращаются со скоростью в несколько тысяч оборотов в минуту. При этом расстояние от головки до поверхности диска составляет доли микрона. Часто диски круглосуточно работают в условиях повышенной загрязнённости или при неблагоприятном температурном режиме, в системах с очень высокой нагрузкой или не очень хорошим обслуживанием. Опытные пользователи хорошо знакомы с симптомами умирающего накопителя: система начинает работать нестабильно, зависает, ядро сообщает о каких-то трудно объяснимых ошибках. В большинстве случаев на восстановление утерянных данных может уйти весь день, при условии, конечно, что у вас есть резервные копии. Хотя, даже если у вас и есть копии всех важных данных, внезапный отказ жёсткого диска может показаться вам катастрофой.
Много пользователей и даже системных администраторов понятия не имеют что такоеSMART (Self-Monitoring, Analysis and Reporting Technology), которая, тем не менее, присутствует во всех современных жёстких дисках. Диски со SMART самостоятельно наблюдают за своей жизнедеятельностью и работоспособностью. Такие диски,в случае возникновения ошибок, сами могут определить, что что-то работает не так. Такая возможность в большинстве случаев поможет предотвратить сценарий «внезапного» отказа жёсткого диска. Практически все реализации SMART позволяют пользователям запускать самотестирование накопителей и просматривать значения параметров производительности и надёжности.
По профессии автор статьи является физиком. Его исследовательская группа использует в работе кластер из 300 компьютеров и 600 жёстких дисков, хранящих более 50 терабайт информации. Интересоваться SMART он начал несколько лет назад, когда начал думать над тем, каким образом можно уменьшить время простоя и повысить эффективность работы кластера. Для этих целей автор уже около года пользуется набором smartmontools, потомком пакета smartsuite.
В этой статье рассказывается о том, как при помощи утилиты smartctl и сервера smartdнаблюдать за состоянием дисков в системе. Со вы сможете загрузить необходимые файлы и инструкции по установке. Обязательно ознакомьтесь с файломWARNINGS, содержащем перечень проблемных контроллеров/дисков, с которыми утилиты могут работать некорректно. Дополнительную документацию можно найти в man-страницах программ, а также на странице проекта.
Smartmontools имеются в репозитариях Slackware, Debian, SuSE, Mandrake, Gentoo, Conectiva и некоторых других Linux-дистрибутивах, так что скорее всего, вы без проблем сможете установить программы в свою систему традиционным для вашей системы методом.
Чтобы понять принципы работы smartmontools, полезно будет ознакомиться с историей создания и развития SMART. Первая спецификация SMART (SFF-8035i) была разработана группой производителей жёстких дисков. Во второй редакции (апрель 1996-го) диски хранили во внутреннем списке до 30-ти атрибутов, отражавших состояния различных параметров производительности и надёжности, таких как количество ошибок чтения и поиска. Каждый атрибут имеет однобайтовое нормализованное значение в диапазоне от 1 до 253 и соответствующий однобайтовое пороговое значение. Если одно или более нормализованных значений атрибутов меньше или равны соответствующим пороговым, значит, вероятно, в ближайшие 24 часа жёсткий диск выйдет из строя или же истекает срок его службы, заявленный производителем. Значения некоторых атрибутов обновляются в процессе работы диска, а некоторые — лишь в процессе оффлайн-тестов, которые приостанавливают на время операции чтения вывода, и по этой причине запускаются при помощи специальных команд. Позже, в 1995 году, части спецификации SFF-8035i были включены в стандарт ATA-3.
Начиная со стандарта ATA-4 введено требование удалить внутреннюю таблицу атрибутов. Вместо неё жёсткий диск должен отвечать на запросы о его состоянии ответами OK или NOT OK. Отрицательный ответ на запрос означает, что микропрограмма жёсткого диска определила, что тот скоро выйдет из строя. В стандарте ATA-5 было добавлено ведение протокола ошибок, а также набор команд для запуска самотестирования диска. Для того, чтобы воспользоваться всеми описанными возможностями, вам нужно знать, как при помощиsmartmontools получать значения атрибутов SMART (большинство жёстких дисков имеют обратную совместимость с SFF-8035i), узнавать состояние диска, запускать самотестирование и анализировать протокол его работы (результаты последних 21 теста) и анализировать протокол ATA-ошибок жёсткого диска (информация о пяти последних ошибках). Эта статья ориентирована на работу с ATA-дисками, а информацию о работе со SCSI-накопителями вы можете получить на странице проекта smartmontools.
Первым шагом запустите команду
smartctl -a /dev/hda
заменив /dev/hda на путь к файлу устройства вашего диска. Если SMART для вашего накопителя не включён, вам необходимо сначала включить его при помощи команды
smartctl -s on /dev/hda
В приведённой ниже части вывода команды smartctl -a приведена информация о модели и прошивке жесткого диска, в этом примере — IBM/Hitachi GXP-180. Smartmontools имеет собственную базу данных типов дисков. Если модель вашего накопителя присутствует в БД, то вы сможете правильно интерпретировать значения атрибутов SMART.
Device Model: IC35L120AVV207-0
Serial Number: VNVD02G4G3R72G
Firmware Version: V24OA63A
Device is: In smartctl database [for details use: -P show]
ATA Version is: 6
ATA Standard is: ATA/ATAPI-6 T13 1410D revision 3a
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
В следующем вывода команды smartctl -Hc /dev/hda отображаются результаты опроса состояния «здоровья» диска. В этом примере показан диск, который успешно прошёл тест. Если в вашем случае первая строка будет содержать результат FAILING — немедленно сделайте резервные копии всех нужных данных! Оставшаяся часть вывода отображает поддерживаемые возможности вашего накопителя, а также примерное время выполнения различных вариантов самотестирования.
SMART overall-health self-assessment test result: PASSED
General SMART Values:
Off-line data collection status: (0x82) Offline data collection activity
was completed without error.
Auto Off-line Data Collection:
Enabled.
Self-test execution status: ( 0) The previous self-test routine
completed without error or no
self-test has ever been run.
Total time to complete off-line
data collection: (2855) seconds.
Offline data collection
capabilities: (0x1b) SMART execute Offline immediate.
Automatic timer ON/OFF support.
Suspend Offline collection upon new
command.
Offline surface scan supported.
Self-test supported.
No Conveyance Self-test supported.
No Selective Self-test supported.
SMART capabilities: (0x0003) Saves SMART data before entering
power-saving mode.
Supports SMART auto save timer.
Error logging capability: (0x01) Error logging supported.
General Purpose Logging supported.
Short self-test routine
recommended polling time: ( 1) minutes.
Extended self-test routine
recommended polling time: ( 48) minutes.
В следующем примере вывода команды smartctl -A /dev/hda показаны значения 30-ти атрибутов SMART (максимум их может быть 255). Имейте ввиду, что атрибуты SMART не являются частью стандарта ATA, хотя многие производители и используют их. Несмотря на то, что SFF-8035i не определяет, как правильно интерпретировать каждый атрибут, многие из них имеют де-факто соответствуют определённым параметрам. В приводимом примере 13-й атрибут (ID #194) отражает внутреннюю температуру диска.
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000b 100 100 060 Pre-fail Always - 0
2 Throughput_Performance 0x0005 155 155 050 Pre-fail Offline - 225
3 Spin_Up_Time 0x0007 097 097 024 Pre-fail Always - 293 (Average 270)
4 Start_Stop_Count 0x0012 100 100 000 Old_age Always - 10
5 Reallocated_Sector_Ct 0x0033 100 100 005 Pre-fail Always - 0
7 Seek_Error_Rate 0x000b 100 100 067 Pre-fail Always - 0
8 Seek_Time_Performance 0x0005 125 125 020 Pre-fail Offline - 36
9 Power_On_Hours 0x0012 100 100 000 Old_age Always - 3548
10 Spin_Retry_Count 0x0013 100 100 060 Pre-fail Always - 0
12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 10
192 Power-Off_Retract_Count 0x0032 100 100 050 Old_age Always - 158
193 Load_Cycle_Count 0x0012 100 100 050 Old_age Always - 158
194 Temperature_Celsius 0x0002 189 189 000 Old_age Always - 29 (Lifetime Min/Max 23/33)
196 Reallocated_Event_Count 0x0032 100 100 000 Old_age Always - 0
197 Current_Pending_Sector 0x0022 100 100 000 Old_age Always - 0
198 Offline_Uncorrectable 0x0008 100 100 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x000a 200 200 000 Old_age Always - 0
Исследования показали, что снижение рабочей температуры диска всего на 5 градусов Цельсия существенно уменьшают количество возникающих ошибок в его работе. Таким образом, вы можете достаточно простым способом повысить надёжность вашего накопителя, установив для него дополнительный вентилятор.
Каждый Атрибут имеет шестибайтовое значение (RAW_VALUE) и однобайтовое нормализованное значение (VALUE). В нашем примере с параметром температуры мы видим три значения RAW_VALUE: текущую температуру (29), рекомендованную минимальную (23) и рекомендованную максимальную (33). Формат данных RAW_VALUE не определяется никакими стандартами и каждый производитель использует какие-то свои стандарты. Для того, чтобы отслеживать надёжность диска, его прошивка конвертирует raw-значения атрибутов в нормализованные, лежащие в пределах от 1 до 253. Если нормализованное значение меньше или равно пороговому (THRESH), то это сигнализирует об ошибке, что будет отображено в столбце WHEN_FAILED. В приведённом примере эта колонка пуста, поскольку значения всех атрибутов в норме. Также в таблице отображено наименьшее нормализованное значение; оно устанавливается в момент включения в диске SMART. Столбец TYPE показывает, как нужно трактовать значение атрибута, имеющего ошибочное состояние: Old_age — время жизни устройства достигло предела, определённого производителем; Pre-fail — ожидается выход устройства из строя. Например, время работы диска (ID #3) является Pre-fail атрибутом. Если такой атрибут будет иметь значение FAIL, то следует ожидать выхода устройства из строя в течение 24 часов.
Имена атрибутов и их трактовка не определены никакими стандартами. Разные производители используют одни и те же ID атрибутов для различных целей. По этой причине в smartctl предусмотрена возможность переопределять трактовку значений атрибутов при помощи опции -v. Обратитесь к man-странице smartctl за дополнительной информацией. Например, некоторые диски используют 9-й атрибут для хранения времени, в течение которого устройство включено. При помощи опции smartctl -v 9,minutes вы можете настроить корректную интерпретацию значения этого атрибута. Если модель вашего диска присутствует в базе данных smartmontools, то подобные опции устанавливаются автоматически.
При помощи команды smartctl -l error /dev/hda можно просмотреть протокол ошибок диска. Если ошибки отсутствуют, то, естественно, протокол ошибок будет пустым. Обычно волноваться стоит лишь в том случае, когда количество ошибок в протоколе будет значительным, поскольку часто возникают случайные, незначительные ошибки в работе, которые не представляют особой серьёзности. Если вам уж очень хочется посмотреть, на что похож протокол, содержащий ошибки, вы можете взглянуть на примеры, представленные на веб-странице smartmontools.
Ниже представлен вывод команды smartctl -l selftest /dev/hda, запускающей механизмы самотестирования диска. В примере показаны результаты двух типов тестирования: короткого и длинного (диски стандарта ATA-6/7 могут иметь ещё два других типа встроенных тестов). По отдельности короткий и длинный тесты могут быть запущены командами smartctl -t short /dev/hda и smartctl -t long /dev/hda соответственно. Выполнение этих тестов не затрагивает содержащиеся на диске данные, поэтому эти тесты можно выполнять на работающей системе. Обычно короткие тесты длятся не более минуты-двух, а длинные — около часа. В кластере, который обслуживает автор статьи, длинное самотестирование автоматически запускается по расписанию в воскресенье утром. В примере ниже показан вывод, когда самотестирование прошло без ошибок. В колонкеLifeTime отображается время, относительно момента включения питания диска, когда был запущен тест. Если в результате самотестирования была обнаружена ошибка, то в колонкеLBA_of_first_error будет отображён логический адрес блока, в котором обнаружена ошибка. Если тест не будет проведён до конца в связи с ошибкой, то в колонке Remainingбудет отображено количество процентов, оставшееся до завершения. Если у вас есть подозрения, что что-то не так с вашим диском, автор настоятельно рекомендует запустить длинное самотестирование, которое поможет выявить потенциальные проблемы.
SMART Self-test log, version number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Extended off-line Completed 00% 3525 -
# 2 Extended off-line Completed 00% 3357 -
# 3 Short off-line Completed 00% 3059 -
При помощи команды smartctl -t offline можно запустить оффлайн-тестирование. Такие тесты появились ещё со времён стандарта SFF-8035i и обновляют значения тех атрибутов, которые не обновляются в процессе нормальной работы диска (см. столбец UPDATED). Некоторые диски поддерживают автоматическое оффлайн-тестирование, выполняющееся каждые несколько часов после его включения командой smartctl -o on.
SMART предоставляет механизм мониторинга параметров производительности диска. Однако есть существенная проблема, заключающаяся в том, что не существует механизма, с помощью которого можно было бы напрямую уведомлять операционную систему о возникающих проблемах. А поскольку SMART-мониторинг обычно не настраивается по умолчанию, то многие явные проблемы не обнаруживаются на ранних этапах, что зачастую приводит к плачевным последствиям. Конечно же, вы можете регулярно самостоятельно вручную отслеживать состояние дисков при помощи smartctl, однако это довольно нудное и утомительное занятие.
В пакете smartmontools имеется демон smartd, который умеет выполнять всю рутину по регулярной проверке состояния дисков. Этот демон отслеживает SMART-данные дисков и обнаруживает ошибки. smartd может быть сконфигурирован таким образом, чтобы запускать определённые сценарии оболочки, а также отсылать уведомления на e-mail администраторам в случае обнаружения ошибок. По умолчанию, когда smartd запускается, он регистрирует диски, находящиеся в системе и затем опрашивает SMART дисков каждые 30 минут на предмет ошибок в значениях атрибутов, состояний, результатов самотестирования или увеличения количества ATA-ошибок. По умолчанию все найденные ошибки протоколируются в /var/log/messages через syslog.
Управлять настройкой smartd можно при помощи файла конфигурации /etc/smartd.conf. Содержимое этого файла считывается smartd в момент его запуска. Каждая строка содержит директивы, относящиеся к одному диску. Конфигурационные файлы хостов кластера, который обслуживает автор статьи, выглядят так:
# /etc/smartd.conf config file
/dev/hda -S on -o on -a -I 194 -m sense@phys.uwm.edu
/dev/hdc -S on -o on -a -I 194 -m sense@phys.uwm.edu
В первом поле определяется путь к устройству. Директива -o on включает автоматический запуск оффлайн-тестов, а директива -S on включает функцию автоматического сохранения значений атрибутов. Директива -m совместно с e-mail адресом указывает smartd адрес для отсылки уведомлений о найденных ошибках. Директива -a заставляет smartd наблюдать за всеми доступными SMART-параметрами дисков. В приведённом примере конфигурацииsmartd будет протоколировать все изменения нормализованных значений атрибутов. Директива -I 194 указывает smartd игнорировать изменения значения атрибута #194, поскольку температура жёсткого диска довольно часто изменяется, а наличие в протоколе кучи сообщений об этом лишь будет мешать.
Обычно smartd запускается при помощи традиционного UNIX-механизма init. Например, вRedHat для запуска и останова smartd используются команды /etc/rc.d/init.d/smartd start и /etc/rc.d/init.d/smartd stop.
Больше информации о работе smartd вы можете получить в его man-странице (man smartd), а краткую информацию по использованию — при помощи команд smartd -D иsmartd -h. Например, при помощи опции -M test можно инициировать отправку тестового e-mail сообщения, чтобы убедиться в том, что оно корректно будет доставлено получателю. Различные опции позволяют гибко управлять smartd. Например, можно включить наблюдение за изменением значений raw-атрибутов.
Что делать, если при работе диска стали проявляться проблемы? Что делать, если результаты самотестирования сообщают об ошибке или SMART-статус жизненно-важных параметров диска находится в ошибочном состоянии? Начните с того, что как можно быстрее переместите все важные данные на другую систему. Затем запустите расширенное самотестирование диска и посмотрите, возникают ли ошибки на тех же самых блоках. Если это так, значит с диском творится что-то неладное. Если SMART сообщает вам об ошибках, но диск ещё находится на гарантии, вам должны без проблем его заменить. Если диск не может выполнить самотестирование, можно попробовать поискать специальное ПО, иногда предоставляемое производителями, например, PowerMax от Maxtor или Drive Fitness Testот IBM. Иногда такие программы могут помочь предотвратить потерю данных за счёт блокирования повреждённых блоков. А иногда при помощи них можно получить специальный код, который поможет вам получить замену плохого диска.
В этой статье рассмотрены лишь основы работы со smartmontools. Если вам необходимо больше информации, вы всегда можете обратиться к man-страницам, веб-сайту проекта или же задать вопрос в список рассылки. Не забывайте, что использование smartmontools не избавляет вас от необходимости делать резервные копии данных. SMART не может предотвратить все возможные сбои в работе жёстких дисков, однако часто даёт ключ к тому, что с вашим диском происходит что-то нехорошее, а это, в свою очередь, поможет вам повысить стабильность работы вашей системы.
Разработчики портировали smartmontools на FreeBSD, Darwin и Solaris, а также добавили некоторые расширения, позволяющие, например, наблюдать за дисками, находящимися за RAID-контроллером. Если вы желаете принять участие в разработке, просто напишите об этом в списке рассылки smartmontools. Особенно полезными для разработчиков будут данные о дисках, которых ещё нет в базе данных smartmontools.
По мотивам