UPS断电防护自动备份关机住宅主机
为什么住宅主机需要UPS断电自动关机
家庭服务器或NAS放在家里,最怕突然停电。
如果只是路由器重启还好,可硬盘正在读写时断电,轻则文件损坏,重则硬盘坏道甚至系统崩溃。UPS(不间断电源) 能提供几分钟缓冲,让你有足够时间自动执行备份并安全关机。
本文专为住宅主机场景,教你从零完成这套保护方案。
要准备哪些东西
首先确认你手头的 UPS 型号是否支持通信功能。
大部分家用 UPS(如 APC BK650、施耐德 SMC系列)都带 USB 或串口线,能和电脑交换电池电量信号。
此外还需要一台运行 Linux 的服务器(比如 Ubuntu 22.04),以及一根原装通信线。注意: 普通排插式 UPS 只防浪涌,没有通信接口就无法实现自动关机。
具体配置步骤(以NUT工具为例)
NUT(Network UPS Tools)是主流开源方案,支持绝大多数带通信功能的UPS。
操作分四步:
1. 安装驱动和配置工具
sudo apt update
sudo apt install nut nut-client nut-server
sudo usermod -aG nut $USER
2. 识别UPS并写入配置
连接 UPS 的 USB 线到服务器,运行下面命令查看设备:
lsusb | grep UPS
如果没有显示,试试 ls /dev/ttyUSB* 或 ls /dev/usb/*。
找到设备后编辑主配置文件 /etc/nut/ups.conf,加上:
[myups]
driver = usbhid-ups
port = auto
desc = "住宅主机UPS"
3. 启动驱动并设置自动关机策略
启动 UPS 驱动:
sudo upsdrvctl start
测试通信是否正常:
sudo upsc myups
如果输出电池电压、负载等信息,说明连接成功。
下一步配置关机策略:编辑 /etc/nut/upsmon.conf,找到 SHUTDOWNCMD 改为:
SHUTDOWNCMD "/sbin/shutdown -h +0"
同时设置低电量触发值(默认5%电量时关机):
NOTIFYCMD /sbin/upsmon
重点: 让系统在断电后检测到电量低于阈值时自动执行关机命令。
重启 nut 服务生效:
sudo systemctl restart nut-server nut-client
sudo systemctl enable nut-server nut-client
容易踩的几个坑
- 通信线要插对电脑:有些用户把线插在路由器上,导致通信失败。必须直接插在主服务器上。
- 权限不足:没有加入 nut 组或 udev 规则缺失,
upsc会报 permission denied。临时方案sudo chmod 666 /dev/usb/hiddev0,长期建议写 udev 规则。 - 测试方法:不要直接拔市电测试!先从 UPS 上拔下服务器电源,观察系统是否在预订时间关机。更安全的方法是用
upsmon -c fsd模拟电量耗尽,看机器是否正常关机。 - 自启动失败:有些发行版默认没启用 nut 服务,检查
systemctl status nut-server是否为 active。
验证效果与常见问题
完成配置后,执行以下检查确认一切正常:
upsc myups battery.charge
upsc myups ups.status
ups.status 显示 OL 表示在线,OB 表示意外断电。
此时立刻查看日志 /var/log/syslog,应该能看到 upsmon 监听到状态变化。测试中断电:拔掉 UPS 的市电输入(不是拔服务器),观察一分钟左右系统是否自动关机。
如果成功,你的住宅主机就拥有了可靠的断电防护自动备份关机能力。
常见问题
- Q:如何设置电量降到30%时就关机?A:修改
/etc/nut/upsmon.conf中的BATTERYLEVEL 5为BATTERYLEVEL 30。 - Q:想同时备份再关机怎么办?A:在
NOTIFYCMD指向的脚本里写备份命令,例如rsync或tar。 - Q:没有NUT系统推荐?Windows下可以用厂家自带软件,但Linux推荐NUT,稳定且免费。