一、检查当前系统盘磁盘类型和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相关设置
- 重启服务器并进入BIOS设置界面(通常按
Del
、F2
或F12
)。 - 找到以下选项并调整:
- Boot Mode: 设置为
UEFI Only
(禁用Legacy/CSM)。 - Secure Boot: 暂时禁用(Proxmox VE可能不兼容)。
- Boot Order: 确保首选启动项为
UEFI: PLEXTOR PX-128M6
(磁盘名称)。
- Boot Mode: 设置为
三、更新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