S.M.A.R.T.
вбудована самодіагностика диска, що попереджає про відмову

Фото: miniformat65 / Pixabay 
Фото: ahmetyuksek / Pixabay
Застосуйте поняття до рішення
Застосуйте «Що таке S.M.A.R.T.?» до конкретного рішення. Ми можемо пов'язати поняття із системою, яку ви створюєте або купуєте. Ноутбук, принтер, вхід у систему і поштова скринька — швидко, зрозумілою мовою і без зверхності.
Перевірте припущення за терміном
Використайте пояснення та пов'язані роботи, щоб сформулювати запитання для проєкту. Ми можемо перевірити припущення разом до вибору інструмента. Заснувала відділ технічної підтримки — 10,000 клієнтів обслуговує відділ підтримки, створений із нуля
Що це таке
S.M.A.R.T. розшифровується як Self-Monitoring, Analysis and Reporting Technology, тобто технологія самоконтролю, аналізу та звітування; smartmontools і довідка проєкту пишуть її без крапок, як SMART. Це запис, який диск веде про себе у власній мікропрограмі, поки працює: лічильники подій, показники його стану й результати тестів, які він виконав. Операційна система може будь-коли попросити цей запис у накопичувача. smartmontools, набір інструментів, на який спирається ця сторінка, пише, що технологію вбудовано в більшість сучасних дисків ATA/SATA, SCSI/SAS і NVMe. Пакет містить дві програми: smartctl, яка опитує й тестує один диск, коли ви її запускаєте, і smartd, демон, що чергує у фоні.
Що диск може повідомити, залежить від набору команд, яким він говорить. Диск ATA або SATA веде таблицю пронумерованих атрибутів від 1 до 253, кожен зі своєю назвою; атрибут 12, наприклад, рахує, скільки разів диск вмикали. Кожен атрибут має сире значення (raw value), тобто сам лічильник або вимір, і нормалізоване значення від 1 до 254, яке мікропрограма виробника обчислює із сирого за власною формулою. Поруч стоять найгірше нормалізоване значення, яке диск зафіксував за все своє життя, і поріг, який визначив виробник. Атрибут, чиє нормалізоване значення опустилося до порогу або нижче, вважається таким, що відмовив.
Кожен атрибут належить до одного з двох типів. Атрибут типу pre-failure на порозі або нижче каже, що диск ось-ось відмовить. Атрибут типу old age, який ще називають атрибутом використання, на порозі або нижче каже, що диск дійшов кінця свого життя через звичайне зношування. Довідка smartctl наголошує, що позначка Pre-fail сама собою не привід хвилюватися: такого змісту вона набуває лише тоді, коли значення перетнуло поріг.
Над таблицею стоїть один вердикт, стан здоров’я (health status). Диск ATA відповідає на команду SMART RETURN STATUS «пройдено» або «не пройдено». Диск SCSI або SAS повідомляє про стан через сторінку журналу винятків і свої sense-дані, а накопичувач NVMe встановлює біти в байті Critical Warning свого журналу SMART/Health Information. Диски також уміють тестувати себе на запит: короткий тест, який зазвичай триває менше десяти хвилин, довгий, що займає від десятків хвилин до кількох годин, і на дисках ATA тест conveyance, який шукає пошкодження від транспортування. Результат кожного тесту потрапляє в журнал самотестів на диску.
Чому це важливо
Диск бачить власні негаразди раніше за будь-кого. Він знає, які сектори вже не читаються, скільки разів його вмикали і наскільки він гарячий. S.M.A.R.T. — це канал, яким ці знання доходять до людей, відповідальних за дані, і smartmontools описує користь стримано: у багатьох випадках, пише проєкт, інструменти заздалегідь попереджають про погіршення стану диска та його відмову. Багато випадків — це не всі, і значна частина цієї сторінки саме про цю різницю.
Найсильніший сигнал — вердикт. Коли smartctl повідомляє стан здоров’я «не пройдено», довідка каже, що диск або вже відмовив, або очікує відмови протягом найближчих 24 годин, і радить читачеві зібрати повний звіт і без зволікань перенести дані в безпечне місце. Слабші сигнали з’являються раніше. Сектор, що очікує (pending sector), — це сектор, який диск хоче позначити як поганий і замінити резервним, зазвичай тому, що читання з нього не вдалося; ненульова кількість означає, що частину даних на диску вже не прочитати. Диск рахує такі сектори в атрибуті 197, а в атрибуті 198 — сектори, які не вдалося прочитати ні офлайн-скануванню, ні самотесту.
Усе це марне, якщо ніхто не дивиться. smartd вмикає самоконтроль на дисках ATA, типово опитує диски кожні 30 хвилин, повідомляє про помилки й зміни атрибутів у syslog і може надіслати попередження електронною поштою. Він також уміє запускати самотести за розкладом, тож для цієї частини cron-завдання не потрібне. Проєкт старий і досі розвивається: у жовтні 2022 року він відзначив 20-ту річницю свого першого випуску, 30 квітня 2025 року випустив версію 7.5, а 1 червня 2025 року переніс розробку із SourceForge на GitHub. Він працює, серед іншого, на Linux, системах BSD, macOS, Solaris і Windows.
Як це виглядає на практиці
Візьмімо новий сервер із диском SATA на /dev/sda. Три команди дають загальну
картину:
smartctl -i /dev/sda
smartctl -H /dev/sda
smartctl -A /dev/sdaПерша виводить модель, серійний номер і версію мікропрограми, чи підтримує
накопичувач S.M.A.R.T. і чи цю функцію ввімкнено, а також чи є накопичувач у
базі даних дисків smartmontools. Друга виводить вердикт. Третя виводить таблицю
атрибутів: VALUE і WORST містять нормалізовані числа, THRESH — поріг, TYPE
показує Pre-fail або Old_age, RAW_VALUE містить сире число, а WHEN_FAILED
показує FAILING_NOW, In_the_past або риску для атрибута, який ніколи не
відмовляв. Якщо потрібно все одразу, smartctl -x виводить усю інформацію, яку
інструмент може прочитати, з S.M.A.R.T. і не тільки, а таблицю подає у
щільнішому форматі.
Довгий самотест — це ретельніша версія короткого:
smartctl -t long /dev/sda
smartctl -l selftest /dev/sdaЯкщо -C не вмикає режим captive, тест виконується всередині диска, поки
система робить свою роботу. Він може сповільнити накопичувач, інтенсивний обмін
даними з боку операційної системи подовжує його, і одночасно виконується лише
один тест. Довідка додає, що вимкнення посеред тесту не мало б зашкодити, бо
тест або переривається, або продовжується. Друга команда читає журнал
самотестів, коли минув орієнтовний час.
Скрипти мають читати код завершення, а не текст. smartctl складає його з восьми бітів, і власний приклад довідки перевіряє біт 3, який встановлюється, коли диск повідомляє, що відмовляє:
smartctl -q silent -H /dev/sda
smartstat=$(($? & 8))-q silent нічого не виводить, тож код завершення — єдина відповідь. Ненульовий
код не завжди означає, що диск помирає: сам біт 6, наприклад, означає лише, що в
журналі помилок є записи.
Для тривалої роботи smartd читає правила з smartd.conf. Один рядок може
охопити всі диски, які знайде сканування:
DEVICESCAN -a -s (S/../.././02|L/../../6/03) -W 2,40,45 \
-m ops@example.com -M test-a вмикає стандартний набір: стан здоров’я, журнали помилок і самотестів,
атрибути використання, що відмовили, зміни значень атрибутів, а на дисках ATA ще
й лічильники в атрибутах 197 і 198. Шаблон після -s запускає короткий тест
щодня між 02:00 і 03:00 і довгий щосуботи між 03:00 і 04:00. -W 2,40,45
повідомляє про зміну температури на 2 градуси, записує примітку при 40 °C і
надсилає критичне попередження через syslog та електронну пошту при 45 °C. -m
задає одержувача, а -M test надсилає одне тестове повідомлення, коли smartd
запускається. Після редагування killall -HUP smartd змушує демон прочитати
файл знову.
Такі числа важать найбільше, поки диск ще відповідає. Наш запис у портфоліо про відновлення даних із накопичувачів, що вже відмовили, починається після цієї точки: між 2003 і 2014 роками люди приносили картки пам’яті, жорсткі диски, SSD і масиви RAID, які вже вийшли з ладу, і метод доводилося підбирати під конкретний тип носія.
Де виникають проблеми
Вердикт «пройдено» сприймають як довідку про повне здоров’я. Стан здоров’я каже лише, що диск сам не оголосив себе несправним. Атрибути можуть бути на порозі чи нижче зараз або в минулому, а сектори, що очікують, уже можуть містити дані, які не прочитати, хоча вердикт досі «пройдено». Вихід — читати також таблицю атрибутів і журнал самотестів, доручити smartd повідомляти про атрибути 197 і 198 і тримати резервні копії, які не залежать від думки диска про себе.
Сирі значення беруть за чисту монету. Стандарт не визначає, як сире значення
відповідає фізичній одиниці. Довідка smartctl згадує диск Hitachi, що рахує час
роботи у хвилинах, а не в годинах, і диски IBM, які тримають у сирих значеннях
три температури. Починаючи з ревізії 4 стандарту ATA/ATAPI-4, значення атрибутів
повністю віддано на розсуд виробників, а твердотільні накопичувачі надають
деяким номерам іншого змісту, тож виведена назва може бути хибною, якщо
накопичувача немає в базі даних. Вихід — порівнювати диск із його власною
історією, а не з іншою моделлю, і перевіряти, що -i каже про базу даних, перш
ніж довіряти назві.
-a застосовують до диска ATA. Колись це був класичний спосіб побачити все,
але довідка більше не радить його для ATA, бо він пропускає опції, яким потрібні
48-бітні команди ATA, як-от розширений журнал помилок. Вихід — -x.
Контролер RAID ховає диски. Операційна система бачить один логічний
накопичувач, якому нема чого корисного повідомити, а автоматичне сканування
smartd у Linux узагалі не враховує диски за контролерами RAID. Вихід —
звертатися до кожного фізичного диска через контролер із відповідним типом
пристрою: -d megaraid,N досягає диска N за контролером MegaRAID або Dell PERC
у Linux і FreeBSD, а рядок на кшталт /dev/sda -d megaraid,0 -a у smartd.conf
бере цей диск під нагляд.
На заваді стоїть USB-корпус. USB-накопичувачі говорять із комп’ютером
набором команд SCSI, але майже завжди містять диск ATA чи SATA або флеш-пам’ять.
Довідка називає мікропрограму таких мостів, поряд із контролерами RAID, шаром,
через який стан здоров’я може лишитися невідомим; тоді smartctl попереджає і
лише порівнює атрибути pre-failure з їхніми порогами. Вихід — спробувати
-d sat, що загортає команди ATA в стандарт трансляції SCSI в ATA; -d sat,12
вибирає коротшу з двох форм команди.
Лист із попередженням так і не приходить. smartd надсилає пошту системною
командою mail, яка має бути в шляху того середовища, з якого запустили smartd.
Якщо її там немає, попередження існує лише в syslog. Вихід — -M test, а потім
перевірка, що тестовий лист справді потрапив у скриньку, яку хтось читає;
-M exec може вказати smartd на іншу поштову програму або скрипт.
Розклад тестів ніколи не спрацьовує. У шаблоні після -s місяць, день
місяця й година записуються двома цифрами кожне. Шаблон на кшталт S/../.././2
не збігається ніколи, і довідка застерігає саме від цього. Вихід — писати 02 і
переглянути журнал після першої ночі, щоб побачити, що тест справді відбувся.
Зламане редагування лишається непоміченим. Коли smartd перечитує конфігурацію за сигналом HUP і знаходить синтаксичну помилку, він виводить помилку й працює далі за старими правилами, ніби сигналу й не було. Вихід — переглядати журнал після кожного перечитування або перезапускати службу, бо з хибним файлом smartd узагалі відмовляється стартувати.
За температурою ніхто не стежить. Усі звіти про температуру типово вимкнено,
і -a їх не вмикає. Вихід — додати -W з межами, що підходять до обладнання.
Перевірка будить сплячий диск. Диск, який зупинив обертання, щоб заощадити
енергію, розкрутиться знову, коли smartctl його опитає. Вихід для скриптів, що
запускаються часто, — -n standby, з яким smartctl завершується з кодом 2
замість будити диск, або -n standby,0, що вважає такий випадок успіхом.
Що почитати далі
- smartmontools — сторінка проєкту: обидві програми, платформи й новини про випуски.
- smartctl(8), джерельний текст сторінки довідки — атрибути, пороги, стан здоров’я, самотести, типи пристроїв, коди завершення.
- smartd(8), джерельний текст сторінки довідки — демон: опитування, syslog, сигнали і те, як він шукає диски.
- smartd.conf(5), джерельний текст сторінки довідки — директиви для нагляду, розклади тестів, межі температури й пошта.

