您现在的位置是:首页 >技术交流 >【浪潮sm5212 m4服务器自动修改风扇转速以降低噪音】网站首页技术交流

【浪潮sm5212 m4服务器自动修改风扇转速以降低噪音】

米奇的夏天 2026-04-10 12:01:04
简介【浪潮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接口地址

  1. 开机按del键进入BIOS系统
  2. 选择Server Mgmt -->BMC network configuration,进入BMC网络配置界面
    在这里插入图片描述
  3. Get BMC Dedicated Parameters选择Manual 配置独享BMC端口的IP
    在这里插入图片描述
  4. Configuration Addresss source选择static; 配置为静态模式ip模式
  5. 配置管理接口地址:
参数含义我的配置
Station IP addressBMC的IP192.168.2.100
Subnet mask子网掩码255.255.255.0
Router IP address网关192.168.2.1

网关设置应避免使用192.168.1.1等地址,因为会与路由器网关冲突

  1. 配置BMC(IPMI)的用户和密码
    浪潮的默认用户和密码都是admin
    如果不是可以修改
    在这里插入图片描述
    在这里插入图片描述

  2. 保存配置
    在这里插入图片描述

注明:本博客以上方法借鉴这篇文章配置

完成上面步骤就已经可以把笔记本和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元不到喜提性能如此之强的服务器,真是垃圾佬的福音,你就用吧,一用一个不吱声。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。