Diagnosis
Одним из “железных” компонентов, нуждающихся в постоянном мониторинге, являются жесткие диски. Специально для этой цели была разработана система диагностики S.M.A.R.T., описание коей можно почитать на Википедии на русском, на английском. Технология не является панацеей от всех бед, что подтверждаются репортами о выходе из строя вполне здоровых по показаниям S.M.A.R.T. жестких дисков. По этому поводу написана очень хорошая статья, настоятельно рекомендуемая к прочтению заинтересованным лицам: Отчего умирают винчестеры: небольшой обзор причин выхода из строя жёстких дисков. На самом деле обзор большой и качественный, с графиками и опорой на статистику гугла.
По этой причине, а также из соображений бережливого отношения к данным на дисках, целесообразно произвести тонкую настройку S.M.A.R.T.. Сразу хочу оговориться, что представленное решение подойдет далеко не всем; я разбираю случай маленького, убогонького, незначительного домашнего сервачка с одним жестким диском. Очевидно, что “production” системам потребуется совершенно другая конфигурация.
Theory
Для начала необходимый теорбазис.
Attributes
S.M.A.R.T. сообщает состояние устройства в виде атрибутов. Атрибут может иметь необработанное значение (Raw) и интерпретированное (Normalized). Чаще всего, Raw значение соответствует реальной физической характеристике диска (температуры, количеству проработанных часов, etc). Конвертирование Raw->Normalized осуществляется контроллером жесткого диска, поэтому пользовательские программы не могут влиять на этот процесс.
Помимо текущего значения, каждый атрибут имеет еще два: Threshold и Worst. Текущее значение Normalized атрибутов сравнивается со значениями Threshold и Worst. Значение Worst переписывается на текущее, если последнее больше его.
Помимо этого, атрибуты бывают двух типов: Pre_fail и Old_age. Если Normalized значение Pre_fail атрибута ниже или равно значению Threshold, smart сообщает о данном диске как об имеющем тяжкий недуг.
Помимо этого, не все атрибуты могут обновляться в реальном времени. Так, некоторым из них, например Offline_Uncorrectable или Multi_Zone_Error_Rate, требуется Offline Data Collection.
Testing
Существует несколько видов тестирования:
Online Test(data collection): просто собирает данные и сверяет текущее значение атрибута иThreshold, никаких реальных тестов не производится;Immediate Offline Test(data collection): “продвинутая” версия предыдущего теста, обновляются также атрибуты, помеченные какUPDATED: Offline(в противоположностьAlways).Short Self Test(примерно десять минут), проверяет “electrical and mechanical performance as well as the read performance of the disk.”Extended Self Test(час и больше), “продвинутая” версия предыдущего теста.
Для smart-мониторинга дисков в Линуксе используется пакет smartmontools, о котором, собственно, и пойдет речь.
smartmontools
Installation
Установка тривиальна:
aptitude install smartmontools
Непосредственно для выполнения есть две утилиты: smartctl и smartd. Первая служит для получения информации о текущем состоянии HDD и запуска различных тестов, вторая — демон, который просыпается через определенный интервал времени и, в зависимости от настроек себя, производит некоторые действия, гадит в сислог и опционально запускает helper-скрипты, например, для посылки почтовых уведомлений о каких-либо неполадках. Обе исчерпывающе описаны в соответствующих манах.
Ради интереса, посмотрим информацию о подопытном SATA-диске Seagate 7200.10 ES (/dev/sda в моем случае):
betelgeuse-6 : xio [~] $ sudo smartctl -i /dev/sda smartctl version 5.38 [i686-pc-linux-gnu] Copyright (C) 2002-8 Bruce Allen Home page is http://smartmontools.sourceforge.net/ === START OF INFORMATION SECTION === Model Family: Seagate Barracuda ES Device Model: ST3250820NS Serial Number: 9QE7AEBL Firmware Version: 3.AEK User Capacity: 250 058 268 160 bytes Device is: In smartctl database [for details use: -P show] ATA Version is: 7 ATA Standard is: Exact ATA specification draft version not indicated Local Time is: Thu Aug 7 22:08:22 2008 MSD SMART support is: Available - device has SMART capability. SMART support is: Enabled
Более подробный вывод дает smartcl -a /dev/sda.
smartctl неинтересен с перспективы мониторинга, поэтому займемся конфигурацией демона smartd. Желательно прочитать man smartd и man smartctl секцию -A, --attributes.
Configuration
Сначала нужно раскомментировать 2 строчки в /etc/default/smartmontools:
/etc/default/smartmontools
8 9 10 11 12 | # uncomment to start smartd on system startup start_smartd=yes # uncomment to pass additional options to smartd on startup smartd_opts="--interval=600" |
Первое понятно, а интервал — это количество секунд, через которые будет просыпаться демон и выполнять действия, описанные в /etc/smartd.conf (по умолчанию).
smartd берет свою конфигурацию из файла /etc/smartd.conf, который может быть приведен к следующему виду (again, man smartd.conf):
/etc/smartd.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #
# For 3.5" 250Gb Seagate Barracuda ES ST3250820NS (9QE7AEBL)
#
# -d: use sata to ata translation
# -o: disable automatic offline testing every 4 hour
# -s: perform long self-test twice a month at 0100,
# short self-test weekly at 0200,
# offline data collection every 6 hour.
# Format: T/MM/DD/d/HH
# -H: perform general health status test
# -f: check for failure of any usage attrs
# -t: track changes in both Prefailure and Usage Attributes
# -I: ignore changes in the following attributes:
# * 4: Start_Stop_Count
# * 7: Seek_Error_Rate
# * 9: Power_On_Hours
# * 12: Power_Cycle_Count
# * 190: Airflow_Temperature_Cel
# * 194: Temperature_Celsius
# * 195: Hardware_ECC_Recovered
# -R: when do -t, read raw values, rather than normalized:
# * 1: Raw_Read_Error_Rate
# * 3: Spin_Up_Time
# * 5: Reallocated_Sectors_Ct
# * 199: UDMA_CRC_Error_Count
# * 200: Muli_Zone_Error_Rate
# * 202: TA_Increase_Count
# -l: report increases in the number of Self-Test Log errors, report increases
# in the number of ATA errors
# -C: report nonzero values of the current pending sector count
# -U: report nonzero values of the offline pending sector count
# -m: send a mail to root@localhost if any problem occurs
# -W: log if t(C)>=47, log WARN and send a mail if t(C)>=50, don't report diffs
/dev/disk/by-id/ata-ST3250820NS_9QE7AEBL \
-d sat \
-o off \
-s (L/../(01 |
Эта секция описывает уже упомянутый хард /dev/sda, в файле их может быть несколько. Как показала практика, удобнее указывать не непосредственно kernel-имя диска в /dev (которое может меняться в зависимости от использования определенных портов, если не указано иное в конфигах udev), а на ссылку в /dev/disk/by-id, определяющую диск непосредственно вне зависимости от конфигурации подключения. Из комментариев должно быть понятно, что при очередном просыпании каждые десять минут, smartd:
- [-d] Обратится к
/dev/sda, используяsata to ata translation(впрочем, обычноеataу меня также заработало); - [-o] Отключит самостоятельное сканирование жестким диском самого себя каждые 4 часа, т.к. этим функционалом мы рулим через
smartd(см. -s); - [-s] Если текущее время:
- Первое или 15 число месяца, 01:00: выполнит
Long Self-Test - Понедельник, 02:00: выполнит
Short Self-Test - Прошло 6 часов с момента предыдущего
Offline Data Collection: выполнит последнее еще раз - [-H] Проверит общее состояние диска (здоров/болен/мертв);
- [-f] Помимо
Pre_failатрибутов, также проверитOld_ageатрибуты; - [-t] Не только “проверит” атрибут, но также обнаружит изменение его значения между двумя проверками;
- [-I] При сравнении значений -t, проигнорирует нерелятивные атрибуты, такие как количество отработанных часов, счетчик up/down циклов и т.д., а также те, которые изменяются непредсказуемым образом и чье
Rawзначение не имеет смысла (например,Hardware_ECC_Recovered). Также проигнорирует изменения температуры (отслеживаются только пороговые значения, см. -W) - [-l] Сообщит о возросшем счетчике ошибок в логах
ATA Error LogиSelf-Tests(см.опцию -s). - [-C] Сообщит, если текущее число pending секторов больше нуля. Выдержка из мана: “… A pending sector is a disk sector (containing 512 bytes of your data) which the device would like to mark as “bad” and reallocate. Typically this is because your computer tried to read that sector, and the read failed because the data on it has been corrupted and has inconsistent Error Checking and Correction (ECC) codes.”;
- [-U] Сообщит, если текущее число offline uncorrectable секторов больше нуля. Выдержка из мана: “… An offline uncorrectable sector is a disk sector which was not readable during an off-line scan or a self-test. This is important to know, because if you have data stored in this disk sector, and you need to read it, the read will fail.”;
- [-m] Отправит письмо в случае обнаружения ошибки
- [-W] Отправит сообщение в сислог с уровнем
LOG_INFO, если текущая температура достигла 47 градусов, отправит сообщение в сислог с уровнемLOG_CRIT, а также отправит письму(см. -m), если текущая температура достигла 50 градусов;
Обратите внимание! Некоторые виды тестов могут замедлять производительность подсистемы ввода-вывода, поэтому настоятельно рекомендуется эмпирически подобрать корректную периодичность тестирования, когда проверки происходили бы в часы наименьшей загрузки сервера и чередовались бы через разумные интервалы времени.
Везде, где говорится “проверит” имеется в виду “сравнит текущее Normalized значение атрибута с его Threshold значением.”
Running!
Пускаем как обычную службу:
/etc/init.d/smartmontools start
В сислоге окажется что-то пободное:
Aug 7 22:59:39 betelgeuse smartd[29950]: smartd version 5.38 [i686-pc-linux-gnu] Copyright (C) 2002-8 Bruce Allen Aug 7 22:59:39 betelgeuse smartd[29950]: Home page is http://smartmontools.sourceforge.net/ Aug 7 22:59:39 betelgeuse smartd[29950]: Opened configuration file /etc/smartd.conf Aug 7 22:59:39 betelgeuse smartd[29950]: Configuration file /etc/smartd.conf parsed. Aug 7 22:59:39 betelgeuse smartd[29950]: Device: /dev/disk/by-id/ata-ST3250820NS_9QE7AEBL, opened Aug 7 22:59:39 betelgeuse smartd[29950]: Device: /dev/disk/by-id/ata-ST3250820NS_9QE7AEBL, found in smartd database. Aug 7 22:59:39 betelgeuse smartd[29950]: Device: /dev/disk/by-id/ata-ST3250820NS_9QE7AEBL, disabled SMART Automatic Offline Testing. Aug 7 22:59:39 betelgeuse smartd[29950]: Device: /dev/disk/by-id/ata-ST3250820NS_9QE7AEBL, is SMART capable. Adding to “monitor” list. F Aug 7 22:59:39 betelgeuse smartd[29950]: Monitoring 1 ATA and 0 SCSI devices Aug 7 22:59:39 betelgeuse smartd[29950]: Device: /dev/disk/by-id/ata-ST3250820NS_9QE7AEBL, initial Temperature is 34 Celsius Aug 7 22:59:39 betelgeuse smartd[29952]: smartd has fork()ed into background mode. New PID=29952. Aug 7 22:59:39 betelgeuse smartd[29952]: file /var/run/smartd.pid written containing PID 29952
That’s it! Теперь диск будет регулярно мониториться, а в случае любых ошибок будет сделана запись в журнале и выслано письмо руту локалхоста. Сислог также обогатится записями о проведении различных тестов и репортами о превышении пороговой температуры устройства.
Comments 2
Большое спасибо за ссылку - поставил на вас тоже, т.к. материал выгодно дополняет мой обзор.
Posted 18 Авг 2008 at 1:40 пп ¶Всегда пожалуйста!
Posted 18 Авг 2008 at 1:49 пп ¶