海康威视R1这台机器颜值、性价比都很高,功耗低、四盘位、N100、双2.5G网卡、板载EMMC、有两个NVME固态硬盘插槽,基本满足了我对NAS的需求。但机器自带的NAS系统不能当作普通Linux系统使用,所以机器到手第一时间就安装了Ubuntu Server 24.04系统(为了不破坏板载闪存上的原版系统,Ubuntu系统安装在NVME固态硬盘上,后续会庆幸这个英明的决定,哈哈)。 但海康威视R1这台机器当作一台7*24小时运行的Ubuntu服务器,存在几大硬伤:
一、机箱氛围灯无法关闭,虽然看着很酷炫
二、风扇无法控制转速,重负载时CPU温度会飙升到90度,平时无负载时风扇不减速或停止
三、前面板小屏幕无法关闭
第二个问题,风扇转速控制
R1有两个风扇,一个机箱后面的大风扇,一个是cpu使用的小风扇。
换Ubuntu系统之后,风扇不能智能控制转速
安装Ubuntu之后:
sensors里能看到 CPU、ACPI、NVMe 之类,却 没有 fan;/sys/class/hwmon/下面也 找不到fan*_input,似乎根本不存在风扇;- 只要CPU负载上去温度就能轻易飙到90度,风扇似乎不工作(其实是不能智能调节)
问题在于 板子上的监控芯片太新,内核当时还没跟上。
先搞清楚:风扇是谁在管
跑一遍(自动模式即可):
sudo sensors-detect --auto
在 R1 这类机型 上跑 sensors-detect --auto,芯片探测里通常会看到 ITE IT8613E(ISA 地址以终端输出为准)。CPU 是 N100,它自己 不管机箱风扇的 tach;真正和风扇 PWM、转速脉冲打交道的是这块 IT8613E。
内核里还没有这个型号的驱动——换句话说,自带的 it87 模块装不上、也认不出, sysfs 里自然什么都没有。到这里,其实差一步:换一份社区维护的 it87 源码,用 DKMS 编进去。
第一步:把 IT8613E「点亮」
依赖按常规装齐就行:
sudo apt update
sudo apt install -y dkms build-essential linux-headers-$(uname -r) git lm-sensors
驱动用的是 GitHub 上 frankcrawford/it87 这一支(仓库链接),对 IT8613E 这类比主线更友好。
下面这个坑我踩过:克隆下来的目录名必须是 it87。DKMS 安装脚本会用 当前目录名 去拼构建目标;如果你图省事克隆成 it87-frank 之类,编译阶段会报 找不到某某 .o,和代码没关系,纯命名问题。
cd /tmp
rm -rf it87
git clone --depth 1 https://github.com/frankcrawford/it87.git it87
cd it87
sudo ./dkms-install.sh
编完、modprobe 成功之后,sensors 里会出现 it8613-isa-xxxx 一块,电压、几路温度、fan2 / fan3 的 RPM、pwm2 往上都有——这时候才算 「看得见风扇了」。
模块还要记得 开机加载。我写的是 /etc/modules-load.d/it87.conf,里面一行 it87 就够。DKMS 会跟着内核更新去重编,但 不会替你保证每次启动都 modprobe,这一步别省。
若你开了 Secure Boot,DKMS 模块签名要按发行版文档走一遍 MOK;没开的话一般无感。
第二步:fan2、fan3 分别是什么风扇
芯片里的编号很「程序员」:fan2 不一定等于主板丝印上的 FAN2`。最笨也最稳的办法,是自己做一个小实验:
在 /sys/class/hwmon/ 里找到 name 为 it8613 的那一个目录,记下当时的 pwmN 和各路 fan*_input。然后只动一路,比如把 pwm2 改成手动、占空比从 120 拉到 70,等几秒,看 哪一路 RPM 跟着掉。再换 pwm3 试一遍。
我当时的结果是:动 pwm2 只有 fan2 跟着变,动 pwm3 只有 fan3 跟着变;fan4 一直是 0,调 pwm4、pwm5 也没带动前两路——基本就当 空脚或未用 了。
转速上还能看出一点性格:一路偏低转、一路偏高转。偏低的那颗,多半是 机箱或风道的大扇;偏高的那颗,更像 CPU 散热风扇。我试验出来的结果是,fan2是机箱风扇,fan3是cpu风扇。
第三步:实现风扇的智能转速控制
N100 CPU的功耗很低,低负载时CPU风扇完全可以用非常低的转速,甚至短暂停转,机箱风扇也是一样,毕竟是铝合金机箱散热。还有就是这两个风扇的控制策略应该不同,CPU风扇转速只取决于CPU,而机箱风扇要兼顾硬盘以及整个环境温度。所以:
- CPU 那颗小风扇:主要看
coretemp+ 板载it8613里的温度,低温该停就停; - 机箱风扇:除了 CPU 和板载,还要把
nvme、以及 SATA 能读到的drivetemp拉进来——硬盘热了,加速通风散热。
另外:参照一些其它的成品机器风扇策略,在开机和关机时短暂让风扇高速运转一会。
第四步:分路怎么写进脚本
我自己写了一个风扇智能控制脚本(起名随意,这里叫 fanctl-thermal),逻辑很简单:
- 隔几秒读一圈 hwmon 的
temp*_input(记得单位是毫摄氏度,自己除 1000); - 每个 PWM 单独一条曲线:自己的温度源列表、低温阈值、高温阈值、PWM 上下限;
- 加一点 滑动平均 和 每步 PWM 变化上限;
- 紧急温度用 所有通道出现过的温度源并在一起取 max,谁爆表了两路一起 拉满,宁可吵一点。
drivetemp 这块:没有插入硬盘时,内核里可能根本没有对应的 hwmon,写了也不报错,就当多一个可选输入。有机械盘、内核能读到温的话,建议 modprobe drivetemp,再在 /etc/modules-load.d/ 里放一行 drivetemp,省得每次重启忘加载。
部署位置按自己习惯即可,我这边是:
- 可执行:
/usr/local/sbin/fanctl-thermal - 配置:
/etc/fanctl-thermal.conf - systemd:
/etc/systemd/system/fanctl-thermal.service
第一次跑通之后:
sudo systemctl daemon-reload
sudo systemctl enable --now fanctl-thermal.service
journalctl -u fanctl-thermal -f
日志里如果能看到 chassis / cpu 两路各算各的、目标 PWM 不一样,就说明 分路真的生效了。
怎么验收、怎么微调
sensors里 it8613 下fan2/fan3读数正常;- 轻负载时,能慢慢 爬到 PWM 0(机箱风扇能看到完全停转,CPU风扇没拆机不确定);
- 往 SSD 拷大文件或故意让盘热一点时,机箱那路 应该比「只看 CPU」时 更勤快;
journalctl里两路日志。
调参没有银弹:多盘、夏天、机柜密闭 就把机箱那条曲线 收紧一点;觉得 CPU 扇停太晚,就动 [pwm3] 的低温阈值或平均窗口——窗口越小反应越快,但也越容易抖。
写在最后:
还是那句:自己机器自己负责。
回过头看,整条路其实就是:社区驱动把芯片认出来 → sysfs 里把风扇和 PWM 对上号 → 再写一层「比官方笨一点、但听自己话」的温控。离「完美」肯定还有距离——毕竟海康原厂的策略和 EC 细节我们拿不到——但至少 Ubuntu Server 上的 R1,终于又像一个正常 NAS 那样会动态调节风扇转速了。
文中硬件信息与命令基于公开资料与个人实践整理;具体编号、阈值请以你机器实测为准。
评论 (0)
暂无评论,来做第一个留言的人吧!