S.M.A.R.T. (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
S.M.A.R.T.
. Дата последней синхронизации: 6 мая 2022. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
S.M.A.R.T.
(Self-Monitoring, Analysis, and Reporting Technology) — дополнительный компонент, встроенный во многие современные устройства хранения данных, с помощью которого они отслеживают, хранят и анализируют состояние своей работы. Собирается статистика (температура, количество переназначенных секторов, ошибки поиска...), которую программное обеспечение может использовать для оценки состояния устройства, прогнозирования возможных сбоев в его работе и уведомления о небезопасных значениях.
Smartmontools
Пакет smartmontools содержит две утилиты для анализа и мониторинга устройств хранения данных:
smartctl
и
smartd
. Для их использования
установите
пакет
smartmontools
.
Для эффективного использования этих инструментов поддержка SMART должна быть доступна и включена на каждом устройстве хранения данных. Можно использовать
#smartctl
для проверки наличия и включения поддержки SMART. После этого вы можете вручную выполнить
#Запуск теста
и
#Просмотр результатов теста
или использовать
#smartd
для автоматического запуска тестов и отправки уведомлений по электронной почте.
smartctl
smartctl — инструмент командной строки для управления системой SMART, встроенной в большинство ATA/SATA и SCSI/SAS жёстких дисков и твердотельных накопителей.
Опция
-i
/
--info
выводит различную информацию об устройстве, в том числе о том, доступен ли SMART и включен ли он:
# smartctl --info /dev/sda | grep 'SMART support is:'
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
Если SMART доступен, но не включен, вы можете включить его:
# smartctl --smart=on /dev/
устройство
Может потребоваться указать тип устройства. Например, опция
--device=ata
укажет smartctl, что тип устройства — ATA, что предотвратит попытки отправки SCSI-команд на это устройство.
Запуск теста
Существует три типа самотестирования, которые может выполнить устройство (все они безопасны для хранящихся на устройстве данных):
Короткий (Short): выполняет тесты, которые с высокой вероятностью обнаруживают проблемы устройства,
Расширенный (Extended) или долгий (Long): аналогичен короткому, но без ограничения времени и с полным исследованием поверхности диска,
Транспортировка (Conveyance): выявляет наличие повреждений, которые устройство могло получить во время транспортировки.
Опция
-c
/
--capabilities
выводит, какие тесты поддерживает устройство и приблизительное время выполнения каждого теста. Например:
# smartctl -c /dev/sda
...
Short self-test routine
recommended polling time:        (   1) minutes.
Extended self-test routine
recommended polling time:        (  74) minutes.
Conveyance self-test routine
recommended polling time:        (   2) minutes.
...
Для запуска теста используйте опцию
-t
/
--test=
название
:
# smartctl -t short /dev/
устройство
# smartctl -t long /dev/
устройство
# smartctl -t conveyance /dev/
устройство
Просмотр результатов теста
Посмотреть общее состояние здоровья устройства можно с помощью флага
-H
. Если устройство сообщает об отказе, это означает либо то, что устройство уже вышло из строя, либо то, что оно прогнозирует свой отказ в течение следующих 24 часов. Если это произошло — как можно скорее скопируйте данные с диска в безопасное место.
# smartctl -H /dev/
устройство
Можно также просмотреть список последних результатов тестирования и подробную информацию об устройстве:
# smartctl -l selftest /dev/
устройство
# smartctl -a /dev/
устройство
Генерация таблицы с атрибутами всех дисков
#!/bin/bash
function drives_csv {
	declare -A drive_values
	for d in `smartctl --scan -d scsi | cut -d' ' -f1`; do
		drive_values["-Drive-----------------"]="${drive_values[-Drive-----------------]},$d"
		for l in `smartctl -A $d | grep ATTRIBUTE_NAME -A30 | grep -v ATTRIBUTE_NAME | column -H1,3,4,5,6,7,8,9,11,12,13,14,15 -t -o, | sed 's/ //g'`; do
			key=`echo $l | cut -d',' -f1`
			value=`echo $l | cut -d',' -f2`
			existing=${drive_values["$key"]}
			drive_values["${key}"]="${existing},${value}"
			#~ echo "${key},${drive_values[$key]}"
		done
	done
	for key in "${!drive_values[@]}"; do
		echo "${key}${drive_values[$key]}"
	done | sort
}
drives_csv | column -s, -t
smartd
Демон smartd отслеживает состояние SMART и отправляет уведомления, когда что-то идёт не так. Он управляется через systemd и настраивается в файле
/etc/smartd.conf
. Синтаксис конфигурационного файла эзотеричен, и в данной статье представлено лишь краткое описание. Для получения более полной информации читайте примеры и комментарии в конфигурационном файле или в
smartd.conf(5)
.
Управление демоном
Чтобы запустить демон, проверить его состояние, сделать его автозапуск при загрузке системы и прочитать последние записи в журнале, просто
запустите/включите
systemd-службу
smartd.service
.
Определение устройств для мониторинга
Чтобы отслеживать все возможные ошибки SMART на всех дисках, в файле конфигурации должен быть следующий параметр:
/etc/smartd.conf
DEVICESCAN -a
Он уже есть в конфигурации
smartd
по умолчанию, а параметр
-a
, который является параметром по умолчанию, может быть опущен.
Чтобы отслеживать все возможные ошибки SMART на
/dev/sda
и
/dev/sdb
и игнорировать все остальные устройства:
/etc/smartd.conf
/dev/sda -a
/dev/sdb -a
Чтобы отслеживать все возможные ошибки SMART на подключенных внешних дисках (к примеу, USB-дисках для резервного копирования), лучше указать UUID устройства, так как при перезагрузке
/dev/sd
X
диска может измениться.
Сначала необходимо получить UUID диска для мониторинга:
ls -lah /dev/disk/by-uuid/
теперь найдите диск, который вы хотите отслеживать:
$ ls -lah /dev/disk/by-uuid/
lrwxrwxrwx 1 root root   9 Nov  5 22:41 820cdd8a-866a-444d-833c-1edb0f4becac -> ../../sde
lrwxrwxrwx 1 root root  10 Nov  5 22:41 b51b87f3-425e-4fe7-883f-f4ff1689189e -> ../../sdf2
lrwxrwxrwx 1 root root   9 Nov  5 22:42 ea2199dd-8f9f-4065-a7ba-71bde11a462c -> ../../sda
lrwxrwxrwx 1 root root  10 Nov  5 22:41 fe9e886a-8031-439f-a909-ad06c494fadb -> ../../sdf1
К примеру, если нужный вам диск в данный момент является
/dev/sde
, то вы можете взять отсюда его UUID и в настройках
smartd
просто указать путь в
/dev/disk/by-uuid/
:
/etc/smartd.conf
/dev/disk/by-uuid/820cdd8a-866a-444d-833c-1edb0f4becac -a
Также может понадобиться добавить опцию
-d removable
для работы
smartd
.
Теперь этот диск будет корректно отслеживаться, даже если его путь
/dev/sd
X
изменится после перезагрузки.
Уведомление о возможных проблемах
Для получения email при появлении новых ошибок укажите адрес своей электронной почты в опции
-m
:
/etc/smartd.conf
DEVICESCAN -m address@domain.com
Чтобы иметь возможность отправлять почту в интернет (то есть не на локальный почтовый аккаунт root), необходимо установить и настроить MTA (Mail Transport Agent) или MUA (Mail User Agent). Распространёнными MUA являются
msmtp
и
Postfix
, но, вероятно, подойдёт и самый простой
dma
. Распространёнными MTA являются sendmail и
Postfix
. Достаточно просто настроить
S-nail
, если вам не нужно ничего другого, но нужно следовать
этим инструкциям
.
Опция
-M test
включит отправку тестового письма при каждом запуске демона smartd:
/etc/smartd.conf
DEVICESCAN -m address@domain.com -M test
Доставка электронных писем может занять довольно много времени. Чтобы быть уверенным, что вы будете немедленно предупреждены о сбое жёсткого диска, можно указать скрипт, который будет выполняться в дополнение к отправке письма:
/etc/smartd.conf
DEVICESCAN -m address@domain.com -M exec /usr/local/bin/smartdnotify
Для отправки письма и системного уведомления можно использовать примерно такой скрипт
/usr/local/bin/smartdnotify
:
#!/bin/sh
# Отправка письма
echo "$SMARTD_MESSAGE" | mail -s "$SMARTD_FAILTYPE" "$SMARTD_ADDRESS"
# Отправка системного уведомления
wall "$SMARTD_MESSAGE"
Если вы работаете в среде рабочего стола, вы можете захотеть получать всплывающее уведомление на рабочем столе. Для этого можно использовать такой скрипт (замените
X_user
и
X_userid
на пользователя и userid, под которым запущен X, соответственно):
/usr/local/bin/smartdnotify
#!/bin/sh

sudo -u
X_user
DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/
X_userid
/bus notify-send "S.M.A.R.T Error ($SMARTD_FAILTYPE)" "$SMARTD_MESSAGE" --icon=dialog-warning -u critical
Для работы скрипта нужны
libnotify
и совместимая среда рабочего стола. Смотрите статью
Desktop notifications (Русский)
для более подробной информации.
Также можно добавлять скрипты в каталог
/usr/share/smartmontools/smartd_warning.d/
.
Скрипт, который уведомляет всех вошедших пользователей через libnotify:
/usr/share/smartmontools/smartd_warning.d/smartdnotify
#!/bin/sh

IFS=$'\n'
for LINE in `w -hs`
do
    USER=`echo $LINE | awk '{print $1}'`
    USER_ID=`id -u $USER`
    DISP_ID=`echo $LINE | awk '{print $8}'`
    sudo -u $USER DISPLAY=$DISP_ID DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$USER_ID/bus notify-send "S.M.A.R.T Error ($SMARTD_FAILTYPE)" "$SMARTD_MESSAGE" --icon=dialog-warning -u critical
done
Для работы скрипта нужны
libnotify
и
procps-ng
и совместимая среда рабочего стола.
Для запуска скрипта из этого каталога укажите его название в таком формате:
/etc/smartd.conf
DEVICESCAN -m @smartdnotify
Управление питанием
Можно проинструктировать smartd, как обращаться с дисками в режиме пониженного энергопотребления. Обычно в ответ на команды SMART, выдаваемые smartd, пластины диска раскручиваются. Поэтому если эта опция не используется, то диск, находящийся в режиме пониженного энергопотребления, может быть раскручен и переведён в режим повышенного энергопотребления, если smartd его периодически опрашивает.
/etc/smartd.conf
DEVICESCAN -n standby,15,q
Подробнее в
smartmontools wiki
.
Иногда опция
-n
не работает. Вы можете увидеть подобное сообщение в системном журнале:
# journalctl -u smartd
CHECK POWER MODE: incomplete response, ATA output registers missing
Device: /dev/sdb [SAT], no ATA CHECK POWER STATUS support, ignoring -n Directive
В качестве альтернативы можно использовать опцию
-i
. Она определяет, как часто smartd раскручивает диски для проверки их состояния. По умолчанию это 30 минут. Для изменения создайте и измените файл
/etc/default/smartmontools
.
/etc/default/smartmontools
SMARTD_ARGS="-i 10800"  Проверка каждые 10800 секунд (3 часа)
Смотрите
smartd(8)
для более подробной информации.
Выполнение тестов по расписанию
smartd может запускать самотестирование дисков по расписанию. Следующая конфигурация
/etc/smartd.conf
будет запускать короткий тест каждый день между 2-3 часами ночи и расширенный тест еженедельно по субботам между 3-4 часами утра:
/etc/smartd.conf
DEVICESCAN -s (S/../.././02|L/../../6/03)
Оповещение об изменении температуры
smartd может отслеживать температуру дисков и предупреждать, если она повышается слишком быстро или достигает верхнего предела. Приведённый ниже пример будет записывать изменение температуры на 4 градуса и более, достижение температуры 35 градусов и отправлять предупреждение при достижении температуры 40:
/etc/smartd.conf
DEVICESCAN -W 4,35,40
Совет
Посмотреть текущую температуру диска можно с помощью команды
smartctl -A /dev/
устройство
| grep Temperature_Celsius
Если у вас есть диски, которые намного горячее/холоднее других, удалите
DEVICESCAN
и определите отдельную конфигурацию для каждого устройства с нужными настройками температуры.
Полный пример smartd.conf
Объединение всего вышеперечисленного даст следующий пример конфигурации:
DEVICESCAN
— smartd отслеживает все диски, которые найдёт
-a
— отслеживание всех атрибутов
-o on
— включение SMART Automatic Offline Testing
-S on
— включение автоматического сохранения атрибутов
-n standby,q
— не проверять диск, если он в режиме пониженного энергопотребления, и подавлять сообщение об этом в журнале, чтобы не вызвать запись на диск
-s ...
— выполнение коротких и расширенных тестов по расписанию
-W ...
— отслеживание температуры
-m ...
— уведомления на почту
/etc/smartd.conf
DEVICESCAN -a -o on -S on -n standby,q -s (S/../.././02|L/../../6/03) -W 4,35,40 -m <пользователь или email>
Консольные приложения
skdump
— утилита для мониторинга и управления устройствами SMART для мониторинга и отчёта о состоянии жёсткого диска.
http://0pointer.de/blog/projects/being-smart.html
||
libatasmart
iostat -x
(из пакета
sysstat
) также предоставляет некоторые показатели состояния диска: в частности, высокие значения в столбце f_await означают, что диск не отвечает быстро на запросы и может выйти из строя.
Графические приложения
DisKMonitor
— Инструменты KDE для мониторинга состояния SMART-устройств и MDRaid.
https://github.com/papylhomme/diskmonitor
||
diskmonitor
AUR
Plasma Disks
— Мониторинг состояния жёстких дисков для KDE Plasma.
https://invent.kde.org/plasma/plasma-disks/
||
plasma-disks
Gnome Disks
— GNOME-фронтенд, который использует
libatasmart
для мониторинга и уведомления о состоянии дисков (часть рабочего стола gnome, который также включает в себя gsd-disk-utility-notify).
https://gitlab.gnome.org/GNOME/gnome-disk-utility/
||
gnome-disk-utility
GSmartControl
— GNOME-фронтенд для утилиты smartctl.
https://gsmartcontrol.sourceforge.io/
||
gsmartcontrol
Смотрите также
Сайт Smartmontools
Smartmontools на Ubuntu Wiki
Gentoo: smartmontools