PVE配置:(2023.12.13)SHELL脚本:一键给PVE增加温度,cpu功耗频率,硬盘等信息
获取温度信息。返回信息大概如下:
脚本自动检测:一键给PVE增加温度和cpu频率显示,NVME,机械固态硬盘信息
- 理论上适合任何设备
- 自动适配传感器数据
- 自动检测NVME硬盘数量
- 自动检测机械,固态硬盘数量
- 自动检测CPU核心数量
使用方法:
可以一键执行下面:
(curl -Lf -o /tmp/temp.sh https://raw.githubusercontent.com/a904055262/PVE-manager-status/main/showtempcpufreq.sh || curl -Lf -o /tmp/temp.sh https://mirror.ghproxy.com/https://raw.githubusercontent.com/a904055262/PVE-manager-status/main/showtempcpufreq.sh) && chmod +x /tmp/temp.sh && /tmp/temp.sh remod
没有显示功耗的,请执行下面的命令安装依赖,请确保安装成功,就是最后的一行的输出,必须为 “成功!” 才表示安装成功了。
apt update ; apt install linux-cpupower && modprobe msr && echo msr > /etc/modules-load.d/turbostat-msr.conf && chmod +s /usr/sbin/turbostat && echo 成功!
如果你已经用别人的脚本之类的修改过页面,请先用下面命令先回复官方设置之后,才可以运行本脚本:
apt update
apt install pve-manager proxmox-widget-toolkit --reinstall
rm -f /usr/share/perl5/PVE/API2/Nodes.pm*bak
rm -f /usr/share/pve-manager/js/pvemanagerlib.js*bak
rm -f /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js*bak
另外:每次pve升级之后都需要执行一次脚本,因为升级后PVE会自己还原文件
更新:
- 2023.1.10
理论上适合任意设备!
添加nvme硬盘信息显示 - 2023.1.11
效果优化
加入固态硬盘和机械硬盘信息
CPU频率加入调速器,最大最小频率
NVME加入读写数据量显示
修复bug - 2023.1.12
细节优化 - 2023.1.14
细节优化 - 2023.1.15
修正右栏高度和左栏一致,解决双栏浮动布局错位问题 - 2023.1.18
优化布局,修正温度获取bug - 2023.4.14
添加NVME健康度和0E显示 - 2023.9.4
修复一些设备因为温度问题无限转圈圈 - 2023.9.5
增加CPU功耗显示 - 2023.12.13
机械硬盘休眠状态不去获取SMART
如果你对效果不满意,请执行:"/tmp/temp.sh" restore 命令,可以还原修改
温度显示:
首先我们要先安装温度检测工具
apt-get install lm-sensors
lm_sensors可以用来监控CPU和主板温度以及风扇速度
在shell中输入命令sensors,就能显示信息
root@pve:~# sensors
coretemp-isa-0000
Adapter: ISA adapter
Package id 0: +48.0°C (high = +105.0°C, crit = +105.0°C)//cpu温度
Core 0: +48.0°C (high = +105.0°C, crit = +105.0°C)
Core 1: +49.0°C (high = +105.0°C, crit = +105.0°C)
Core 2: +49.0°C (high = +105.0°C, crit = +105.0°C)
Core 3: +49.0°C (high = +105.0°C, crit = +105.0°C)
acpitz-acpi-0
Adapter: ACPI interface
temp1: +46.0°C (crit = +95.0°C)
nvme-pci-0100
Adapter: PCI adapter
Composite: +62.9°C (low = -273.1°C, high = +89.8°C)//nvme硬盘温度
(crit = +89.8°C)
ERROR: Can't get value of subfeature temp2_min: I/O error //这两个是读不出来
ERROR: Can't get value of subfeature temp2_max: I/O error
Sensor 1: +62.9°C (low = +0.0°C, high = +0.0°C)
需要修改的文件
/usr/share/perl5/PVE/API2/Nodes.pm //数据来源
/usr/share/pve-manager/js/pvemanagerlib.js //桌面版的js
/usr/share/pve-manager/touch/pvemanager-mobile.js //手机版的js
在Nodes.pm中搜索pveversion,在这段代码下面加入
$res->{thermalstate} = `sensors`;
pc端浏览器界面增加温度显示
在pvemanagerlib.js文件中也是搜索pveversion,在它这段代码下面加入
{
itemId: 'thermal',
colspan: 2,
printBar: false,
title: gettext('Temperature'),
textField: 'thermalstate',
renderer:function(value){
const c0 = value.match(/Package id 0.*?\+([\d\.]+)?/)[1];
const c1 = value.match(/Composite.*?\+([\d\.]+)?/)[1];
return `CPU: ${c0} | NVME: ${c1} `
}
},
要注意的事情是cpu和nvme的温度是根据正则表达式从数据字符串里取的,需要根据sensors中输出的信息做相应修改,注意红色字体部分可以。
pve7.0 pveversion代码下面还有一段输出订阅状态的代码,看需求可以删除掉。
手机端增加温度显示
在pvemanager-mobile.js文件中搜索PVE.NodeInfo,具体代码显示如下
Ext.define('PVE.NodeInfo', {
extend: 'Ext.Component',
alias: 'widget.pveNodeInfo',
config: {
style: 'background-color: white;',
styleHtmlContent: true,
data: [],
tpl: [
'<table style="margin-bottom:0px;">',
'<tr><td>Version:</td><td>{pveversion}</td></tr>',
'<tr><td>Memory:</td><td>{[this.meminfo(values)]}</td></tr>',
'<tr><td>CPU:</td><td>{[this.cpuinfo(values)]}</td></tr>',
'<tr><td>Uptime:</td><td>{[Proxmox.Utils.format_duration_long(values.uptime)]}</td></tr>',
'<tr><td>Temp:</td><td>{[this.tempinfo(values)]}</td></tr>',//增加页面显示温度是位置
'</table>',
{
meminfo: function(values) {
var d = values.memory;
if (!d) {
return '-';
}
return Proxmox.Utils.format_size(d.used || 0) + " of " + Proxmox.Utils.format_size(d.total);
},
//增加获取温度的方法
tempinfo: function(values) {
var d = values.thermalstate;
if (!d) {
return '-';
}
var c0 = d.match(/Package id 0.*?\+([\d\.]+)?/)[1];
var c1 = d.match(/Composite.*?\+([\d\.]+)?/)[1];
return 'CPU:'+c0+' | NVME:'+c1;
},
cpuinfo: function(values) {
if (!values.cpuinfo) {
return '-';
}
var per = values.cpu * 100;
return per.toFixed(2) + "% (" + values.cpuinfo.cpus + " CPUs)";
}
}
]
},
});
修改完成后在shell中重启pve的web管理器:
systemctl restart pveproxy
完成温度显示操作。
关闭ksm 内核共享内存
进程有一个ksm的进程会占用一部分cpu,会一直检测虚拟机的空闲内存,可以空出来给其他虚机用,用不到可以关闭
systemctl disable ksmtuned
systemctl stop ksmtuned
去登陆后的订阅弹窗
需要修改文件/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
搜索关键字 checked_command 定位,if判断改成false即可,然后重启pve的web管理器
checked_command: function(orig_cmd) {
Proxmox.Utils.API2Request(
{
url: '/nodes/localhost/subscription',
method: 'GET',
failure: function(response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
},
success: function(response, opts) {
let res = response.result;
if (false) { //这里改成false
Ext.Msg.show({
title: gettext('No valid subscription'),
icon: Ext.Msg.WARNING,
message: Proxmox.Utils.getNoSubKeyHtml(res.data.url),
buttons: Ext.Msg.OK,
callback: function(btn) {
if (btn !== 'ok') {
return;
}
orig_cmd();
},
});
} else {
orig_cmd();
}
},
},
);
},