标签 pve 下的文章

脚本自动检测:一键给PVE增加温度和cpu频率显示,NVME,机械固态硬盘信息

理论上适合任何设备
自动适配传感器数据
自动检测NVME硬盘数量
自动检测机械,固态硬盘数量
自动检测CPU核心数量
微信截图_20231120165427.png

使用方法:

可以一键执行下面:

(curl -Lf -o /tmp/temp.sh https://raw.githubusercontent.com/a904055262/PVE-manager-status/main/showtempcpufreq.sh || curl -Lf -o /tmp/temp.sh https://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会自己还原文件

以上内容转自MJJ论坛:https://www.right.com.cn/forum/thread-6754687-1-1.html

安装温度检测工具

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

第一步,创建虚拟机。

第二步,登陆 SHELL,具体登陆方法自己探索。

使用 WinSCP 之类的软件把 img2kvm 和 IMG 镜像上传到 ROOT 目录,当然也可以使用 wget 命令下载到 PVE 宿主机。

img2kvm 下载地址:img2kvm.zip

  • 注:第二种方法无需 img2kvm。

第三步:IMG 转换

第一种:

chmod +x img2kvm
 ./img2kvm LEDE.img 101 vm-101-disk-1 local-lvm

上面2个101是虚拟机的VM ID, LEDE.img是需要引导的img文件,local-lvm是你的存储ID

第二种:

qemu-img convert -f raw -O qcow2 <firmware_name> <output_diskname>
#例子:qemu-img convert -f raw -O qcow2  LEDE.img vm-101-disk-1.qcow2
qm importdisk <vmid> <source> <storage>
#例子:qm importdisk 101 vm-101-disk-1.qcow2 local-lvm

第四步:登陆管理页面,加载磁盘

打开刚才创建的虚拟机的硬件,会看到有个未使用的磁盘,双击打开,点确认即可。

1.png

对应编辑一下引导顺序。
2.png
转自:https://vzone.me/913/