PVE(promox)是一款可以免费使用的虚拟机管理系统,它基于debian,并实现了基于web页面控制的kvm、lxc管理器。本文介绍的内容包含pve安装中的注意事项、安装后的优化以及从已有虚拟机镜像中恢复虚拟机的方法。

PVE安装

https://www.proxmox.com/en/downloads官网下载pve镜像后,使用 ventoy 或者直接录制到U盘中。如安装PVE8.x系统,ventoy版本最低为1.0.97,ventoy在此版本修复了promox8.x无法安装问题。

添加nvme磁盘后无法联网

为了避免安装时,误删其他磁盘中的数据,因此笔者在安装前把另一块nvme磁盘还有sata磁盘都取下来了。安装好后,将另一块nvme磁盘插上时,服务器连不上网了。经过排查,发现是网卡的接口名发生了变动,原先是 enp2s0 ,在插入nvme磁盘后,变成了 enp3s0 。如何确认网卡的名称呢?可以使用 ifconfig 或者 ip addr 命令查看,如果这两个命令都没有,可以使用 lspci 命令查看网卡的地址。

此时,需要做的是修改网络配置,此时就要用到命令行了,使用vim/vi/nano任意工具在命令行修改 /etc/network/interfaces ,将其中所有内容为 enp2s0 的地方,全部修改为 enp3s0。然后使用命令 systemctl restart network ,或者重启系统reboot即可。

此时,PVE就安装成功了。

debian源替换

安装系统后,使用清华debian源代替原有默认源。

清华debian源地址:https://mirrors.tuna.tsinghua.edu.cn/help/debian/

如使用PVE8.x版本,可直接复制此代码:

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
# deb-src http://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware

deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
# deb-src http://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware

deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
# deb-src http://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware

# 以下安全更新软件源包含了官方源与镜像站配置,如有需要可自行修改注释切换
deb https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
# deb-src https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware

pve源替换

如不替换pve源,则有可能出现系统无法更新的情况。

修改 /etc/apt/sources.list.d/pve-enterprise.list ,将内容更改为:

deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/pve bookworm pve-no-subscription

修改 /etc/apt/sources.list.d/ceph.list ,将内容更改为:

deb http://download.proxmox.com/debian/ceph-quincy bookworm no-subscription

增加gpg(可选)

wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg

去除网页提示

修改此文件:

/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js

搜索data.status

将整段if内容替换为false

重启

systemctl restart pveproxy

sata控制器直通

修改 /etc/default/grub 文件,找到 GRUB_CMDLINE_LINUX_DEFAULT="quiet" 这一行,在后面补上 intel_iommu=on

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
GRUB_CMDLINE_LINUX=""

修改完后,使用 update-grub 命令更新一下grub,这时不用着急重启,还需要调整另外一个文件。编辑 /etc/modules 文件,在其中添加如下的配置内容:

# 20241103
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

调整完成后,重启服务器即可生效。

温度功能

PVE默认不会显示温度,这里有一篇文章介绍如何在web页面上显示温度:https://www.cnblogs.com/sharkwave/p/13125513.html

笔者不太需要此功能,可在linux bash上偶尔查看即可,因此只需安装对应工具:

# 安装
apt install lm-sensors
# 适配
sensors-detect

# 查看温度

RTL8125B网卡优化

pve上RTL8125B网卡默认使用的驱动是r8169的,此驱动没有开启网卡多队列等特性,导致网卡软中断只能使用固定的一个CPU核心接收和发送数据。

查看网卡驱动的方式

首先需要找到网卡名称

# 查看pci设备
lspci

查找到 Ethernet controller 这样的设备就是网卡了,然后查看此设备的详细信息:

lspci -s 03:00.0 -k
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
        Subsystem: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller
        Kernel driver in use: r8169
        Kernel modules: r8169

通过下面的命令查看网卡中断数量

cat /proc/interrupts | grep -P 'enp|CPU0'

更新驱动

如果没有使用合适的驱动,终端数量会非常少,影响网络IO性能。github上有两个已经编译好的驱动,大家可以自行取用。

你可以直接将驱动下载到pve系统里,也可以下载到u盘,然后挂载u盘。

挂载U盘,一般要先找到U盘设备,可通过fdisk -l命令查看所有磁盘,找到U盘后,使用下面的命令挂载U盘。

mkdir -p /root/usb

## 注意 /dev/sdx替换为实际U盘地址
mount /dev/sdx /root/usb

安装步骤:

# 更新系统
apt update
apt upgrade

# 安装headers
apt install -y dkms proxmox-default-headers
headers=$(dpkg -l | awk '/^ii.+kernel-[0-9]+.[0-9]+.[0-9]/{gsub(/-signed/, ""); gsub(/kernel/, "headers"); print $2}' | tr "n" " ")
eval apt install -y $headers

# 安装刚刚下载好的deb包
## 此命令只会为当前系统所使用的内核以及刚刚安装的最新内核(也可能当前所使用的内核就是最新内核)安装驱动
## 如通配符会匹配多个时亦可指定具体的文件名,建议使用具体的驱动包
dpkg -i realtek-r8125-dkms_*.deb 

dkms status

## 列出全部内核版本kernel_version,找出那些还没有安装驱动的内核
dpkg -l | awk '/^ii.+kernel-[0-9]+.[0-9]+.[0-9]/{gsub(/proxmox-kernel-|pve-kernel-|-signed/, ""); print $2}'

## 手动指定驱动版本(在deb文件名中有体现)和内核版本(从上一句命令的输出中),zsh按tab可自动补全,比如:dkms install realtek-r8125/9.011.01 -k 6.2.16-5-pve
dkms install realtek-r8125/ -k 

## 卸载不再需要的headers
eval apt-mark auto $headers

apt autopurge

## 禁用r8169驱动
echo "blacklist r8169" >> /etc/modprobe.d/dkms.conf

## 重启
update-grub
update-initramfs -u -k all
reboot

## 再次查看网卡加载的驱动,现在加载的是r8125了
lspci -s 03:00.0 -k

03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
        Subsystem: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller
        Kernel driver in use: r8125
        Kernel modules: r8169, r8125

虚拟机镜像恢复

笔者曾经在单独的一块数据磁盘上部署过lxc容器,但pve系统重装后,数据磁盘上的虚拟机镜像就无法自动恢复了,此时需要手动操作,将数据磁盘挂载上并恢复虚拟机。

数据磁盘挂载

一块已经格式化的磁盘,pve默认不做任何操作,此时还是使用fdisk -l命令,找到那块数据盘,找到具体的device名称。

笔者的这块磁盘device名称是:/dev/nvme0n1p1,切记不能找错,如果找错了,启动时可能无法正常启动,还得到安全模式下重新配置。

笔者想要将这块磁盘挂载到/mnt/nvme1,因此需先创建对应文件夹

mkdir -p /mnt/nvme1

然后尝试挂载一次

mount -t /dev/nvme0n1p1 /mnt/nvme1

挂载完成后,前往/mnt/nvme1中查看内容是否存在。

没有问题后,卸载此磁盘:

umount /mnt/nvme1

编辑 /etc/fstab 文件,让系统在启动时自动挂载磁盘:

/dev/nvme0n1p1 /mnt/nvme1 ext4 defaults,noatime 0 2

磁盘配置

磁盘挂载好后,编辑pve的storage文件

vim /etc/pve/storage.cfg

参照dir: local这项配置,将新挂载的磁盘补充到最后

dir: local2
        path /mnt/nvme1
        content iso,vztmpl,images,rootdir

做完这些操作后,就能在web界面上看到local2这个存储空间了。

虚拟机恢复

笔者使用的都是lxc,因此配置的位置和qemu的不一样,不过原理是类似的。

首选,需要创建一个CT,此时可以配置一个非常小的rootfs磁盘,存储位置选local,避免操作到local2,创建后不要开机。

进入/etc/pve/nodes/pve目录,如果创建的是CT,则再进入lxc目录,如果是虚拟机,则进入qumu-server目录。

找到对应的配置文件,笔者这里为102虚拟机,对应的配置文件名为102.conf,修改里面的rootfs配置项,将值改为local2中的对应文件,size大小也得对应调整。

arch: amd64
cores: 2
features: nesting=1
hostname: CT102
memory: 4096
net0: name=eth0,bridge=vmbr0,firewall=1,hwaddr=bc:24:11:9e:90:87,type=veth
ostype: debian
rootfs: local2:102/vm-102-disk-0.raw,size=60G
swap: 512
unprivileged: 1

调整完成后,在web页面上启动此容器即可。

标签: pve, 虚拟机

添加新评论