Kernel/watchdog: различия между версиями

Материал из ALT Linux Wiki
мНет описания правки
(ipmi_watchdog)
 
(не показаны 2 промежуточные версии этого же участника)
Строка 1: Строка 1:
Для автоматического восстановления работоспособности системы после зависания может быть полезно настроить hardware watchdog. Watchdog заменяет зависании на перезагрузку, что может быть полезно в случае если работа оборудования или системы нестабильна, но нужно минимизировать простой, а reset помогает.
Для автоматического восстановления работоспособности системы после зависания может быть полезно настроить hardware watchdog. Watchdog заменяет зависании на перезагрузку, что может быть полезно в случае, если работа оборудования или системы нестабильна, но нужно минимизировать простой, а reset помогает.


Watchdog модули ядра имеют в имени "wdt" (сокращение от watchdog timer). Следует понимать что даже успешно загрузившийся модуль может фактически не работать (его reset сигнал не перезагружать систему) - тут все зависит от производителя оборудования. Лучшим hardware watchdog драйвером (на мой взгляд) является ipmi_watchdog, так как iPMI умеет делать power cycle, а не просто reset. Если его нет то вот неплохой список с чего начать поиск рабочего драйвера: it87_wdt it8712f_wdt w83627hf_wdt w83877f_wdt w83977f_wdt.
Watchdog модули ядра имеют в имени "wdt" (сокращение от watchdog timer). Следует понимать что даже успешно загрузившийся модуль может фактически не работать (его reset сигнал не перезагружает систему) - тут все зависит от производителя оборудования. Лучшим hardware watchdog драйвером (на мой взгляд) является ipmi_watchdog, так как iPMI умеет делать power cycle, а не просто reset. Если его нет, то вот неплохой список с чего начать поиск рабочего драйвера: it87_wdt it8712f_wdt w83627hf_wdt w83877f_wdt w83977f_wdt.


{{Attention|Важно, что watchdog делает ресет системе, это аналог внезапного нажатия кнопки ресет, это не мягкая перезагрузка как при shutdown! Поэтому, несохраненная информация может быть потеряна или может произойти сбой файловой системы. Ваш workflow должен учитывать эти '''риски''', например, регулярно делайте бакапы. ⚠️ }}
{{Attention|Важно, что watchdog делает ресет системе, это аналог внезапного нажатия кнопки ресет, это не мягкая перезагрузка как при shutdown! Поэтому, несохраненная информация может быть потеряна или может произойти сбой файловой системы. Ваш workflow должен учитывать эти '''риски''', например, регулярно делайте резервное копирование. ⚠️ }}


= Пример настройки =
= Пример настройки =
Строка 20: Строка 20:
запустите <code>sync</code>, вручную запустите <code>watchdog -F</code> и остановите этот процесс нажав <code>^Z</code>, после исчерпания <code>watchdog-timeout</code> система должна перезагрузиться.
запустите <code>sync</code>, вручную запустите <code>watchdog -F</code> и остановите этот процесс нажав <code>^Z</code>, после исчерпания <code>watchdog-timeout</code> система должна перезагрузиться.
* Если всё прошло успешно, то разрешите и запустите watchdog сервис через systemctl.
* Если всё прошло успешно, то разрешите и запустите watchdog сервис через systemctl.
== ipmi-watchdog ==
После запуска watchdog сервиса <code>wdctl</code> больше не сможет показать информацию по устройству:
  # wdctl /dev/watchdog
  wdctl: cannot read information about /dev/watchdog: No such file or directory
Убедиться, что ipmi_watchdog запущен можно через <code>ipmitool</code>:
  # ipmitool mc watchdog get
  Watchdog Timer Use:    SMS/OS (0x44)
  Watchdog Timer Is:      Started/Running
  Watchdog Timer Logging: On
  Watchdog Timer Action:  Hard Reset (0x01)
  Pre-timeout interrupt:  None
  Pre-timeout interval:  0 seconds
  Timer Expiration Flags: None (0x00)
  Initial Countdown:      60.0 sec
  Present Countdown:      59.1 sec
На не запущенном устройстве соответствующие строки будут такие:
  Watchdog Timer Is:      Stopped
  Watchdog Timer Action:  No action (0x00)
  ...
  Present Countdown:      60.0 sec

Текущая версия от 21:41, 26 августа 2024

Для автоматического восстановления работоспособности системы после зависания может быть полезно настроить hardware watchdog. Watchdog заменяет зависании на перезагрузку, что может быть полезно в случае, если работа оборудования или системы нестабильна, но нужно минимизировать простой, а reset помогает.

Watchdog модули ядра имеют в имени "wdt" (сокращение от watchdog timer). Следует понимать что даже успешно загрузившийся модуль может фактически не работать (его reset сигнал не перезагружает систему) - тут все зависит от производителя оборудования. Лучшим hardware watchdog драйвером (на мой взгляд) является ipmi_watchdog, так как iPMI умеет делать power cycle, а не просто reset. Если его нет, то вот неплохой список с чего начать поиск рабочего драйвера: it87_wdt it8712f_wdt w83627hf_wdt w83877f_wdt w83977f_wdt.

Внимание! Важно, что watchdog делает ресет системе, это аналог внезапного нажатия кнопки ресет, это не мягкая перезагрузка как при shutdown! Поэтому, несохраненная информация может быть потеряна или может произойти сбой файловой системы. Ваш workflow должен учитывать эти риски, например, регулярно делайте резервное копирование. ⚠️


Пример настройки

  • Установите пакет watchdog он содержит user-space компонент, который будет пингать драйвер. По умолчанию сервис watchdog будет не запущен.
  • Перекройте blacklist-watchdog.conf от kmod и далее работайте с новым файлом - так как файл из /lib/modprobe.d обновится при апдейте системы:
 # cp /lib/modprobe.d/blacklist-watchdog.conf /etc/modprobe.d/
  • Добавьте в новый конфиг файл оставшиеся wdt модули, которые могли загрузиться, но быть при этом нерабочими, часто это iTCO_wdt. Посмотреть список уже загруженных wdt модулей: lsmod | grep wdt
  • Найдите рабочий watchdog драйвер.
  • Удалите найденный рабочий модуль из созданного выше blacklist-watchdog.conf. Например, для w83627hf_wdt, удалите или закомментируйте там строку blacklist w83627hf_wdt. Это важно сделать для следующего шага.
  • Добавьте найденный модуль в автозагрузку после старта системы. Для этого создайте новый conf файл в /etc/modules-load.d/ например, wdt.conf с содержимым w83627hf_wdt. После ребута systemd-modules-load.service его загрузит (если он не в блэклисте).
  • Загруженный модуль создаст устройство /dev/watchdog0.
  • Для проверки - команда wdctl /dev/watchdog0 должна показать информацию по устройству. (Это работает только до того как загружен watchdog сервис, так как он захватывает устройство.)
  • Пропишите в /etc/watchdog.conf строку:
 watchdog-device         = /dev/watchdog0
  • Протестируйте, что watchdog работает - ⚠ предварительно закройте все приложения, чтоб не потерять данные ⚠,

запустите sync, вручную запустите watchdog -F и остановите этот процесс нажав ^Z, после исчерпания watchdog-timeout система должна перезагрузиться.

  • Если всё прошло успешно, то разрешите и запустите watchdog сервис через systemctl.

ipmi-watchdog

После запуска watchdog сервиса wdctl больше не сможет показать информацию по устройству:

 # wdctl /dev/watchdog
 wdctl: cannot read information about /dev/watchdog: No such file or directory

Убедиться, что ipmi_watchdog запущен можно через ipmitool:

 # ipmitool mc watchdog get
 Watchdog Timer Use:     SMS/OS (0x44)
 Watchdog Timer Is:      Started/Running
 Watchdog Timer Logging: On
 Watchdog Timer Action:  Hard Reset (0x01)
 Pre-timeout interrupt:  None
 Pre-timeout interval:   0 seconds
 Timer Expiration Flags: None (0x00)
 Initial Countdown:      60.0 sec
 Present Countdown:      59.1 sec

На не запущенном устройстве соответствующие строки будут такие:

 Watchdog Timer Is:      Stopped
 Watchdog Timer Action:  No action (0x00)
 ...
 Present Countdown:      60.0 sec