Eu tenho uma placa-mãe Supermicro X9DR3-F onde os JWD
pinos de jumper 1 e 2 estão em curto e a funcionalidade de watchdog no UEFI está habilitada:
Isso significa que o sistema é redefinido após cerca de 5 minutos se nada redefinir o temporizador do watchdog do hardware. Instalei o watchdog
daemon e configurei para usar o iTCO_wdt
driver:
$ cat /etc/default/watchdog
# Start watchdog at boot time? 0 or 1
run_watchdog=1
# Start wd_keepalive after stopping watchdog? 0 or 1
run_wd_keepalive=1
# Load module before starting watchdog
watchdog_module="iTCO_wdt"
# Specify additional watchdog options here (see manpage).
$
Quando o watchdog
daemon é iniciado, o driver é carregado sem problemas:
$ sudo dmesg | grep iTCO_wdt
[ 17.435620] iTCO_wdt: Intel TCO WatchDog Timer Driver v1.11
[ 17.435667] iTCO_wdt: Found a Patsburg TCO device (Version=2, TCOBASE=0x0460)
[ 17.435761] iTCO_wdt: initialized. heartbeat=30 sec (nowayout=0)
$
Além disso, o /dev/watchdog
arquivo está presente:
$ ls -l /dev/watchdog
crw------- 1 root root 10, 130 Dec 8 22:36 /dev/watchdog
$
watchdog-device
opção na watchdog
configuração do daemon aponta para este arquivo:
$ grep -v ^# /etc/watchdog.conf
watchdog-device = /dev/watchdog
watchdog-timeout = 60
interval = 5
log-dir = /var/log/watchdog
verbose = yes
realtime = yes
priority = 1
heartbeat-file = /var/log/watchdog/heartbeat
heartbeat-stamps = 1000
$
Para depurar as gravações no dispositivo watchdog, habilitei a heartbeat-file
opção e vejo que as mensagens de manutenção de atividade /dev/watchdog
são enviadas:
$ tail /var/log/watchdog/heartbeat
1575830728
1575830728
1575830728
1575830733
1575830733
1575830733
1575830733
1575830733
1575830733
1575830733
$
No entanto, apesar disso, o servidor se reinicializa com intervalos de aproximadamente cinco minutos.
Meu próximo pensamento foi que talvez o iTCO_wdt
driver controle o watchdog no chipset C606 e o watchdog redefinindo o servidor seja parte do IPMI. Então, certifiquei-me de que o iTCO_wdt
driver não fosse carregado durante a inicialização e reiniciei o servidor. Justo o suficiente, o /dev/watchdog
não estava mais presente. Agora eu carreguei o ipmi_watchdog
módulo:
$ ls -l /dev/watchdog
ls: cannot access '/dev/watchdog': No such file or directory
$ sudo modprobe ipmi_watchdog
$ sudo dmesg -T | tail -1
[Tue Dec 10 21:12:48 2019] IPMI Watchdog: driver initialized
$ ls -l /dev/watchdog
crw------- 1 root root 10, 130 Dec 10 21:12 /dev/watchdog
$
.. e finalmente iniciei o watchdog
daemon que, com base no /var/log/watchdog/heartbeat
arquivo, está gravando /dev/watchdog
com intervalo de 5s. Além disso, pode-se confirmar isso com strace
:
$ ps -p 2296 -f
UID PID PPID C STIME TTY TIME CMD
root 2296 1 0 01:28 ? 00:00:00 /usr/sbin/watchdog
$ sudo strace -y -p 2296
strace: Process 2296 attached
restart_syscall(<... resuming interrupted nanosleep ...>) = 0
write(1</dev/watchdog>, "\0", 1) = 1
write(1</dev/watchdog>, "\0", 1) = 1
open("/proc/uptime", O_RDONLY) = 2</proc/uptime>
close(2</proc/uptime>) = 0
write(1</dev/watchdog>, "\0", 1) = 1
write(1</dev/watchdog>, "\0", 1) = 1
write(1</dev/watchdog>, "\0", 1) = 1
write(1</dev/watchdog>, "\0", 1) = 1
write(1</dev/watchdog>, "\0", 1) = 1
nanosleep({5, 0}, NULL) = 0
write(1</dev/watchdog>, "\0", 1) = 1
write(1</dev/watchdog>, "\0", 1) = 1
open("/proc/uptime", O_RDONLY) = 2</proc/uptime>
close(2</proc/uptime>) = 0
write(1</dev/watchdog>, "\0", 1) = 1
write(1</dev/watchdog>, "\0", 1) = 1
write(1</dev/watchdog>, "\0", 1) = 1
write(1</dev/watchdog>, "\0", 1) = 1
write(1</dev/watchdog>, "\0", 1) = 1
nanosleep({5, 0}, NULL) = 0
write(1</dev/watchdog>, "\0", 1) = 1
write(1</dev/watchdog>, "\0", 1) = 1
open("/proc/uptime", O_RDONLY) = 2</proc/uptime>
close(2</proc/uptime>) = 0
write(1</dev/watchdog>, "\0", 1) = 1
write(1</dev/watchdog>, "\0", 1) = 1
write(1</dev/watchdog>, "\0", 1) = 1
write(1</dev/watchdog>, "\0", 1) = 1
write(1</dev/watchdog>, "\0", 1) = 1
nanosleep({5, 0}, ^Cstrace: Process 2296 detached
<detached ...>
$
watchdog
daemon acima com PID 2296
foi iniciado de uma forma que a heartbeat-file
opção in /etc/watchdog.conf
foi comentada para reduzir as write
chamadas do sistema na saída do strace
.
No entanto, o servidor ainda reinicia com intervalos de aproximadamente 300 segundos.
Por que o daemon watchdog não consegue redefinir o timer watchdog de hardware na placa-mãe Supermicro X9DR3-F?
A razão pela qual o watchdog daemon não conseguiu redefinir o temporizador do watchdog de hardware na placa-mãe Supermicro X9DR3-F é que a funcionalidade do watchdog na UEFI controla o terceiro watchdog. Isso está no chip Winbond Super I/O 83527. Em outras palavras,
iTCO_wdt
eipmi_watchdog
os drivers eram drivers errados para esse chip de vigilância.Em um A2SDi-4C-HLN4F, tive que usar
bmc_watchdog
(defreeipmi
) para fazê-lo funcionar.