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 8.2.7

创建PVE虚拟机

1) 这里默认你和我一样已经有了PVE,并且将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虚拟机

安装PVE虚拟机

1)启动虚拟机,开始安装PVE
启动虚拟机
2)正常图形界面安装即可
安装PVE虚拟机

优化PVE虚拟机

要原滋原味的PVE,到这里就可以跳到打包PVE丢到Ventoy引导启动了,但我们封装PVE的目的就是为了减少前期部署的重复步骤,提前将需要的环境部署上去,启动就能食用。接下来是PVE的一些基本设置和优化:
1) 在浏览器访问需要封装的PVE管理后台地址
PVE
2)登录进来后就跟正常的PVE没啥两样,按自己的需求进行优化定制。
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才算完成。
删除local-lvm
6)禁止PVE修改网卡名称, 使用 ethX 命名
由于每台机器的网卡名可能都不一致,所以这里统一改成ethX来命名网卡。
使用nano命令编辑/etc/default/grubGRUB_CMDLINE_LINUX=""加入这个参数即可net.ifnames=0 biosdevname=0
net.ifnames=0 biosdevname=0

# 更新GRUB
update-grub

7)将PVE设置成DHCP方式获取IP
由于每个人的局域网网段不同,所以建议改成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。
ip -c a
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块存储的则需要迁移到目录形式的存储池再操作

知道我的1000ID的虚拟机虚拟磁盘在data0目录存储池(挂载到/mnt/pve/data0)后,可以在PVE建立一个临时http直链下载服务器,下载回本地。当然你也可以用自己喜欢的第三方ssh工具下载回本地,我懒得用工具就用自带的python httpserver模块了。

# 查看硬盘挂载点
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引导下载。建议在PE环境下安装Ventoy引导。PE推荐用FirPE

安装Ventoy引导

引导进PE环境,将ventoy-1.0.99-windows.zip下载到本地。这里我找了块480G硬盘来安装Ventoy。

解压ventoy-1.0.99-windows.zip并运行Ventoy2Disk.exe将Ventoy引导安装到硬盘。
安装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分区空间基本用完,还原虚拟机后可以删除备份包腾出空间;
local

FAQ 问答

Q1:我以这种方式启动PVE有性能损耗吗?

A1:系统是在真实物理机上运行,并不是在虚拟机里运行,没有性能损失。

Q2:我能进行二次封装吗?比如我启动好封装的PVE,然后在里头装好虚拟机配置好网络啥的再将做好的pve.raw.vtoy映像拷贝到其他机器启动。

A2:呀呀呀,小伙子悟性很高啊是的,可以的,这样操作完全没有问题

Q3:如何让Ventoy读秒自动进入PVE系统?

A3:Ventoy引导启动后,默认需要按下回车才能启动PVE系统,这里可以给它配置个5秒后自动进系统
5秒后进系统

{
    "control":[
        { "VTOY_MENU_TIMEOUT": "5" },
        { "VTOY_MENU_LANGUAGE": "zh_CN" }
    ]
}

Q4:怎么更换Ventoy的默认主题?

A4:什么?你还用着Ventoy的默认主题?快来看看它的美化教程吧-在下莫老师

Q5:PVE的节点主机名称能不能修改呀?我想命名pve01,pve02,pve03...

A5:可以的,只需要修改3处路径/etc/hostname/etc/hosts/etc/postfix/main.cf里的主机名称,保存重启PVE即可。如果你在修改之前就已经安装了虚拟机和挂载了存储,那么你还需要手动移动虚拟机到新的节点然后重新挂载存储就好了。

Last modification:November 11th, 2024 at 09:09 pm
If you think my article is useful to you, please feel free to appreciate