Kernel/watchdog
Для автоматического восстановления работоспособности системы после зависания может быть полезно настроить 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 он содержит 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.