我想建立一个高可用性系统,为此,正在尝试几种恢复方法。
假设我通过自动方式收到了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.service
和systemd
无法刷新看门狗并避免重新启动。另外,没有出现的事实/dev/watchdog1
表明mei_wdt
驱动程序未能初始化 MEI 的看门狗功能 - 也许是因为 BIOS 已经在使用它,并且不允许操作系统直接使用它?
您可以尝试在 BIOS 中禁用看门狗设置,而只使用iTCO_wdt
Linux 中的看门狗:该看门狗的驱动程序应该完全能够自行激活该看门狗,除非 BIOS 对硬件配置进行了欺骗。这样,您可能会错过针对启动时故障的保护,但如果 Linux 运行时系统挂起,看门狗仍然可以保护您。
当没有其他东西使用看门狗设备时,您应该能够使用该wdctl
命令来获取有关看门狗设备当前状态的信息。