为 pve 安装 UPS 不间断电源
UPS 可以在断电时立即切换到后备电池,然后通知 pve 执行关机指令。主要是防止硬盘在突然断电后损坏。
UPS 挑选 #
功率、后备时间一起决定了你的设备在停电后还能运行多久。一个经验是,功率尽量选择比主机电源功率大一点的。
通信协议常见的是USB,插上主机就能使用,另外也要考虑能和什么监控软件配合工作,比如常见的 apcupsd、nut,建议购买前咨询客服支持什么软件,如果不确定建议选知名厂商的 UPS,这样对软件的兼容性最好。以下以apcupsd为例。
apcupsd 配置 #
安装 apcupsd
apt update && apt install apcupsd
编辑 apcupsd.conf
## apcupsd.conf v1.1 ##
UPSCABLE usb
## 对于usb将DEVICE留空实现自动检测
UPSTYPE usb
DEVICE
## 轮询UPS的时间
POLLTIME 30
## 当 apcupsd 检测到市电中断时,它会等待 x 秒后,才会触发 onbattery 事件。
ONBATTERYDELAY 6
## 剩余多少电量执行关机
BATTERYLEVEL 25
## 剩余多少分钟可用时执行关机
MINUTES 10
## 断电多少秒后直接关机,0=禁用,通常用于测试
## 此选项会覆盖BATTERYLEVEL/MINUTES
TIMEOUT 30
## 断电等事件日志文件
EVENTSFILE /var/log/apcupsd.events
KILLDELAY 0
LOCKFILE /var/lock
UPSCLASS standalone
UPSMODE disable
应用配置
systemctl restart apcupsd.service
执行 apcaccess 命令查看UPS状态:
APC : 001,028,0653
DATE : 2025-08-26 00:04:35 +0800
HOSTNAME : pve
VERSION : 3.14.14 (31 May 2016) debian
UPSNAME : pve
CABLE : USB Cable
DRIVER : USB UPS Driver
UPSMODE : Stand Alone
STARTTIME: 2025-08-25 22:20:49 +0800
MODEL : Offline UPS
STATUS : ONLINE ## 状态
LOADPCT : 11.0 Percent ## 估计的已用负载百分比
BCHARGE : 93.0 Percent ## 当前电池容量百分比
TIMELEFT : 33.3 Minutes ## 估计的电池剩余运行时间
MBATTCHG : 25 Percent ## 系统关机所需的最低电池电量百分比
MINTIMEL : 10 Minutes ## 系统关机所需的最短电池运行时间(分钟)
MAXTIME : 30 Seconds
OUTPUTV : 224.0 Volts
DWAKE : -1 Seconds
ALARMDEL : 30 Seconds
LINEFREQ : 50.0 Hz
NUMXFERS : 0
TONBATT : 0 Seconds
CUMONBATT: 0 Seconds
XOFFBATT : N/A
SELFTEST : NO
STATFLAG : 0x05000008
SERIALNO : 000000000
END APC : 2025-08-26 00:04:41 +0800
阻止 UPS 关机 #
市电中断后,默认情况下 apcupsd 将在 pve 关机的最后一步通知 UPS 关机,如果你希望 UPS 继续运行为其他设备供电,可以覆盖这个行为。
编辑/etc/apcupsd/killpower:
#!/bin/sh
## 由于此时文件系统为只读,任何日志操作将不起作用,所以我们什么都不做。
exit 99
赋予执行权限:
chmod +x /etc/apcupsd/killpower
行为解析:
- 市电中断,
apcupsd创建一个/etc/apcupsd/powerfail文件(服务重启后由/lib/apcupsd/prestart删除)。 - 执行关机流程,在关机的最后一步触发
/usr/lib/systemd/system-shutdown/apcupsd_shutdown - 判断是否存在
powerfail文件,触发/etc/apcupsd/apccontrol killpower - 判断是否存在
/etc/apcupsd/killpower文件并执行,如果返回值是99则不会执行/sbin/apcupsd --killpower
一些信息查看 #
## 查看apcupsd电源事件日志
root@pve:~# cat /var/log/apcupsd.events
2025-08-22 21:22:55 +0800 apcupsd 3.14.14 (31 May 2016) debian startup succeeded
2025-08-22 22:01:48 +0800 Communications with UPS restored.
## 查看上次关开机后的最后5条输出,如果是正常关机应该会显示以下信息
root@pve:~# journalctl -b -1 -n 5
Aug 22 20:35:36 pve systemd[1]: Shutting down.
Aug 22 20:35:36 pve systemd-shutdown[1]: Syncing filesystems and block devices.
Aug 22 20:35:36 pve systemd-shutdown[1]: Sending SIGTERM to remaining processes...
Aug 22 20:35:36 pve systemd-journald[545]: Received SIGTERM from PID 1 (systemd-shutdow).
Aug 22 20:35:36 pve systemd-journald[545]: Journal stopped