PVE常用使用问题

PVE常用使用问题

PVE储存方式

默认情况下,pve使用lvm作为储存方式。安装时将硬盘划分出boot、uefi分区后,第三个分区创建vg。

默认情况下会创建一个名为root的lv作为系统的根分区,大小为整个磁盘空间的25%,还用来保存系统镜像和虚拟机的快照;一个名为data的lvm-thin分区,作为虚拟机的磁盘。但实际这个默认值用起来不是舒服,最好根据自己的需要进行设置。

我安装了一些常用的软件后,pve系统分区使用量约9G。如果像我一样,把快照和系统镜像都保存在nas上,root分区划分20G就完全够了。否则给快照和系统镜像留额外的空间。考虑到给虚拟机保存多个快照,这种情况root分区可能要比data分区更大。

名为data的lvm-thin分区用来保存虚拟机磁盘。pve的虚拟机磁盘和常见的vmware等不同,不是保存为文件而是直接以raw的形式保存在lvm-thin区中划分。

在安装系统时,在选择磁盘的步骤,点击option可以进行设置。选项分别为hdsize,swapsize、maxroot、maxvz、minfree等。通过这些选项,可以控制root分区大小等。

  • hdsize 定义目标硬盘的容量大小,通过设置这个参数,你可以配置硬盘预留部分空间给他用(例如在同一块硬盘上配置其他物理卷PV和卷组VG,以创建LVM 类型存储服务)。建议不要预留空间,不要在系统盘上再建立其他卷组,要完整使用目标硬盘空间。

  • swapsize 定义swap逻辑卷的容量大小,默认和服务器物理内存容量大小一致,最小值为4GB,最大值为8GB,最大值不能大过hdsize/8。注意,如设置为0,将不会创建swap逻辑卷。

  • maxroot 定义root逻辑卷的容量大小,最大值限制为hdsize/4。root逻辑卷主要用于保存ISO操作系统镜像。

  • minfree 定义pve卷组容量中除了swap、root以及data逻辑卷容量之外剩余的可用容量大小,也就是说minfree大小可以按照下面方式来计算 minfree = pve - swapsize - rootsize - datasize

  • maxvz 定义data逻辑卷的容量大小,data逻辑卷主要用于保存虚拟机文件,虚拟机文件容量大小不能超过maxvz。

maxvz实际大小可以这样计算:datasize = hdsize - rootsize - swapsize - minfree

如果已经安装好了又想调整分区大小,可以考虑重装系统。因为lvm分区只能扩容不能缩减容量。而重装系统操作也不太麻烦,只需要把所有虚拟机通过拍快照的方式备份到别的磁盘,然后在新系统上还原即可。

此外,pve还支持使用zfs等方式进行储存。这部分详细内容可查阅官方文档。

邮箱地址

在pve安装时需要输入邮箱地址。这个不是摆设,是一个很好用的功能。

pve已经配置好了邮件相关的服务,只要你在安装时填写好正确的地址,pve会在需要时给你发送邮件。

目前我收到过两类邮件,一个是系统警告,比如磁盘SMART警告;另一个是在执行cron任务时,会将失败的任务发送邮件,包括自己配置的cron任务。

不过这个发送邮件的方式似乎是通过本机直接发送到对方服务器。也就是说发邮件不需要你提供一个账号密码供其使用,也就没有一个通过认证的邮件服务器发送。按说这是容易被拒收的。不过本人使用的126邮箱地址可以正常收到。

更换软件源

pve默认配置的是需要付费的企业源,我们这些白嫖的无法使用,需要配置成免费源。

此外,国外软件源的速度很慢,因此我们更换为清华大学开源软件镜像站(TUNA)的pve和debian源。

在shell中(web界面即有shell)(如果不会操作shell随便找找入门教程)

  1. 注释掉/etc/apt/sources.list.d/pve-enterprise.list中的内容,或者删除这个文件。
Bash
rm -f /etc/apt/sources.list.d/pve-install-repo.list
  1. 通过命令
Bash
echo "https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian buster pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list

添加TUNA的pve免费源。

  1. 通过命令
Bash
echo "# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free" > /etc/apt/sources.list

将更换debian源。

开启IOMMU

如果想直通PCIE设备的,比如显卡、sas卡等,需要开启IOMMU。

编辑文件/etc/default/grub,对于intel的CPU,将GRUB_CMDLINE_LINUX_DEFAULT所在行添加intel_iommu=on,结果:

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on" 

对于AMD的cpu,将GRUB_CMDLINE_LINUX_DEFAULT所在行添加amd_iommu=on,结果:

GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on" 

然后执行

update-grub

然后重启。

将这些内容添加进/etc/modules

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

直通GPU可能还需要进一步操作。详见官方文档

虚拟机安装

有几个点提一下。

如果使用UEFI,需要给虚拟机添加一个EFI disk,否则可能安装成功后无法启动等奇怪的问题。

虚拟机类型可选q35和i440fx,q35比i440fx更新,支持pcie等。默认为i440fx。

CPU类型默认为kvm64,这种类型便于迁移,但性能一般,且缺少cpu功能(如aes)。建议选择host

硬盘直通

硬盘直通可以把整个一块硬盘提供给虚拟机使用(如果不这么做,往往是在物理硬盘上创建一个虚拟硬盘文件,提供给虚拟机用)。硬盘直通可以让虚拟机更直接地使用硬盘,对于nas等场景通常使用直通。

然而网上很多所谓的pve硬盘直通其实是磁盘映射。

硬盘映射网上有很多文档,不再赘述。记录/dev/disk/disk下的信息,然后通过qm set 100 -sata1 /dev/disk/by-id/ata-WDC_XXXX_XXXX_XXXX设置那个就是。

真正直通往往是将硬盘控制器直通,这样虚拟机对硬盘的控制才是完整的。方法为在图形界面中使用pci passthrough,直通sas卡或者板载sata控制器。

虚拟硬盘的操作

下面讲个利用命令行完成的稍高级的操作:借助Linux的工具非常方便地操作虚拟磁盘。

比如openwrt不是通过iso文件安装系统,而是下载得到的就是raw磁盘文件。这时可以通过形如dd if=openwrt.img of=/dev/mapper/pve-vm-xx来直接写入,即完成安装,不需要工具转换、导入等。

还可以还可以通过kpartx和mount,把虚拟磁盘挂载到宿主机下从而读写其中的文件。

隐藏弹窗

Bash
cp /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js.bak 
vi /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js 

搜索关键字 No valid subscription,大约在五百多行左右。然后将对应的代码块的判断条件修改。

Bash
if (res === null || res === undefined || !res || res.data.status.toLowerCase() !== 'active')
改为
if (false)

或者直接执行命令:

Bash
sed -i "s/data.status === 'Active'/true/g" /usr/share/pve-manager/js/pvemanagerlib.js
sed -i "s/if (res === null || res === undefined || \!res || res/if(/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
sed -i "s/.data.status.toLowerCase() !== 'active'/false/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
systemctl restart pveproxy
qrcode

创建时间:2021-05-15 12:22:00

最后修改:2023-05-05 04:31:34