PVE安装 & 优化 & 虚拟机镜像恢复
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页面上启动此容器即可。