
着对
Proxmox虚拟化的深入使用,我觉得Proxmox把VMware干没了不是没有原因的。
当然,不仅仅是VMware的vSphere,还有微软的Hyper-V,Crtrix的XenServer,在开源的PVE面前,没有一个能打的。
开源平台Proxmox VE无需任何许可证费用,提供所有功能的完整访问权限,并提高了IT基础架构的灵活性,安全性和可靠性。
话不多说,我将通过PVE三部曲来验证虚拟化之王当之无愧。
- PVE温度显示
- QEMU Guest Agent
- 备份和还原
📌PVE显示温度
默认情况下,PVE的概要面板是不会收集硬件温度信息的,所以源生的PVE不会显示温度信息。而我们要做的就是让它收集并显示出来,配置之后的效果如下:

我虽然已经做了很多次了,但是每次版本的迭代,系统总会覆盖概要面板的控制脚本,所以这次我们将采用一个高级的方法:
写一个自定义的API来通过安全的inline injection(JS注入,不破坏源生结构),感谢ChatGPT5.1帮我想到的好方法。
安装sensors
sensors是一个用来显示Linux硬件温度的软件,执行安装命令:
apt install lm-sensors -y执行sensors命令
root@pve:~# sensors
amdgpu-pci-c400
Adapter: PCI adapter
vddgfx: 1.43 V
vddnb: 645.00 mV
edge: +45.0°C
PPT: 16.20 W (avg = 12.25 W)
k10temp-pci-00c3
Adapter: PCI adapter
Tctl: +51.9°C
acpitz-acpi-0
Adapter: ACPI interface
temp1: +20.0°C
iwlwifi_1-virtual-0
Adapter: Virtual device
temp1: N/A
nvme-pci-0100
Adapter: PCI adapter
Composite: +41.9°C (low = -273.1°C, high = +89.8°C)
(crit = +94.8°C)
Sensor 1: +41.9°C (low = -273.1°C, high = +65261.8°C)
Sensor 2: +28.9°C (low = -273.1°C, high = +65261.8°C)✅后端修改点:Nodes.pm
能查询到温度信息后,我们先增加后端的API。
路径:
/usr/share/perl5/PVE/API2/Nodes.pm新增一个方法:
__PACKAGE__->register_method({
name => 'hwtemp',
path => 'hwtemp',
method => 'GET',
proxyto => 'node',
permissions => {
check => ['perm', '/nodes/{node}', ['Sys.Audit']],
},
description => "Read hardware temperature from sensors -j",
parameters => {
additionalProperties => 0,
properties => {
node => get_standard_option('pve-node'),
},
},
returns => {
type => "object",
},
code => sub {
my ($param) = @_;
my $json = '';
my $cmd = ['sensors', '-j'];
PVE::Tools::run_command($cmd, outfunc => sub { $json .= shift });
my $decoded = decode_json($json);
return $decoded;
},
});✅前端修改点:pvemanagerlib.js
文件:
/usr/share/pve-manager/js/pvemanagerlib.js搜索内容:
Ext.define('PVE.node.StatusView'在 items[] 里插入:
{
xtype: 'component',
itemId: 'hwtemp',
colspan: 2,
padding: '10 10 10 10',
style: 'border:1px solid #ccc; margin-top:10px',
tpl: new Ext.XTemplate(
'<h3>Hardware Temperature</h3>',
'<table>',
'<tr><td><b>CPU:</b></td><td>{cpu}</td></tr>',
'<tr><td><b>GPU:</b></td><td>{gpu}</td></tr>',
'<tr><td><b>NVMe:</b></td><td>{nvme}</td></tr>',
'<tr><td><b>Mainboard:</b></td><td>{acpi}</td></tr>',
'</table>'
),
data: {
cpu: 'Loading…',
gpu: 'Loading…',
nvme: 'Loading…',
acpi: 'Loading…',
},
},📌 添加 updateHwTemp() 函数(前端 JS)
仍在 StatusView 内添加函数:
function updateHwTemp() {
Ext.Ajax.request({
url: `/api2/json/nodes/${nodename}/hwtemp`,
method: 'GET',
success: function(resp){
let json = JSON.parse(resp.responseText).data;
function get(path){
try { return path.split('.').reduce((o,k)=>o[k], json); }
catch(e){ return null; }
}
let cpu = get('k10temp-pci-00c3.Tctl.temp1_input');
let gpu = get('amdgpu-pci-c400.edge.temp1_input');
let nvme = get('nvme-pci-0100.Composite.temp1_input');
let acpi = get('acpitz-acpi-0.temp1.temp1_input');
function fmt(v){ return v ? v.toFixed(1)+'°C' : 'N/A'; }
me.down('#hwtemp').update({
cpu: fmt(cpu),
gpu: fmt(gpu),
nvme: fmt(nvme),
acpi: fmt(acpi),
});
},
});
}📌 触发温度刷新:在 initComponent() 里加入
let timer = setInterval(updateHwTemp, 3000);
me.on('destroy', () => clearInterval(timer));📌重启服务
执行:
systemctl restart pveproxy
systemctl restart pvedaemon重启之后,刷新页面即可看到PVE的温度。

💖后记
PVE 虽然是企业级产品,但依旧保留了足够开放的架构。 你可以像本文这样,自由扩展 API、修改前端 JS、甚至在节点首页加入自定义的硬件监控模块。 这种“可玩性”是很多虚拟化平台给不了的。
当然,也要记住一句老话:
动手之前先备份,动手之后再重启。
无论是修改 Nodes.pm,还是 patch pvemanagerlib.js, 都建议:
改之前 cp filename filename.bak
改过程中多观察 systemctl status pveproxy
出现异常时随时回滚
这样即使改坏了,也能迅速恢复。
最后,希望这篇文章能给到你启发: PVE 并不是“只能用”,它是一个能让你自己“造功能”的平台。
