扩展阅读: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任务。
更换软件源
pve默认配置的是需要付费的企业源,需要配置成免费源。
此外,如果服务器在国内,我们需要更换为清华大学开源软件镜像站(TUNA)的pve和Debian源。
在shell中(web界面即有shell,如果不会操作shell随便找找入门教程)
- 注释掉
/etc/apt/sources.list.d/pve-enterprise.list中的内容,或者删除这个文件。
rm -f /etc/apt/sources.list.d/pve-install-repo.list
- 通过命令
echo "https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian buster pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
# OR
echo "deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
添加TUNA的pve免费源。
- 通过命令
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,把虚拟磁盘挂载到宿主机下从而读写其中的文件。
隐藏弹窗
使用脚本
直接以root身份执行以下脚本即可:
sed -i.bak -e 's/res === null || res === undefined || !res ||/false \&\&/' \
-e "s/vm.set('subscriptionActive', subscription);/vm.set('subscriptionActive', true);/g" \
/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
systemctl restart pveproxy
手动修改
先备份js文件,防止改坏了无法恢复。
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,大约在五百多行左右。然后将对应的代码块的判断条件修改。
if (res === null || res === undefined || !res || res.data.status.toLowerCase() !== 'active')
改为
if (false)
最后重启pveproxy服务。
systemctl restart pveproxy