為了防止異外斷電對台式機中的機械硬盤造成物理損傷以及丟失正在編輯的數據,我最近搜索調研了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