我基于 PVE 的 All In One 里有飞牛,由 2 块 1T 的 NVME 和 4 块 4T 的西数红盘组成,这个红盘的价格很贵,大概要 700 - 800 元一块,想着用 UPS 相对来说能更安全一些,于是在京东入手了山特的 TG-BOX850 不间断电源,给我的机械硬盘垫个底。

飞牛在最近的 0.8.27 版本里已经官方支持了 UPS,目前官方只支持三款 UPS,其中就有支持到我手里这款 TG-BOX850,我买的时候他们还没有做 UPS 功能,不过看来型号买对了。

不过既然我都已经基于 PVE 了,想来不如把 UPS 直接对接给 PVE。

PVE 是基于 Debian 的,生态上有 NUT 和 APCUPSD 这两个,网上查了一下 NUT 的相关教程五花八门,但都比较复杂麻烦,APCUPSD 的就简单一些,本文就基于 APCUPSD。

我的计划是如果 APCUPSD 搞不定的话,我宁愿把 UPS 直通给飞牛用,也不要去搞 NUT,但好在是搞定了,而且非常简单。

确认 UPS 已经正确识别

将 UPS 的 USB 线插入 PVE 机器上,执行 lsusb 可以查看已经能够识别到:

1
2
3
4
5
root@pve:~# lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 0463:ffff MGE UPS Systems UPS
Bus 001 Device 004: ID 0cf2:7750 ENE Technology, Inc. 6K7750
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

其中 Bus 001 Device 003: ID 0463:ffff MGE UPS Systems UPS 就是 TG-BOX850 了。

安装 APCUPSD

执行以下命令安装 APCUPSD 服务并设置开机自启:

1
2
3
apt update -y
apt install -y apcupsd
systemctl enable apcupsd --now

配置 APCUPSD

配置文件在 /etc/apcupsd/apcupsd.conf,根据自已实际情况可以需要修改以下配置项。

  • UPSNAME 名称:UPS 名称,我这里改为 UPSNAME TG-BOX850
  • DEVICE /dev/ttyS0 注释掉(前面加 # 号),这个是串口用的,我的 TG-BOX850 是 USB 方式。
  • BATTERYLEVEL 5 电池电量下降到 5%,触发关机,我改为了 50
  • MINUTES 3 剩余电子预计不起过 3 分钟,触发关机,我改为了 15
  • TIMEOUT 0,市电断电多少秒以后,触发关机,为 0 则不启用,我没改。
  • ONBATTERYDELAY 6 断电 6 秒后才识别为正在使用电池供电,防止短时间断电导致错误,我没改。
  • POLLTIME 60 每 60 秒检测一次 UPS 状态,我改为了 10

调整完配置以后执行 systemctl restart apcupsd 重启服务。

查看状态

执行 apcaccess 可以查看状态:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
APC      : 001,028,0667
DATE : 2024-12-30 14:17:56 +0800
HOSTNAME : pve
VERSION : 3.14.14 (31 May 2016) debian
UPSNAME : TG-BOX850
CABLE : USB Cable
DRIVER : USB UPS Driver
UPSMODE : Stand Alone
STARTTIME: 2024-12-29 22:19:10 +0800
MODEL : SANTAK TG-BOX
STATUS : ONLINE
LOADPCT : 10.0 Percent
BCHARGE : 100.0 Percent
TIMELEFT : 46.4 Minutes
MBATTCHG : 50 Percent
MINTIMEL : 15 Minutes
MAXTIME : 0 Seconds
OUTPUTV : 230.0 Volts
DWAKE : -1 Seconds
LOTRANS : 184.0 Volts
HITRANS : 264.0 Volts
ALARMDEL : 30 Seconds
NUMXFERS : 0
TONBATT : 0 Seconds
CUMONBATT: 0 Seconds
XOFFBATT : N/A
STATFLAG : 0x05000008
SERIALNO : Blank
END APC : 2024-12-30 14:17:57 +0800

其中,BCHARGE 是当前电池电量,STATUS 是状态字段需要重点关注,其值可能为:

  • ONLINE:市电供电。
  • ONBATT:UPS 供电。
  • COMLOST:UPS 状态不正常,需要排查,重点关注配置信息里的 DEVICE