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

Jump to content
From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи 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/sdX` диска может измениться.

Сначала необходимо получить 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/sdX` изменится после перезагрузки.

#### Уведомление о возможных проблемах

Для получения 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 || diskmonitorAUR

- 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

Category:

- Storage (Русский)