您现在的位置是:首页 >技术交流 >【浪潮sm5212 m4服务器自动修改风扇转速以降低噪音】网站首页技术交流
【浪潮sm5212 m4服务器自动修改风扇转速以降低噪音】
【浪潮sm5212 m4服务器自动修改风扇转速以降低噪音】
前言
前段时间想升级一下家里的 HP T610 瘦客户机,但是由于瘦客户机本身cpu焊死,内存条上限较低等原因,无法升级,除非整套包括主板一起更换,但如此做就等于重新组一套新的了,所以干脆网购了一套云厂商淘汰下来的浪潮sm5212 m4服务器
| 名称 | 参数 | 我的选装 |
|---|---|---|
| 处理器 | 支持两颗E5-26xx V3V4处理器 | 一颗E5-2680 V4(14核28线程) |
| 内存 | 支持16根DDR4内存(单根最高64G) | 两条32G DDR4 ECC服务器内存条 |
| 硬盘 | 12个3.5寸硬盘接口 支持SATA/SAS/SSD | 西数蓝盘 1TB |
| 扩展槽 | 2个X16 1个X8 PCIE接口 半高挡片 | 2个X16 1个X8 PCIE接口 半高挡片 |
| 阵列卡 | 板载3008阵列卡 | 板载3008阵列卡 |
| 网卡 | 板载双口千兆 / BMC远程管理口(IPMI接口) | 板载双口千兆 / BMC远程管理口 |
| 电源 | 支持550w 双电源 | 550w 单电源 |
踩坑:
1、在组装的过程中,由于我是只装了一个CPU,所以要注意CPU安装的位置,要安装在电源那一侧,否则开不了机
2、我第一次安装使用的统信的家庭版镜像,发现安装了后怎么也进不去系统,后面换成了ubuntu系统,一次就成功了,装机推荐工具ventor,推荐理由:轻便简洁无广告并且易使用
开始折腾
研究方案
那服务器一开机那风扇声简直跟战斗机一样,很是影响日常生活,用手机分贝测试软件测试有80分贝左右,于是我在开机观察了一下CPU温度后,试着拔掉了三个风扇(总共4个尼得科的风扇),只保留正对着CPU的风扇,实测风扇温度稳定在30°,由此可见一台风扇足以压得住,这时声音小一些了但依然有60多分贝,还是很吵,于是我就开始百度解决方案,经过一番搜索,找到一个靠谱的方案,通过主板的IPMI接口访问BMC系统,然后去修改风扇的转速,把转速从100%改成10%,风扇声音瞬间就下去了,效果显著,放在卧室都完全不影响睡眠的程度,但是该方案有个缺点就是服务器不能断电,断电后就需要使用笔记本用网线连接服务器IPMI接口去手动修改风扇转速,这显然不合理。于是再去百度一番无果,只能自己研究想办法了。
改进方案
经过冥思苦想,我突然灵光一现,如果用一根网线一端插服务器网口,一端插服务器IPMI接口是否可以实现自己控制自己呢?说干就干,一番操作下去发现果然可以,那么现在要解决的问题就是让服务器开机后自己去访问BMC接口,然后修改风扇转速,我马上用postapi去请求接口来调整转速,总共三个接口(第一步请求登录接口拿到授权token,第二步携带token去修改风扇转速为可调整,第三步修改风扇转速为10%),测试一番有效果,然后我再去把上面三个步骤用shell脚本来实现,但由于个人的shell脚本水平有限,实现起来很是困难,卡在第二步搞不下去,然后我转换思路改用python,因为大多数发行版linux系统都是默认安装了Python解释器的,于是就有了以下Python脚本(本人不会Python,下面代码是自己现学现写的,有什么错误或需要优化的地方还请各位不吝赐教)
开始实现
1、BIOS配置IPMI接口地址
- 开机按del键进入BIOS系统
- 选择Server Mgmt -->BMC network configuration,进入BMC网络配置界面

- Get BMC Dedicated Parameters选择Manual 配置独享BMC端口的IP

- Configuration Addresss source选择static; 配置为静态模式ip模式
- 配置管理接口地址:
| 参数 | 含义 | 我的配置 |
|---|---|---|
| Station IP address | BMC的IP | 192.168.2.100 |
| Subnet mask | 子网掩码 | 255.255.255.0 |
| Router IP address | 网关 | 192.168.2.1 |
网关设置应避免使用192.168.1.1等地址,因为会与路由器网关冲突
-
配置BMC(IPMI)的用户和密码
浪潮的默认用户和密码都是admin
如果不是可以修改


-
保存配置

完成上面步骤就已经可以把笔记本和IPMI接口用网线连接起来,即可通过笔记本访问BMC管理系统了
插入网线后给笔记本有线网卡配置ip分配方式为静态,设置ip地址为192.168.2.2,子网掩码255.255.255.0,网关192.168.2.1,再打开浏览器访问192.168.2.100即可访问到BMC管理系统,在里面就可以设置风扇转速。

2、实现服务器自己访问BMC系统

连接配置好后可以在服务器系统里面用浏览器访问BMC管理系统(192.168.2.100)
3、实现python脚本来自动修改风扇转速
python脚本如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import http.client
import re
import socket
import time
dic = {
'username': 'admin',
'password': 'admin',
'ip': '192.168.2.100',
'speed': '1', # 需要调整的转速
'maxConnectivityTest':100, # 超时重连的最大次数
'fans':["0", "1", "2", "3", "4", "5", "6", "7"] # 需要调整转速的风扇端口 一共8个端口 0~7 (一般默认插的是 0,2,4,6)
}
print("感谢使用修改风扇速度脚本")
def is_port_open(ip_address, port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex((ip_address, port))
if result == 0:
print('bmc控制台端口测试通过 ', time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())))
return True
else:
print('bmc控制台连接超时,端口测试失败 ', time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())))
return False
index = 0
def loop_func(second):
global index
while not is_port_open(dic.get('ip'), 80):
if index+1 >= dic.get('maxConnectivityTest'):
return False
index = index + 1
time.sleep(second)
return True
if not loop_func(5):
print("重连超出最大次数" + str(dic.get('maxConnectivityTest')) + "次。
请检查网线是否接入管理端口")
exit()
print(f'用户名: {dic.get("username")}')
print(f'密码: {dic.get("password")}')
print(f'ip: {dic.get("ip")}')
print(f'待调整速度: {dic.get("speed")} %')
print("开始登录bmc------>")
print('——————————————————————————————————————————————————————————————')
# 执行登录请求
conn = http.client.HTTPConnection(dic.get("ip"))
payload = "WEBVAR_USERNAME=" + dic.get("username") + "&WEBVAR_PASSWORD=" + dic.get("password")
headers = {
'Accept': "application/json, text/plain, */*",
'Accept-Language': "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
'Cache-Control': "no-cache",
'Connection': "keep-alive",
'Content-Type': "application/json;charset=UTF-8",
'Origin': "http://192.168.1.100",
'Pragma': "no-cache",
'Referer': "http://192.168.1.100/index.html",
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0",
'Cookie': "BMC_IP_ADDR=192.168.1.100; test=1",
'Accept-Encoding': "gzip, deflate, br"
}
conn.request("POST", "/rpc/WEBSES/create.asp", payload, headers)
tokenStr = conn.getresponse().read().decode("utf-8")
match = re.search(r"'SESSION_COOKIE' : '([^']*)'", tokenStr)
if match:
session_cookie = match.group(1)
else:
raise ValueError("SESSION_COOKIE not found in the string")
# 输出截取的信息
print('登录成功')
print(f'获取到Session Cookie: {session_cookie}')
print('——————————————————————————————————————————————————————————————')
print('开始修改风扇为手动')
payload1 = "MODE=1"
headers1 = {
'Accept': "application/json, text/plain, */*",
'Accept-Language': "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
'Cache-Control': "no-cache",
'Connection': "keep-alive",
'Content-Type': "application/json;charset=UTF-8",
'Origin': "http://192.168.1.100",
'Pragma': "no-cache",
'Referer': "http://192.168.1.100/main.html",
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0",
'Cookie': "BMC_IP_ADDR=192.168.1.100; test=1; SessionCookie=" + session_cookie + "; Username=admin; PNO=4; gMultiLAN=true; settings={eth:[0,1],ethstr:['eth0','eth1'],lan:[8,1],enable:[1,1]}",
'Accept-Encoding': "gzip, deflate, br"
}
conn.request("POST", "/rpc/setfanmode.asp", payload1, headers1)
conn.getresponse().read().decode("utf-8")
print('已修改风扇为手动')
print('——————————————————————————————————————————————————————————————')
print('开始调整风扇风速')
headers2 = {
'Accept': "application/json, text/plain, */*",
'Accept-Language': "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
'Cache-Control': "no-cache",
'Connection': "keep-alive",
'Content-Type': "application/json;charset=UTF-8",
'Origin': "http://192.168.1.100",
'Pragma': "no-cache",
'Referer': "http://192.168.1.100/main.html",
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0",
'Cookie': "test=1; SessionCookie=" + session_cookie + "; BMC_IP_ADDR=192.168.1.100; Username=admin; PNO=4; gMultiLAN=true; settings={eth:[0,1],ethstr:['eth0','eth1'],lan:[8,1],enable:[1,1]}",
'Accept-Encoding': "gzip, deflate, br"
}
for x in dic.get('fans'):
print("调整风扇" + x)
payload2 = "ID=" + x + "&PERCENT=" + dic.get("speed")
conn.request("POST", "/rpc/setfanspeed.asp", payload2, headers2)
conn.getresponse().read().decode("utf-8")
print("调整风扇" + x + "完成")
print('——————————————————————————————————————————————————————————————')
print('关闭连接')
conn.close()
print('退出脚本')
exit()
到这一步就可以通过Python来修改风扇速度了
python3 fan.py
4、把运行脚本的命令加入开机自启
我是在ubuntu系统上通过服务的方式配置开机自启的,我的python脚本路径是:/home/wanjun/桌面/fan.py
1、创建一个新的服务单元文件。在终端中输入以下命令创建startFan_service.service文件:
sudo nano /etc/systemd/system/startFan_service.service
2、在打开的文件中添加以下内容::
[Unit]
Description=Start Fan Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/python3 /home/wanjun/桌面/fan.py
[Install]
WantedBy=multi-user.target
其中 /home/wanjun/桌面/fan.py 是你的 Python 脚本的路径。请确保你具有对该脚本的执行权限。
3、按下 Ctrl + X 保存文件并退出。
4、运行以下命令以启用 systemd 服务:
sudo systemctl enable startFan_service.service
5、reboot 重启系统,你的 Python 脚本将在开机后自动运行。
题外话
在最后,不得不说浪潮服务器真的牛逼好用,作为个人学习使用绰绰有余,ubuntu系统也是非常nice。


2000元不到喜提性能如此之强的服务器,真是垃圾佬的福音,你就用吧,一用一个不吱声。




QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
U8W/U8W-Mini使用与常见问题解决
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结