重置/刷新系统看门狗定时器

重置/刷新系统看门狗定时器

我想建立一个高可用性系统,为此,正在尝试几种恢复方法。

假设我通过自动方式收到了kernel更新,这意味着重新启动,我将创建一个snapshot正在运行的系统,在 中创建一个可启动条目GRUB2,更新我的kernel,并强制使用更新后的根启动。

如果启动没有按预期进行,我需要一个计时器,它会在设定的时间后放弃启动尝试并正常启动,这将通过预更新快照进行。

对于一个人来说,这种情况看起来很愤怒WatchDog timer (WDT)。我注意到Watchdog我的设置中有BIOS ACPI一个时间值从 3 秒到 30 分钟。我将其设置为 2 分钟,在启动尝试中,我中断了启动过程,因此它不会继续进行,果然,2 分钟后,它重新启动。然而,即使系统正确启动,它仍然每 2 分钟重新启动一次。

我读,这里,这里这里需要有一个daemon应该刺激/刷新这个看门狗。我注意到我的系统中有一个/dev/watchdog,但是,我不知道这是否是与我在 中启用的看门狗接口的看门狗BIOS。我进一步读到,这可以被 逗乐systemd。设置该RuntimeWatchdogSec=选项/etc/systemd/system.conf应该向看门狗定时器发送刷新信息并防止其重新启动。因此,我将其设置为 20 秒,但只要BIOS看门狗中设置的定时器频率过去,我的设备仍然会继续启动。 (由于某种原因,我有 /dev/watchdog 和 /dev/watchdog0,都是 0 字节,不确定这是否正常......)

我需要启用其他功能吗?我的理解是否正确,即与我已启用的看门狗定时器/dev/watchdog的接口BIOS,并且可以通过选项来触发它/etc/systemd/system.conf?最初我认为这是一个软件看门狗,不关心我在 BIOS 中打开的硬件看门狗,但似乎它应该可以使用。

我使用的主板是一块非常通用的主板,操作系统是CentOs 8。

编辑:

做 alsmod | grep wdt给了我以下内容:

iTCO_wdt 16384 1
iTCO_vendor_support 16384 1 iTCO_wdt
mei_wdt 16384 0
mei 110592 3 mei_wdt,mei_me

由于systemd无法工作,我下载了CentOs提供的看门狗守护进程,并设置了诸如watchdog-device/dev/watchdog之类的值,并尝试设置一些东西,但这也不起作用。系统只是不断重新启动。

我做了一个systemctl status watchdog.service,它给了我一个状态,表示守护程序服务正在运行并且处于活动状态,同时:

alive=/dev/watchdog heartbeat=[none] to=root no_act=no force=no
hardware watchdog identity : iTCO_wdt
cannot set scheduler (errno=1 = 'Operation not permitted') //ERROR

我检查的错误可能与有关systemd,但我检查并/etc/system.conf完全注释。

答案1

您的系统似乎至少有一个,但也可能有两个内置的硬件看门狗。

iTCO_wdt是大多数现代英特尔芯片组中内置的看门狗功能的驱动程序。mei_wdt是另一个看门狗的驱动程序,内置于英特尔主动管理技术 (AMT) 管理引擎接口 (MEI) 中。与 相比,它的测试较少iTCO_wdt

如果您在 BIOS 设置中启用了看门狗,您的 BIOS 可能会保留其中一个看门狗。在这种情况下,可能需要一些特定于供应商的方法来刷新它。也许通过 ACPI / WMI 调用?

/dev/watchdog*对于单个看门狗来说,看到两个设备是正常的。/dev/watchdog是经典的看门狗设备节点:主设备号为 10,次设备号为 130 的字符设备节点。/dev/watchdog0是较新的设备节点,具有动态确定的主设备号:它允许生成多个看门狗设备,例如等/dev/watchdog0/dev/watchdog1如果系统有不止一个可用的看门狗设备。经典接口只允许系统上有一个看门狗设备。

systemctl status watchdog.service表明它正在成功使用iTCO_wdt并且列表中模块的使用计数为 1 的事实lsmod似乎表明该看门狗可以与 Linux 一起使用。

另一方面,您的 BIOS 可能正在使用mei_wdt,这可以解释为什么watchdog.servicesystemd无法刷新看门狗并避免重新启动。另外,没有出现的事实/dev/watchdog1表明mei_wdt驱动程序未能初始化 MEI 的看门狗功能 - 也许是因为 BIOS 已经在使用它,并且不允许操作系统直接使用它?

您可以尝试在 BIOS 中禁用看门狗设置,而只使用iTCO_wdtLinux 中的看门狗:该看门狗的驱动程序应该完全能够自行激活该看门狗,除非 BIOS 对硬件配置进行了欺骗。这样,您可能会错过针对启动时故障的保护,但如果 Linux 运行时系统挂起,看门狗仍然可以保护您。

当没有其他东西使用看门狗设备时,您应该能够使用该wdctl命令来获取有关看门狗设备当前状态的信息。

相关内容