Ventoy引导启动PVE--教你如何封装自己的PVE虚拟机
背景近期公司采购了好几台电脑,需要做虚拟化跑自动化项目,如果要一台台安装好PVE再部署环境,实属浪费时间。那么能不能像WIN一样,装好一台进行封装一键还原呢?当然可以,本期不讲DD硬盘对拷克隆,而是通过Ventoy引导来启动Linux虚拟映像,只需要把PVE安装到虚拟映像然后通过Ventoy引导,从而在任意一台机器启动我们封装好的PVE。
都2024,还不知道Ventoy是啥的,请自行去充电~
如何封装PVE?
Ventoy可以直接启动vhd/vdi/raw
等虚拟映像,所以我们封装的时候选这类格式的虚拟映像即可。那么用啥虚拟机来封装PVE呢,都安装PVE了,当然是在PVE里装PVE进行封装啦啊哈哈哈哈。下边来演示在PVE下如何封装定制属于自己的PVE虚拟机。
当前环境
信息 | 版本 |
---|---|
系统 | PVE 8.2.7 |
内核 | Linux pve8 6.8.12-1-pve |
PVE镜像下载 | PVE安装镜像ISO |
创建PVE虚拟机
1) 这里默认你和我一样已经有了PVE,并且将PVE镜像上传到PVE。
2)来新建一台PVE虚拟机,创建的虚拟磁盘大小决定你封装的PVE系统分区大小,并且后续不支持扩容
。我这里规划封装个28G大小的PVE,20G作为系统盘,8G作为swap虚拟缓存,格式一定要用raw类型,其他格式Ventoy无法引导。
创建PVE虚拟机
虚拟机ID:1000
虚拟机名称:PVE8.1.1
内存:4G(
按需设置
)处理器:host,核心数量4(
按需设置,host拥有最好的性能
)BIOS:OVMF(
UEFI模式
)显示:默认
机型:q35(
版本最新就行
)SCSI控制器:VirtIO SCSI single
CD/DVD启动器(ide0)(
加载需要封装的PVE镜像,安装完系统记得删除掉
)硬盘:SCSI 28G(
规划20G作为系统盘,8G作为swap虚拟缓存,格式用raw
)网络:Intel virto 网卡
EFI磁盘:UEFI(
不添加
)安装PVE虚拟机
1)启动虚拟机,开始安装PVE
2)正常图形界面安装即可
优化PVE虚拟机
要原滋原味的PVE,到这里就可以跳到打包PVE丢到Ventoy引导启动了,但我们封装PVE的目的就是为了减少前期部署的重复步骤,提前将需要的环境部署上去,启动就能食用。接下来是PVE的一些基本设置和优化:
1) 在浏览器访问需要封装的PVE管理后台地址
2)登录进来后就跟正常的PVE没啥两样,按自己的需求进行优化定制。
常用PVE优化设置
以下设置将大量使用
nano
文本编辑命令,至于怎么使用自行百度,这里不重复造轮子了。 知道如何保存就行Ctrl +X 输入“Y”回车保存
1)
PVE更换系统源
# 编辑sources.list
nano /etc/apt/sources.list
# 将原有的源链接在句首加 # 注释掉,更换以下清华源信息
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
2)PVE更换企业源
# 编辑pve-enterprise.list
nano /etc/apt/sources.list.d/pve-enterprise.list
# 将原有的源链接在句首加 # 注释掉,更换以下清华源信息
deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian bookworm pve-no-subscription
3)修复更新源时报401错误
# 编辑ceph.list
nano /etc/apt/sources.list.d/ceph.list
# 将原有的源链接在句首加 # 注释掉,添加中科大ceph源
deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy bookworm no-subscription
# 执行更新
apt update
4)LXC容器更换源
# 备份APLInfo.pm
cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm_back
# 替换为清华源:
sed -i 's|http://download.proxmox.com|https://mirrors.tuna.tsinghua.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm
# 重启服务后生效
systemctl restart pvedaemon.service
5)删除local-lvm将空间合并到local
# 使用命令删除local-lvm
lvremove /dev/pve/data
# 输入y,确认,输出以下信息即成功
Do you really want to remove active logical volume pve/data? [y/n]: y
Logical volume "data" successfully removed.
# 再将local-lvm的空间转移到pve-root
lvextend -rl +100%FREE /dev/pve/root
# 输出以下信息即合并local分区成功
Size of logical volume pve/root changed from <9.75 GiB (2495 extents) to <19.50 GiB (4991 extents).
Logical volume pve/root successfully resized.
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/mapper/pve-root is mounted on /; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
The filesystem on /dev/mapper/pve-root is now 5110784 (4k) blocks long.
删除了lvm-thin之后,还需要在Web删除local-lvm才算完成。
6)禁止PVE修改网卡名称, 使用 ethX 命名
使用nano
命令编辑/etc/default/grub
在GRUB_CMDLINE_LINUX=""
加入这个参数即可net.ifnames=0 biosdevname=0
# 更新GRUB
update-grub
7)将PVE设置成DHCP方式获取IP
使用nano
命令编辑nano /etc/network/interfaces
将里面的内容全部删除,替换以下信息,重启生效
auto lo
iface lo inet loopback
iface eth0 inet manual
auto vmbr0
iface vmbr0 inet dhcp
bridge-ports eth0
bridge-stp off
bridge-fd 0
source /etc/network/interfaces.d/*
改为DHCP方式后,PVE的管理地址将会由路由设备随机分配一个IP给PVE。需要登录到PVE输入ip -c a
查看实际获取到的IP。
8)将DHCP获取到的IP输入到控制台显示
前面说了控制台显示的IP是写死静态的,那么我们让其能正常输出正确IP。
使用nano
命令编辑nano /usr/bin/pvebanner
将里面的内容全部删除,替换以下信息,重启生效
#!/usr/bin/perl
sleep(8);
$ip .= `hostname -I`;
$banner = <<__EOBANNER;
--------------------------------------https://yangwenqing.com--------------------------------------------------
Welcome to the Proxmox Virtual Environment.
Please use your web browser to configure this server:
Your IP: ${ip}
configure this server - connect to:
https://your IP:8006
The default user is root
The default password is 123456
--------------------------------------https://yangwenqing.com--------------------------------------------------
__EOBANNER
print "$ip";
open(ISSUE, ">/etc/issue");
print ISSUE $banner;
close(ISSUE);
exit (0);
重启PVE后,控制台就可以返回DHCP所获取到的正确IP了。
打包PVE虚拟机
所有优化设置都配置好后,就可以准备给PVE打包封装成Ventoy可启动的虚拟映像了。在PVE系统下执行vtoyboot脚本,这一步是为了在系统中做一些处理,以支持Ventoy启动。
# 下载vtoyboot脚本到根目录/root
wget https://github.com/ventoy/vtoyboot/releases/download/v1.0.35/vtoyboot-1.0.35.iso
# 挂载vtoyboot-1.0.35.iso
mkdir /root/vtoyboot && mount -o loop vtoyboot-1.0.35.iso /root/vtoyboot/
# 解压vtoyboot-1.0.35.iso
tar -zxvf /root/vtoyboot/vtoyboot-1.0.35.tar.gz -C /root/
# 执行脚本bash vtoyboot.sh 脚本
cd /root/vtoyboot-1.0.35/ && bash vtoyboot.sh
# 执行完之后,使用 poweroff 命令关机。
poweroff
最后就是把封装好的PVE虚拟映像下载到本地或者拷贝到U盘。目录形式的存储池才支持复制和移动,如果你用的是LVM块存储的则需要迁移到目录形式的存储池再操作
知道我的1000
ID的虚拟机虚拟磁盘在data0目录存储池(挂载到/mnt/pve/data0
)后,可以在PVE建立一个临时http直链下载服务器,下载回本地。
# 查看硬盘挂载点
lsblk
# 建立一个临时http直链下载服务器
python3 -m http.server -d /mnt/pve/data0/images/
新开一个浏览器窗口,访问你的PVE:8000端口,即可访问到http直链下载服务器了,映像没下载完成前都不要去点PVE控制台,离开窗口http直链下载服务器将断开。
下载回来后将raw
的后缀改为 .vtoy
必须把文件后缀名改为 .vtoy
才可以正常启动。比如: PVE8.1.1.raw.vtoy
如何使用PVE?
PVE封装好后,就来安装Ventoy引导,点我前往Ventoy引导下载。
安装Ventoy引导
将ventoy-1.0.99-windows.zip
下载到本地。这里我找了块480G硬盘来安装Ventoy。
解压ventoy-1.0.99-windows.zip
并运行Ventoy2Disk.exe
将Ventoy引导安装到硬盘。
再将PVE虚拟映像放入Ventoy分区
启动PVE虚拟机
重启主机进PVE系统
通过控制台显示给出的IP地址访问PVE管理后台即可。PVE管理口默认为第一个网口,多网口的主机记得将网线插第一个口,不然无法获取IP
登录到PVE管理后台,把之前剩余的400G硬盘空间用作PVE数据存储池。需要做下硬盘分区
硬盘分区好后,可以到PVE控制台看到硬盘分区情况
最后就是将该分区挂载为PVE数据存储池,把虚拟机安装到该存储池。
封装好的PVE作品
在这里提供一个我已经封装好的PVE映像。比较适用于游戏用户
使用。
PVE虚拟映像说明:
1)基于PVE
8.2.7
内核Linux 6.8.12-1-pve
版本进行封装;2)该镜像大小
28GB
,解压后放到Ventoy启动使用。账号:root
,密码:123123
;3)管理口默认为主机的第一个口,DHCP模式;
3)预装了
NVIDIA VGPU17.0
驱动,并提供了个fastapi-dls
授权驱动服务的LXC还原包;4)对PVE做了去虚拟化用于玩游戏,并提供了个
WIN10 22h2
虚拟机还原包;5)
local分区
空间基本用完,还原虚拟机后可以删除备份包腾出空间;FAQ 问答
Q1:我以这种方式启动PVE有性能损耗吗?
A1:系统是在真实物理机上运行,并不是在虚拟机里运行,没有性能损失。
Q2:怎么更换Ventoy的默认主题?
A2:什么?你还用着Ventoy的默认主题?快来看看它的美化教程吧-在下莫老师