住宅主机UPS断电自动备份关机:零基础配置教程

为什么需要UPS自动关机?

住宅主机(比如NAS、家庭服务器)在断电时,如果只靠UPS供电,电池耗尽后系统会直接掉电——轻则损坏文件系统,重则导致硬盘坏道或数据丢失。
配置UPS断电自动备份+关机,可以在电池耗尽前完成数据保存并安全关闭系统,避免一切风险。

准备工作

  • 一台支持USB/串口通信的UPS:多数家用UPS(如APC、CyberPower、山特)都带USB数据线,没有的话需要额外购买。
  • 一台运行Linux的住宅主机(本文以Ubuntu 20.04为例,其他发行版命令大同小异)或者Windows主机(后文会提替代方案)。
  • UPS与主机用USB线连接,并确认主机已识别设备(通常显示为/dev/usb/hiddev0/dev/ttyUSB0)。
如果使用群晖/威联通NAS,它们自带UPS管理功能,直接在控制面板配置即可,不需要手动安装NUT。本文面向自行搭建Linux主机的用户。

安装与配置NUT

NUT(Network UPS Tools)是通用的UPS管理软件,免费开源。

1. 安装NUT

sudo apt update
sudo apt install nut nut-client nut-server

2. 检测UPS连接

插入USB线后,运行 lsusb 查看UPS是否识别。
再执行:

sudo nut-scanner -U

它会输出类似:

[ups]
driver = "usbhid-ups"
port = "auto"
vendorid = "051d"
productid = "0002"

记下 vendoridproductid,后面配置需要。

3. 配置NUT

编辑 /etc/nut/ups.conf,添加UPS定义:

[myups]
    driver = usbhid-ups
    port = auto
    vendorid = 051d
    productid = 0002
    desc = "Home UPS"

编辑 /etc/nut/upsd.conf,监听本地连接:

LISTEN 127.0.0.1 3493
LISTEN ::1 3493

编辑 /etc/nut/upsmon.conf,设置用户和关机条件:

MONITOR myups@localhost 1 nutuser secret master
SHUTDOWNCMD "/sbin/shutdown -h +0"     # 当电池低电量时立即关机
NOTIFYCMD /sbin/upsmon
NOTIFYFLAG ONBATT SYSLOG+EXEC

创建用户 nutuser,设置密码(这里的 secret 要改为你自己设的密码):

sudo useradd nutuser
sudo passwd nutuser

然后将用户加入 nut 组:

sudo usermod -aG nut nutuser

编辑 /etc/nut/upsd.users

[nutuser]
    password = secret
    upsmon master

4. 设置备份与关机脚本

在断电且电池低电量时,upsmon 会执行 SHUTDOWNCMD,但我们还希望在关机前先执行备份操作。
修改 SHUTDOWNCMD 为自定义脚本:

SHUTDOWNCMD "/usr/local/bin/ups-safe-shutdown.sh"

创建脚本 /usr/local/bin/ups-safe-shutdown.sh

#!/bin/bash
# 备份重要数据(示例:打包 /home/user/important 到 /backup)
tar -czf /backup/emergency_backup_$(date +%Y%m%d%H%M).tar.gz /home/user/important
# 然后关机
/sbin/shutdown -h +0

赋予执行权限:

sudo chmod +x /usr/local/bin/ups-safe-shutdown.sh

5. 启动NUT服务

sudo systemctl enable nut-server nut-monitor
sudo systemctl start nut-server nut-monitor

检查服务状态:

sudo systemctl status nut-monitor

测试模拟断电

  1. 拔掉UPS的市电输入(注意:不要拔主机电源线),只让UPS通过电池供电。
  2. 观察主机是否收到断电通知(可在 /var/log/syslog 中看到类似 UPS on battery)。
  3. 等待电池电量下降到设定阈值(默认约30%),应该触发关机脚本,执行备份并关机。
  4. 也可以手动模拟低电量:用NUT命令强制设置电池电量为临界值。
# 查看UPS状态
upsc myups@localhost
# 强制模拟低电量(危险,仅在测试时用)
upsrw -s battery.charge=10 myups@localhost -u nutuser -p secret

测试完成后,重新接通市电,开机检查备份文件是否生成。

常见问题与避坑

  • Q: 执行 nut-scanner 没发现UPS?

检查USB线是否数据线(有些充电线不通数据),换一个USB口,或重启主机。

  • Q: 关机脚本没有执行?

查看 /var/log/syslogupsmon 的日志,确认是否触发了低电量事件。
如果阈值过高,修改 /etc/nut/upsmon.conf 中的 BATTERYLEVELMINSUPPLIES

  • Q: Windows用户怎么办?

Windows下可以使用UPS厂商自带的软件(如APC PowerChute、CyberPower PowerPanel)或开源软件 WinNUT(Windows版NUT客户端)。
配置思路类似:设置USB通信、定义脚本。

  • Q: 电池老化后容量不准怎么办?

定期校准UPS(按说明书操作),并在upsmon中设置保守的关机电量(如剩余20%)。

  • Q: 多个主机共享一个UPS?

NUT支持网络监控,将master主机配置为服务器,其他主机作为slave。
本文仅介绍单机场景。

结语

通过NUT软件,你可以在断电时让住宅主机自动备份重要数据并安全关机,不用再担心数据丢失或硬件损坏。
建议首次设置后,找一个周末实际断电测试一次,确保脚本和配置都正确。
如果遇到问题,先查看系统日志(journalctl -u nut-monitor),再对照本文指南排查。

如果你使用的是群晖或威联通NAS,它们的UPS管理功能更简单——直接用配套软件即可。
本教程适用于自行搭建Linux主机的场景,也适用于部分支持NUT的Windows环境。

分享到:
上一篇
Linux防火墙放行443 80跨境端口
下一篇
AI中转站对接豆包DeepSeek多模型
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意