PVE系统引导模式Legacy换为UEFI

发布员1号 发布于 30 分钟前 14 次阅读


一、检查当前系统盘磁盘类型和efi分区

fdisk -l
#输出内容,确定是GPT分区和已经创建了EFI分区
Disk /dev/sda: 119.24 GiB, 128035676160 bytes, 250069680 sectors
Disk model: PLEXTOR PX-128M6
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 6D7CB8DB-AFA8-4EEF-A5AD-90055F054C09

Device       Start       End   Sectors   Size Type
/dev/sda1       34      2047      2014  1007K BIOS boot
/dev/sda2     2048   1050623   1048576   512M EFI System
/dev/sda3  1050624 250069646 249019023 118.7G Linux LVM

检查EFI分区里的文件

tree /boot/efi/EFI
#输出下面的信息就是正确的
/boot/efi/EFI
├── BOOT
│   └── BOOTx64.EFI
└── proxmox
    └── grubx64.efi

二、到BIOS里检查UEFI相关设置

  1. 重启服务器并进入BIOS设置界面(通常按 DelF2 或 F12)。
  2. 找到以下选项并调整:
    • Boot Mode: 设置为 UEFI Only(禁用Legacy/CSM)。
    • Secure Boot: 暂时禁用(Proxmox VE可能不兼容)。
    • Boot Order: 确保首选启动项为 UEFI: PLEXTOR PX-128M6(磁盘名称)。

三、更新GRUB

做到这一步重启服务器很可能会遇到进系统失败,是进入了GRUB的救援模式,输出下面的内容

error:symbolgrub is_lockdown' not found.
Entering rescue mode...
grub rescue>

此时需要一个空的U盘,去PVE官网下载最新的系统镜像,我这里使用的是官方8.3.1版本的ISO镜像(torrent),通过rufus工具制作启动盘(rufus-4.6p便携版),插入服务器背面的USB口上,重启服务器进入引导菜单(具体快捷键可以看启动界面,会有提示,例如超微主板是按F11),选择这个U盘启动盘

依次选择Advanced Options(高级选项)→Rescue Boot(救援引导)

即可成功在UEFI Only引导模式下临时进入PVE系统

检查当前EFI情况

efibootmgr -v
#这里显示0004有EFI引导项,实际上是不能正常用的,0005项是我们U盘的EFI引导,此次通过它进的系统
BootCurrent: 0005
Timeout: 1 seconds
BootOrder: 0004,0005,0003
Boot0003* UEFI: Built-in EFI Shell      VenMedia(5023b95c-db26-429b-a648-bd47664c8012)..BO
Boot0004* UEFI OS       HD(2,GPT,fa2cce64-5eb8-48a0-adc4-e9f521ff5bfe,0x800,0x100000)/File(\EFI\BOOT\BOOTX64.EFI)..BO
Boot0005* UEFI: SMI USB DISK 1100, Partition 2  PciRoot(0x0)/Pci(0x1a,0x0)/USB(0,0)/USB(5,0)/HD(2,GPT,cc204a36-7205-49c2-80bd-642a2e65b1fd,0x224,0x4000)..BO


ls /sys/firmware/efi/efivars 2>/dev/null
#输出文件列表(如 Boot0000-*),则系统已处于UEFI模式
Boot0003-8be4df61-93ca-11d2-aa0d-00e098032b8c             MokListTrustedRT-605dab50-e046-4300-abb6-3dd810dd8b23
Boot0004-8be4df61-93ca-11d2-aa0d-00e098032b8c             MokListXRT-605dab50-e046-4300-abb6-3dd810dd8b23
Boot0005-8be4df61-93ca-11d2-aa0d-00e098032b8c             MonotonicCounter-01368881-c4ad-4b1d-b631-d57a8ec8db6b
BootCurrent-8be4df61-93ca-11d2-aa0d-00e098032b8c          OA3MSDMvariable-01368881-c4ad-4b1d-b631-d57a8ec8db6b
BootOptionSupport-8be4df61-93ca-11d2-aa0d-00e098032b8c    OldBootOrder-8be4df61-93ca-11d2-aa0d-00e098032b8c
BootOrder-8be4df61-93ca-11d2-aa0d-00e098032b8c            OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c


tree /boot/efi/EFI
#确定引导分区里有引导文件
/boot/efi/EFI
├── BOOT
│   └── BOOTx64.EFI
└── proxmox
    └── grubx64.efi

强制重新安装GRUB到EFI分区

grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=proxmox --recheck --force
#输出内容如下,没有报错,正常安装
Installing for x86_64-efi platform.
Installation finished. No error reported.

更新GRUB配置

update-grub
#输出如下内容
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.8.12-8-pve
Found initrd image: /boot/initrd.img-6.8.12-8-pve
Found linux image: /boot/vmlinuz-6.8.12-7-pve
Found initrd image: /boot/initrd.img-6.8.12-7-pve
Found linux image: /boot/vmlinuz-6.5.13-6-pve
Found initrd image: /boot/initrd.img-6.5.13-6-pve
Found linux image: /boot/vmlinuz-5.13.19-2-pve
Found initrd image: /boot/initrd.img-5.13.19-2-pve
Found memtest86+ 64bit EFI image: /boot/memtest86+x64.efi
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
Adding boot menu entry for UEFI Firmware Settings ...
done

手动创建UEFI引导项(如果 efibootmgr 无输出)

efibootmgr -c -d /dev/sda -p 2 -L "proxmox" -l \\EFI\\proxmox\\grubx64.efi

验证引导有没有创建成功

efibootmgr -v
#引导多了一项名为proxmox的efi引导,正常
BootCurrent: 0005
Timeout: 1 seconds
BootOrder: 0000,0004,0005,0003
Boot0000* proxmox       HD(2,GPT,fa2cce64-5eb8-48a0-adc4-e9f521ff5bfe,0x800,0x100000)/File(\EFI\proxmox\grubx64.efi)
Boot0003* UEFI: Built-in EFI Shell      VenMedia(5023b95c-db26-429b-a648-bd47664c8012)..BO
Boot0004* UEFI OS       HD(2,GPT,fa2cce64-5eb8-48a0-adc4-e9f521ff5bfe,0x800,0x100000)/File(\EFI\BOOT\BOOTX64.EFI)..BO
Boot0005* UEFI: SMI USB DISK 1100, Partition 2  PciRoot(0x0)/Pci(0x1a,0x0)/USB(0,0)/USB(5,0)/HD(2,GPT,cc204a36-7205-49c2-80bd-642a2e65b1fd,0x224,0x4000)..BO

重启服务器,重新进BIOS里的boot选项卡,把UEFI引导第一启动项选成proxmox名字的EFI启动项,保存bios后即可正常以UEFI引导模式进系统。

验证结果

ls /sys/firmware/efi
# 如果有输出类似下面的内容,则表示成功
config_table  efivars  esrt  fw_platform_size  fw_vendor  runtime  runtime-map  systab

dmesg | grep "EFI v"
#查看固件版本
[    0.000000] efi: EFI v2.4 by American Megatrends
#legacy引导模式时磁盘分区情况如下
df -Th
Filesystem             Type      Size  Used Avail Use% Mounted on
udev                   devtmpfs  252G     0  252G   0% /dev
tmpfs                  tmpfs      51G  7.8M   51G   1% /run
/dev/mapper/pve-root   xfs       100G   41G   59G  41% /
tmpfs                  tmpfs     252G   46M  252G   1% /dev/shm
tmpfs                  tmpfs     5.0M     0  5.0M   0% /run/lock
/dev/sda2              vfat      511M  320K  511M   1% /boot/efi
/dev/fuse              fuse      128M   56K  128M   1% /etc/pve
tmpfs                  tmpfs      51G     0   51G   0% /run/user/0

#UEFI引导模式时磁盘分区情况如下(多了efivarfs挂载点)
df -Th
Filesystem             Type      Size  Used Avail Use% Mounted on
udev                   devtmpfs  252G     0  252G   0% /dev
tmpfs                  tmpfs      51G  7.7M   51G   1% /run
/dev/mapper/pve-root   xfs       100G   41G   59G  41% /
tmpfs                  tmpfs     252G   46M  252G   1% /dev/shm
tmpfs                  tmpfs     5.0M     0  5.0M   0% /run/lock
efivarfs               efivarfs  256K  114K  138K  46% /sys/firmware/efi/efivars
/dev/sda2              vfat      511M  336K  511M   1% /boot/efi
/dev/fuse              fuse      128M   56K  128M   1% /etc/pve
tmpfs                  tmpfs      51G     0   51G   0% /run/user/0

补充说明

使用 gdisk 删除分区

gdisk /dev/sda
#这里是我的系统盘位置,你可以根据实际情况修改

输入以下命令序列:

d  # 删除分区
1  # 选择分区1(BIOS boot分区)
w  # 保存并退出

更新分区表后,重新安装GRUB