自从上了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版本。

每月400的电费伤不起,利用IPMI给NAS自动开关机

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

每月400的电费伤不起,利用IPMI给NAS自动开关机

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

每月400的电费伤不起,利用IPMI给NAS自动开关机

命令格式如下:

ipmitool -I lanplus -H -U <用户名> -P <密码> power on

其中指的是NAS的IPMI地址,相应的用户名和密码也就是登录IPMI的账号信息。

比如我这里的命令是这样的:

每月400的电费伤不起,利用IPMI给NAS自动开关机

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

每月400的电费伤不起,利用IPMI给NAS自动开关机

网上搜了下对应错误的解决方案,试了却没有起作用。

绝望之际,偶然发现短时间内再次运行脚本就成功了,我猜想可能是因为网络延迟造成无法响应的缘故。

于是将脚本更新一下,增加了一个循环,直至执行成功。

开机脚本 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定时任务:

每月400的电费伤不起,利用IPMI给NAS自动开关机

保证在主机开机之后,对应的CT,Docker也能自动启动,运行以下命令:

pct set -onboot 1

docker update --restart unless-stopped 容器名称或ID

开关机脚本已经在我的环境中正常运行几周了,现在每周通电时间只有四十几小时,大大节省了用电开销,同样可以满足我平日的NAS需求;模拟软关机的方式也不会强制断电,损害硬盘健康。

如果大家的NAS系统支持IPMI,也可以采用此种方式节省每月电费。

,

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。