住宅主机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"

记下 vendorid 和 productid,后面配置需要。

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/syslog 中 upsmon 的日志,确认是否触发了低电量事件。
如果阈值过高,修改 /etc/nut/upsmon.conf 中的 BATTERYLEVEL 和 MINSUPPLIES。

  • 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
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意