在Linux下使用UPS电源与监控程序配置
为了防止异外断电对台式机中的机械硬盘造成物理损伤以及丢失正在编辑的数据,我最近搜索调研了UPS电源。挑选的主要依据是相比于台式机的平均运行功率,UPS电源功率应留出一定的裕度。同时,要有能够在Linux系统下监测电源状态、并当电池耗尽后自动执行脚本程序的软件工具。最终,我购买了施奈德的后备式UPS电源APC BK650M2。
图 1 施奈德后备式UPS电源APC BK650M2。
虽然施奈德官方提供的PowerChute软件只支持Windows系统,但Linux下亦有apcupsd
可以使用。该软件以守护进程的方式运行,通过串行数据通信的方式(串口或USB)实时获取UPS电源信息,包括当前外部输入电压、负载功率、电池电量等。当电池电量低于指定值时,会自动运行脚本程序/etc/apcupsd/apccontrol
,以实现电脑系统的自动关闭或任何用户指定的操作。
把UPS电源与电脑连好后,根据apcupsd
的说明文档,我们首先使用lsusb
命令检查Linux系统是否能检测到已连接的UPS电源。
$ lsusb | grep Uninterruptible Bus 002 Device 004: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
确认能够找到设备后,编辑apcupsd
的配置文件/etc/apcupsd/apcupsd.conf
,将其中UPSCABLE
与UPSTYPE
两项均设为usb
。
UPSCABLE usb
UPSTYPE usb
因为台式机与UPS电源之间是通过USB通讯的,所以需要注释掉配置文件中的串口设置部分:
DEVICE /dev/ttyS0
接下来,设置一下当外部失去电力转为UPS供电后,电池剩余多少电量时电脑自动执行脚本程序/etc/apcupsd/apccontrol
。我这里的设置条件是“电池电量小于5%或仅够支持3分钟”。
# When the battery level is <= 5%, shutdown the computer. BATTERYLEVEL 5 # When the remaining power can only last 3 minutes, shutdown the computer. MINUTES 3
在/etc/apcupsd/apccontrol
中的doshutdown
部分,我将原先的关闭系统指令替换为使系统进入睡眠状态。这样一来,等供电恢复后重新开机,则可以回到之前的工作状态。
;; doshutdown) echo "UPS ${2} initiated Shutdown Sequence" | ${WALL} # /usr/local/bin/scripts/umount_disks.sh # echo "Veracrypt disks have been umounted!" # ${SHUTDOWN} -h now "apcupsd UPS ${2} initiated shutdown" echo "System will enter into hibernation!" systemctl hibernate ;;
至此,可以启动apcupsd
系统服务了。
$ sudo /etc/init.d/apcupsd start
该服务启动后,除了正常的UPS电源实时监测外,还会在本机的3551端口上开启一个Web服务器。我们可以在命令行终端使用apcaccess
命令来获得电源的运行状态。其中的主要参数为:
-
LINEV
:线电压 -
LOADPCT
:负载占比 -
TIMELEFT
:电池剩余维持时间 -
LOTRANS
:最低容许输入电压 -
HITRANS
:最高容许输入电压 -
BATTV
:电池输出电压 -
NOMPOWER
:额定功率
$ sudo apcaccess status APC : 001,036,0870 DATE : 2021-09-03 13:09:29 +0800 HOSTNAME : [YOUR-HOST-NAME] VERSION : 3.14.14 (31 May 2016) debian UPSNAME : [YOUR-UPS-NAME] CABLE : USB Cable DRIVER : USB UPS Driver UPSMODE : Stand Alone STARTTIME: 2021-09-03 13:03:24 +0800 MODEL : Back-UPS BK650M2-CH STATUS : ONLINE LINEV : 226.0 Volts LOADPCT : 20.0 Percent BCHARGE : 100.0 Percent TIMELEFT : 29.9 Minutes MBATTCHG : 5 Percent MINTIMEL : 3 Minutes MAXTIME : 0 Seconds SENSE : Low LOTRANS : 160.0 Volts HITRANS : 278.0 Volts ALARMDEL : 30 Seconds BATTV : 13.5 Volts LASTXFER : No transfers since turnon NUMXFERS : 0 TONBATT : 0 Seconds CUMONBATT: 0 Seconds XOFFBATT : N/A SELFTEST : OK STATFLAG : 0x05000008 SERIALNO : 000000000000 BATTDATE : 2001-01-01 NOMINV : 220 Volts NOMBATTV : 12.0 Volts NOMPOWER : 390 Watts FIRMWARE : 294803G -292804G END APC : 2021-09-03 13:09:39 +0800