停电之后,家里的服务器没有像往常一样自己启动。等我赶回家按下电源键,机器卡在固件界面,等着一个永远不会有人按下的按键——角落里那台无头机器,根本没人给它接键盘。

打开网易新闻 查看精彩图片

好不容易跑起来,BIOS里多年前配置的设置全被清空。等到下一次交流断电后同样的事情再次发生,我才终于锁定问题所在:主板上那颗CR2032纽扣电池没电了。

换掉电池之后,之前折腾了我一个月的所有异常全部消失。

它看起来不像硬件故障

CMOS电池就是手表里常见的那种纽扣电池,几乎每块台式机主板上都有一颗。它的作用是在整机断电时维持实时时钟继续走,而在很多主板上,它还负责保住BIOS设置不被清空。电池一旦耗尽,下一次彻底断电就会把固件打回默认值。

这正是我那台华硕主板上的表现:时钟重置、启动顺序错乱,其余设置被彻底抹掉——XMP配置、交流断电后恢复供电的选项、VT-d,甚至风扇曲线,重新调一遍相当折磨。

还有一种行为只出现在部分主板上,我这款就在其中:主板会在自检阶段停下来,等人按F1。人不在家的时候,这个等待毫无意义。

同样的问题发生在台式机上,会引出一连串别的麻烦。比如时钟被重置后,浏览器会用系统时间去校验证书,HTTPS网站可能直接报证书错误。如果主板出厂时关闭了CPU虚拟化,WSL2、Docker Desktop、安卓模拟器和依赖虚拟化的反作弊系统都可能突然罢工。

为什么我花了这么久才想到它

难就难在,CMOS电池没电只在少数场景下才会暴露。只要电源还插着、开关还开着,电源就会向主板供给一路5V待机电压,即便电脑处于关机状态,这路待机供电也在维持CMOS的运转。

这就让故障显得毫无规律。同一段时间里,我的Proxmox主机也崩过几次,我都是硬重启恢复的,一次设置都没丢——因为电源从未失去待机供电。只有停电才会触发,而那台机器并没有接UPS。

我从没往电池上想,因为我此前从没遇到过电池耗尽的情况。我装的第一台电脑就缺一颗CMOS电池,所以这个机制我并不陌生,但装了这么多年机器,电池本身一直是件被忽略的事。

换电池是解法,但设置未必都靠它

不少现代UEFI主板把BIOS设置存在闪存里,而不是靠电池维持的RAM。这类主板上电池耗尽,最坏的结果通常只是时钟重置。设置回退也可能来自内存训练失败,或者误碰了清除CMOS的跳线——概率很低,但确实存在。我也遇到过自动超频设置失败导致的类似BIOS重置,同样少见。

判断是不是电池的问题,最简单的办法就是直接换一颗。设置怎么存取决于主板和代际,很多UEFI主板在设计上仍然会在电池耗尽时丢失设置。UPS也有帮助,我至今还没买。它治不好一颗没电的电池,但能减少那些把问题暴露出来的断电次数。

回头看,最让人沮丧的是修复本身如此简单,而我花了那么久才定位到它。刷新的BIOS版本、翻手册排查,最后发现罪魁祸首是一颗电池,时间全打了水漂。好在,我的家庭服务器不再"闹鬼"了。