每月400的电费伤不起,利用IPMI给NAS自动开关机
自从上了NAS这条贼船,家里的各种开销就增加了。以前使用Rock 5b开发板+USB硬盘盒的组合还好,因为ARM架构的功耗非常低;但是自从几个月前自己基于超微X11SSH-F服务器主板DIY了一套NAS系统,加上散热风扇、HBA卡、SAS硬盘的用电开销,每月电费就直线上升,去年年底付了四百多了电费。当然这也不能完全归咎于存储系统,毕竟因为个人爱好的缘故,家里的各式电子设备比较多,而且目前国家采用的阶梯型计费系统,12月份往往是一年中电费最高的月份。
我自己分析了一下,家中NAS的主要用途是自动下载高清电影,但是实际上存储中的电影太多没有时间及时观看,所以NAS保持24小时开机不间断下载完全没必要,其实只要保证在家中的时间段可以媒体播放娱乐即可。
自动开关机有很多种实现办法,我最早hack的Pogoplug是通过定时插座实现自动开关机的,优点是方法简单,但是关机是强制关机,对于硬盘健康不利。
不少电脑支持Wake On Lan技术,直接在BIOS里开启这一功能即可。
这项技术的特点如下:
依赖网卡(NIC) 接收特定的 Magic Packet 进行远程唤醒。
需要主板和网卡支持 WoL,并在 BIOS 和操作系统中启用相关设置。
主要用于消费级 PC 和服务器,无法监控系统健康状态,仅用于远程开机。
一般只能在 同一局域网(LAN) 发送魔术包,远程使用需要端口转发或 VPN。
而我最近折腾的服务器主板拥有IPMI接口,可以利用超微的IPMI Tool实现定时开关机。
机制和WoL也是不一样的:
独立于操作系统,通常由服务器上的 BMC(Baseboard Management Controller) 处理。
提供 远程电源控制(开机、关机、重启)功能,类似物理电源按钮的作用。
支持硬件级监控(如 CPU 温度、电源状态、风扇速度等)。
通过 IP 地址 访问,不受局域网限制,可以通过外网远程管理。
常用于企业级服务器,如 Dell iDRAC、HPE iLO、Supermicro IPMI 等。
具体操作方法如下:
首先到超微的官网中下载名为SMCIPMITool的软件包,支持Windows和Linux系统。
因为需要网络中的另一台设备向NAS系统发送指令开关机,所以这台设备需要保持长期在线。
在我家的环境中,有一个Rock5b的开发板作为软路由保持24小时开机,我准备让其承担这一角色。因此我下载了Linux版本。

将软件包通过Putty或者WinSCP等软件拷贝到开发板上。

解压缩,我们要用到的就是SMCIPMITool。注意需要预先安装JAVA环境。

命令格式如下:
ipmitool -I lanplus -H -U <用户名> -P <密码> power on
其中指的是NAS的IPMI地址,相应的用户名和密码也就是登录IPMI的账号信息。
比如我这里的命令是这样的:

将命令放到sh文件中执行,却收到了Unable to establish IPMI v2 / RMCP+ session的报错。

网上搜了下对应错误的解决方案,试了却没有起作用。
绝望之际,偶然发现短时间内再次运行脚本就成功了,我猜想可能是因为网络延迟造成无法响应的缘故。
于是将脚本更新一下,增加了一个循环,直至执行成功。
开机脚本 power_on.sh
#!/bin/bash
IPMI_CMD="/usr/bin/ipmitool -H 192.168.1.144 -I lanplus -U 用户名 -P 密码 chassis power on"
# 最大尝试次数
MAX_RETRIES=5
COUNT=0
while [ $COUNT -lt $MAX_RETRIES ]; do
OUTPUT=$($IPMI_CMD 2>&1)
echo "$OUTPUT"
# 如果执行成功,退出循环
if echo "$OUTPUT" | grep -q "Chassis Power Control: Up/On"; then
exit 0
fi
# 增加计数器
COUNT=$((COUNT + 1))
# 等待1秒后重试
sleep 2
done
echo "Failed to power on after $MAX_RETRIES attempts."
exit 1
关机脚本 power_off.sh,注意这里要使用power soft软关机,让系统执行标准的关闭流程,就像执行 shutdown -h now 命令一样。
#!/bin/bash
IPMI_CMD="/usr/bin/ipmitool -H 192.168.1.144 -I lanplus -U 用户名 -P 密码 chassis power soft"
# 最大尝试次数
MAX_RETRIES=5
COUNT=0
while [ $COUNT -lt $MAX_RETRIES ]; do
OUTPUT=$($IPMI_CMD 2>&1)
echo "$OUTPUT"
# 如果执行成功,退出循环
if echo "$OUTPUT" | grep -q "Chassis Power Control: Up/On"; then
exit 0
fi
# 增加计数器
COUNT=$((COUNT + 1))
# 等待1秒后重试
sleep 2
done
echo "Failed to power off after $MAX_RETRIES attempts."
exit 1
可以手工执行一下两个sh文件,确认脚本可以成功运行。
crontab -e
编辑crontab定时任务:

保证在主机开机之后,对应的CT,Docker也能自动启动,运行以下命令:
pct set -onboot 1
docker update --restart unless-stopped 容器名称或ID
开关机脚本已经在我的环境中正常运行几周了,现在每周通电时间只有四十几小时,大大节省了用电开销,同样可以满足我平日的NAS需求;模拟软关机的方式也不会强制断电,损害硬盘健康。
如果大家的NAS系统支持IPMI,也可以采用此种方式节省每月电费。

骑牛牛上高速
校验提示文案
雨鱼1988国酿精品
校验提示文案
Mr_Po
校验提示文案
焱炎火
校验提示文案
弗老大
校验提示文案
伯母我是你女儿的男友
校验提示文案
孤独的水滴
校验提示文案
2YW3i
校验提示文案
小凯利fang
校验提示文案
华莱士真好吃嘿嘿嘿
校验提示文案
哥哥你好棒
校验提示文案
headbee
校验提示文案
尼康105
校验提示文案
棒打棒子真棒
校验提示文案
乌干达的喵喵咪
校验提示文案
你赖东东不错ma
校验提示文案
搞机的老周
校验提示文案
陈不明白
校验提示文案
zjpoint
校验提示文案
猫仔仔
校验提示文案
爱折腾的老狐狸
校验提示文案
孤独的水滴
校验提示文案
fresh生
校验提示文案
如来泡观音
校验提示文案
值友2014461284
校验提示文案
棒打棒子真棒
校验提示文案
威尔史密斯_
校验提示文案
混日子的猴子
校验提示文案
值友9508026507
校验提示文案
陈不明白
校验提示文案
雨的心跳
校验提示文案
伯母我是你女儿的男友
校验提示文案
弗老大
校验提示文案
ptera
校验提示文案
搞机的老周
校验提示文案
虫虫不咬人
校验提示文案
尼康105
校验提示文案
AZJoan
校验提示文案
无证水电工小青蛙
校验提示文案
怡然自得210
校验提示文案