Диски ведут учёт собственного состояния: счётчики перераспределённых секторов, ошибок чтения, температуры и часов работы. Утилита smartctl умеет читать эти данные и запускать тесты. Разберём, как вести мониторинг SMART и распознать признаки скорого отказа.

Установка и базовые команды

smartmontools входят в репозитории всех основных дистрибутивов. Для NVMe, SATA и SCSI поддерживаются разные наборы атрибутов.

sudo apt install smartmontools
# список устройств
sudo smartctl --scan
# общая информация
sudo smartctl -i /dev/sda
# ключевые атрибуты
sudo smartctl -A /dev/sda | head -40
# здоровье
sudo smartctl -H /dev/sda

Для NVMe вместо /dev/sda используйте /dev/nvme0n1, а сам тест выполняется командой sudo smartctl -t short /dev/nvme0.

Какие атрибуты важны

  • Reallocated_Sector_Ct — сектора, помечённые нерабочими. Рост означает деградацию.
  • Current_Pending_Sector — сектора, ожидающие проверки. Рост = предвестник отказа.
  • Offline_Uncorrectable — ошибки, которые диск не смог исправить.
  • Temperature_Celsius — перегрев сокращает срок службы.
  • Power_On_Hours — наработка для оценки возраста.
  • Reallocated_Event_Count — число событий перераспределения.
# выделить критичные атрибуты
sudo smartctl -A /dev/sda | grep -E "Reallocated|Pending|Uncorrect|Temperature|Power_On"
# RAW-значения — именно они важны, а не норма
sudo smartctl -A /dev/sda | awk '{print $1, $10}' | head -30

Тесты: short и long

Короткий тест занимает минуты и проверяет основные контуры. Длинный читает весь диск и может идти часы — для больших объёмов планируйте его на ночь.

# короткий тест
sudo smartctl -t short /dev/sda
# дождаться и посмотреть результат
sudo smartctl -l selftest /dev/sda | tail -20
# длинный тест (запуск)
sudo smartctl -t long /dev/sda
# прогресс
sudo smartctl -c /dev/sda

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

Автоматизация: smartd

Демон smartd следит за состоянием в фоне и шлёт оповещения при отклонениях.

# включить демон
sudo systemctl enable --now smartd
# конфигурация
grep -v "^#" /etc/smartd.conf | head
# пример правила
# /dev/sda -a -o on -S on -s (S/../.././02) -W 4,45,55 -m admin@example.com
# журнал демона
journalctl -u smartd -b | tail -20

Директива -W задаёт пороги температуры, -s — расписание тестов. Настройте и то и другое, иначе деградация останется незамеченной.

Нагрузочный тест записи

SMART не гарантирует: чтобы выявить проблему, нужна нагрузка. badblocks в режиме записи подходит только для чистого диска — он уничтожает данные.

# ТОЛЬКО для нового/пустого диска!
sudo badblocks -wsv /dev/sdb 2>&1 | tail -20
# безопаснее — fio без разрушения данных
fio --name=smartcheck --filename=/mnt/data/test --rw=readwrite --size=1G --runtime=60 --time_based
# после теста
sudo smartctl -A /dev/sda | grep -E "Reallocated|Pending"

Сравнивайте атрибуты до и после нагрузки: рост RAW-значений прямо в тесте — серьёзный сигнал.

Когда диск пора менять

  • Растут Reallocated и Pending даже после тестов.
  • Длинный тест завершается ошибками.
  • Появляются ошибки в журнале ядра: I/O error, UNC.
  • Температура систематически выше нормы.
# ошибки в ядре
dmesg | grep -iE "I/O error|UNC|reset" | tail -20
journalctl -k -b | grep -iE "ata|nvme|error" | tail -20
# состояние SMART сразу после
sudo smartctl -H -A /dev/sda | tail -30

Мониторинг в кластере и NAS

На нескольких машинах удобно собирать метрики централизованно. Утилита smartctl -A умеет выводить данные в формате, пригодном для Prometheus, а ZFS/Mdadm показывают связанные события.

# быстрая выгрузка для обработки
sudo smartctl -A -j /dev/sda > /tmp/sda.json 2>/dev/null && echo "JSON готов"
# в ZFS — состояние пула
zpool status 2>/dev/null | head -20
# в mdadm
cat /proc/mdstat

SMART и избыточные массивы

В RAID или ZFS деградация одного диска не всегда видна приложению, но SMART показывает её заранее. Важно проверять все диски, а не только первый в списке.

# пройтись по всем физическим дискам
for d in $(lsblk -dn -o NAME,TYPE | awk '$2=="disk"{print $1}'); do
  echo "== /dev/$d"
  sudo smartctl -H /dev/$d | grep -E "PASSED|FAILED"
  sudo smartctl -A /dev/$d | grep -E "Reallocated|Pending" | head -3
done
# в ZFS: состояние пула и повреждённые сектора
zpool status -v 2>/dev/null | head -30

Если массив деградировал, приостановите фоновые задачи и не запускайте одновременно несколько тестов: восстановление и так нагружает диск, а параллельный long-тест ускоряет его износ.

Регулярный отчёт по всем дискам

Вместо ручных проверок собирайте ежедневный отчёт и храните историю: по динамике видно деградацию раньше, чем по одиночному снимку.

#!/bin/bash
# /usr/local/bin/smart-report.sh
for d in $(lsblk -dn -o NAME,TYPE | awk '$2=="disk"{print $1}'); do
  echo "--- /dev/$d"
  sudo smartctl -H -A /dev/$d 2>/dev/null | grep -E "result|Reallocated|Pending|Temperature" | head -4
done

# crontab: отчёт раз в день
# 0 8 * * * /usr/local/bin/smart-report.sh | mail -s "SMART report" admin@example.com

Храните отчёты хотя бы год: они помогают отличить «всегда было 3 сектора» от «за месяц прибавилось 40».

Порядок действий при подозрении на отказ

  1. Зафиксируйте вывод smartctl -A — это доказательства для RMA.
  2. Приостановите запись и переносите данные на новый диск.
  3. Не запускайте тесты «на пробу»: они ускоряют деградацию.
  4. Проверьте наличие свежей резервной копии вне этого сервера.
  5. Замените диск и дождитесь полного ребилда массива.
  6. Сохраните отчёт о замене в журнале оборудования.
# доказательства для гарантии
sudo smartctl -a /dev/sda > ~/disk-sda-final.txt
sudo smartctl -t long /dev/sda 2>/dev/null || true   # только если решено продолжать
ls -lh ~/disk-sda-final.txt

Итог

SMART — это раннее предупреждение: следите за Reallocated, Pending и Uncorrectable, запускайте short-тесты раз в неделю, а long — раз в месяц. Включите smartd с оповещениями по почте и порогам температуры. Обнаружив рост счётчиков, начните перенос данных сразу, не дожидаясь полного отказа.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте