安装温度检测工具
CPU 及主板温度检测:lm-sensors
user@pve:~$ sudo apt install lm-sensors
安装完成后执行 sensors-detect
进行传感器探测,通常情况下全部按默认选择 yes 即可
探测完成后执行 sensors -j
测试传感器(参数 -j
使其以 JSON 格式输出)
user@pve:~$ sensors -j
{
"coretemp-isa-0000":{
"Adapter": "ISA adapter",
"Package id 0":{
"temp1_input": 69.000,
"temp1_max": 84.000,
"temp1_crit": 100.000,
"temp1_crit_alarm": 0.000
},
"Core 0":{
"temp2_input": 69.000,
"temp2_max": 84.000,
"temp2_crit": 100.000,
"temp2_crit_alarm": 0.000
},
// ...[OMITTED]...
},
"acpitz-acpi-0":{
"Adapter": "ACPI interface",
"temp1":{
"temp1_input": 68.000,
"temp1_crit": 120.000
}
}
}
在如上输出中,['acpitz-acpi-0']['temp1']['temp1_input']
是主板温度,['coretemp-isa-0000']['Package id 0']['temp1_input']
是 CPU 温度
硬盘温度检测:hddtemp
user@pve:~$ sudo apt install hddtemp
安装完成后执行 hddtemp /dev/sd?
测试传感器
user@pve:~$ sudo hddtemp /dev/sd?
/dev/sda: WDC WD40EZRZ-00WN9B0: 29°C
/dev/sdb: ADATA SP600: 26°C
/dev/sdc: WD2500: 29°C
/dev/sdd: ADATA SP900: 38°C
由于 PVE 的 web 服务以用户 www-data 身份运行,需要修改 hddtemp 的权限
user@pve:~$ sudo chmod +s /usr/sbin/hddtemp
编辑 PVE web 服务文件
Nodes.pm
编辑文件 /usr/share/perl5/PVE/API2/Nodes.pm
,跳转到 my $dinfo = df('/', 1);
位置,编辑成如下所示
# ...[OMITTED]...
$res->{pveversion} = PVE::pvecfg::package() . "/" .
PVE::pvecfg::version_text();
$res->{thermal} = `sensors -j`; # 添加此行以获取 CPU 与主板等温度
$res->{thermal_hdd} = `hddtemp /dev/sd?`; # 添加此行以获取硬盘温度
my $dinfo = df('/', 1); # output is bytes
# ...[OMITTED]...
pvemanagerlib.js
修改页面样式以完整显示数据
编辑文件 /usr/share/pve-manager/js/pvemanagerlib.js
,跳转到 gettext('Status') + ': ' + zpool,
位置,编辑成如下所示
// ...[OMITTED]...
var win = Ext.create('Ext.window.Window', {
modal: true,
width: 800,
height: 500, // 原始值为 400
resizable: true,
layout: 'fit',
title: gettext('Status') + ': ' + zpool,
items:[{
// ...[OMITTED]...
跳转到 widget.pveNodeStatus
位置,编辑成如下所示
// ...[OMITTED]...
Ext.define('PVE.node.StatusView', {
extend: 'PVE.panel.StatusView',
alias: 'widget.pveNodeStatus',
height: 400, // 原始值为 300
bodyPadding: '20 15 20 15',
layout: {
// ...[OMITTED]...
两处 height
的值需按情况修改,每多一行数据增加 20
例如有 1 行 CPU 与主板温度数据、3 行硬盘温度数据(3 块硬盘),即为 480 与 380
添加显示内容
跳转到 PVE Manager Version
位置,编辑成如下所示
// ...[OMITTED]...
{
itemId: 'version',
colspan: 2,
printBar: false,
title: gettext('PVE Manager Version'),
textField: 'pveversion',
value: ''
}, // 注意添加逗号
{
itemId: 'thermal',
colspan: 2,
printBar: false,
title: gettext('Thermal Status'),
textField: 'thermal',
renderer: function(value) {
value = JSON.parse(value.replaceAll('Â', ''));
const cpu0 = value['coretemp-isa-0000']['Package id 0']['temp1_input'].toFixed(1);
const board = value['acpitz-acpi-0']['temp1']['temp1_input'].toFixed(1);
// ...获取其他传感器数据
return `CPU: ${cpu0}°C | Board: ${board}°C`; // 自行修改输出格式
}
},
{
itemId: 'thermal-hdd',
colspan: 2,
printBar: false,
title: gettext('HDD Thermal Status'),
textField: 'thermal_hdd',
renderer: function(value) {
value = value.replaceAll('Â', '');
return value.replaceAll('\n', '<br>');
}
}
],
// ...[OMITTED]...
其中获取 JSON 数值的表达式(value['...']...['...'].toFixed(1)
)与最后输出字符串(result
)的格式需按实际情况和需求进行修改
完成
执行 systemctl restart pveproxy
重启 PVE web 服务
在浏览器中清除 PVE 控制台的缓存,重新加载即可在节点概要显示温度信息
转自:https://zry.io/archives/285