往Gen8上加了一块 PCIe 转 NVMe 转接卡,装上了固态硬盘打算做系统,但是Gen8是不支持UEFI引导,BIOS也没有nvme驱动,隧折腾~
至于为什么不把PVE装到其他地方,把虚拟机放在NVME里面,是因为我打算把整个SATA控制器直通给虚拟机管理,如果PVE装在SATA上就没办法直通控制器了
前言
面临的挑战:
不支持 UEFI:Gen8 只能用传统的 Legacy 模式启动
认不出 NVMe:BIOS 自检阶段根本看不见 PCIe 槽位上的 SSD,无法直接引导
尝试方案:
利用USB或SD(TF)卡插一个轻量级的引导器(Clover 或 Grub),让它先启动,再去寻找并引导 NVMe 上的 PVE 系统
第一阶段:安装前的准备
- PCIe 转 NVMe 转接卡 + NVMe SSD
- U盘
- PVE 安装镜像
- Diskgenius软件:格式化U盘设置MBR,标记主分区
- FirPE(非必要,下载BOOTICE也行):这里面有很多工具,包括BOOTICE(设置主引导记录),模拟BIOS引导的环境,还能制作PE
- grub4dos0.4.6a压缩包
第二阶段:将 PVE 安装到 NVMe
- 虽然 BIOS 不认 NVMe,但 PVE 的安装程序(基于 Debian)内核是可以认出的
得益于iLO可以直接把PVE镜像挂在到Gen8上,然后开始安装 - 我选择用Terminal UI 安装 (不知道为啥iLO Console图形交互会很卡)

3.在选择目标磁盘(Target Harddisk)时是可以识别出 NVMe SSD的
SSD只有512G所以我打算
root分配 150G
data分配 250G
Free冗余 50G
swap分配 剩下的零头
4.正常配置 IP、主机名,开始安装
我尝试了很多次,Gen8每次安装PVE都一定会中途出现报错,但不影响最后安装
询问过AI和查阅相关资料后,判断是虚拟化的问题,目前对之后的使用好像也没影响(无视)
5.安装完重启后,机器进不去系统这是正常的,因为 BIOS 找不到引导记录
第三阶段:制作引导U盘
我们需要在内置优盘里做一个向导,告诉 CPU 去哪里找 NVMe
引导方式参考:浅谈几种常见的引导方式
方法 A:使用 Clover 镜像
原装Gen8是不支持的,不加显卡是没办法使用Clover引导的,即便是改成纯文本也不行
以前也用过Clover装黑苹果,觉得Clover界面挺好看的,网上也有很多方便的工具,值得尝试
按网上的教程,制作好启动盘,加入NVME驱动,BIOS引导后就卡死了,只显示一个6
在网上搜寻后发现,有相同问题的人,原文:惠普gen8系列服务器从nvme硬盘启动的方法
原因是没有显卡作为输出设备,详细原文都有写,这里不再重复赘述。
我服务器不打算上显卡,隧放弃A方案
方法 B:配置 GRUB(grub4dos)
理论上GRUB就可以了,但是我做主引导的时候没搞好,导致没成功引导,隧换了grub4dos
制作引导U盘
- 用Diskgenius格式化U盘,设置MBR,并指定主分区
- 使用FirPE里面的BOOTICE

- 设置主引导记录

- 从grub4dos0.4.6a压缩包里拷贝grldr和menu.lst两个文件到U盘里面
grldr在/grub4dos-0.4.6a根目录里面
menu.lst在/grub4dos-0.4.6a/sample文件夹里面 - 从PVE的安装盘里面把/boot 目录复制到 U盘里面
至于怎么搞,安装虚拟机,或者把nvme拔下来用其他电脑提取都行PVE更新了需要手动从新复制一份到U盘,或者将U盘挂载到/boot上 编辑menu.lst
设置短一点的timeout时间
并将下面内容复制到第一个title的前一行,其他项目可以删除可以保留根据 /boot 下面的文件修改对应的bvmlinuz和initrd版本title Proxmox VE (Gen8 NVMe Boot Bridge) # 1. 在/boot 中寻找内核文件 # 根据 /boot 下面的文件设置对应的bvmlinuz版本 find --set-root /boot/vmlinuz-6.xx.xx-1-pve # 2. 加载内核本体 intel_iommu=on,relax_rmrr iommu=pt # 参数 intel_iommu=on,relax_rmrr iommu=pt 是Gen8硬件直通用的(非必要,之后有其他启动参数也要加到这里) kernel /boot/vmlinuz-6.xx.xx-1-pve root=/dev/mapper/pve-root ro quiet intel_iommu=on,relax_rmrr iommu=pt # 3. 加载初始化驱动包 (内含 NVMe 驱动) initrd /boot/initrd.img-6.xx.xx-1-pve- 把修改好的U盘插到Gen8上,不出意外就能正常启动NVMe里面的PVE了

方法 C:配置 GRUB(追加)
这个方式是我用方案B成功以后,跟AI老师学的,仅做记录。
前提条件,要么能进PVE系统,或者有另一台PVE,又或是有Linux环境
前提条件,要么能进PVE系统,或者有另一台PVE,又或是有Linux环境
- 将U盘插到PVE系统上
lsblk命令查看U盘的 分区(sdx0)修改下面的sdx0或sdx中的x和0成对应的grub-install /dev/sdx0mount /dev/sdx0 /mntgrub-install --target=i386-pc --boot-directory=/mnt/boot /dev/sdxgrub-mkconfig -o /mnt/boot/grub/grub.cfgumount /mnt修改U盘里面的 grub.cfg
根据 /boot 下面的文件修改对应的bvmlinuz和initrd版本### BEGIN /etc/grub.d/10_linux ### menuentry 'Proxmox VE (USB Boot)' --class proxmox { load_video insmod gzio insmod part_msdos insmod ext2 echo 'Loading Kernel from USB Drive...' linux /boot/vmlinuz-6.17.2-1-pve root=/dev/mapper/pve-root ro quiet intel_iommu=on echo 'Loading Ramdisk from USB Drive...' initrd /boot/initrd.img-6.17.2-1-pve } ### END /etc/grub.d/10_linux ###
进阶:如何让配置永久化
如果你不想每次改完都被 update-grub 覆盖,把上面那段代码复制到 PVE 的这个文件里:nano /etc/grub.d/40_custom
然后执行一次 update-grub。这样引导项就会被永久加入到启动菜单中,也不怕系统更新了。
反正都要复制Boot系统里面的文件到U盘,方案B和C复杂度差不多
grub4dos只要额外拷2个文件放在根目录,编辑也方便,还是推荐方案B
结语
通过U盘跳板曲线救国,让Gen8这一代神鸡跑上了现代化的NVMe存储
NVME能跑PCIe3.0,虚拟机测速如下: