GRUB2:在单EFI系统上配置多Windows与Linux操作系统
GRUB2:在单EFI系统上配置多Windows与Linux操作系统
我在单SSD的笔记本上装了两个Windows 11实例和一个Ubuntu 23.10,现在遇到了个头疼的问题:GRUB菜单里只有「Windows Boot Manager」这一个Win相关选项,每次要进某个Win11都得先选它,然后在Win自带的引导菜单里挑实例,接着还要重启再选一次Windows Boot Manager才能进入系统——这流程绕得实在太麻烦了!
先给大家看看我的当前系统磁盘和引导配置:
当前系统磁盘与引导信息
lsblk 分区信息
sudo lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL nvme0n1 953.9G ├─nvme0n1p1 vfat 100M /boot/efi ├─nvme0n1p2 16M ├─nvme0n1p3 ntfs 149.5G ├─nvme0n1p4 ntfs 604M ├─nvme0n1p5 ntfs 200G ├─nvme0n1p6 ntfs 310.7G Shared └─nvme0n1p7 ext4 293G /
fdisk -l 详细分区表
sudo fdisk -l Disk /dev/nvme0n1: 953.87 GiB, 1024209543168 bytes, 2000409264 sectors Disk model: SAMSUNG MZVL21T0HCLR-00BL2 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: 245C7941-919B-4473-8B05-92AA2608EB88 Device Start End Sectors Size Type /dev/nvme0n1p1 2048 206847 204800 100M EFI System /dev/nvme0n1p2 206848 239615 32768 16M Microsoft reserved /dev/nvme0n1p3 239616 313743359 313503744 149.5G Microsoft basic data /dev/nvme0n1p4 313743360 314980351 1236992 604M Windows recovery environment /dev/nvme0n1p5 314980352 734410751 419430400 200G Microsoft basic data /dev/nvme0n1p6 734410752 1386008575 651597824 310.7G Microsoft basic data /dev/nvme0n1p7 1386008576 2000406527 614397952 293G Linux filesystem
Windows 引导配置 (bcdedit 输出)
C:\Windows\System32>bcdedit Windows Boot Manager -------------------- identifier {bootmgr} device partition=\Device\HarddiskVolume1 path \EFI\Microsoft\Boot\bootmgfw.efi description Windows Boot Manager locale en-us inherit {globalsettings} default {default} resumeobject {2ac3aa28-69bf-11ee-b9c2-cbeab994cd57} displayorder {default} {current} toolsdisplayorder {memdiag} timeout 30 Windows Boot Loader ------------------- identifier {default} device partition=D: path \Windows\system32\winload.efi description WINDOWS 11 (1) locale en-us inherit {bootloadersettings} isolatedcontext Yes allowedinmemorysettings 0x15000075 osdevice partition=D: systemroot \Windows resumeobject {2ac3aa28-69bf-11ee-b9c2-cbeab994cd57} nx OptIn bootmenupolicy Standard quietboot No usefirmwarepcisettings No sos No Windows Boot Loader ------------------- identifier {current} device partition=C: path \Windows\system32\winload.efi description WINDOWS 11 (2) locale en-GB inherit {bootloadersettings} recoverysequence {2ac3aa26-69bf-11ee-b9c2-cbeab994cd57} displaymessageoverride Recovery recoveryenabled Yes isolatedcontext Yes allowedinmemorysettings 0x15000075 osdevice partition=C: systemroot \Windows resumeobject {2ac3aa24-69bf-11ee-b9c2-cbeab994cd57} nx OptIn bootmenupolicy Standard
核心问题
能不能直接在GRUB菜单里添加两个Win11的独立选项,跳过Windows Boot Manager的二次选择和重启,直接启动目标系统?
解决方案:手动添加GRUB引导项
最可靠的方法是直接给每个Win11实例添加独立的GRUB菜单项,绕开Windows Boot Manager,直接加载每个系统的winload.efi引导文件。
步骤1:挂载相关分区
首先确保EFI分区和两个Win11系统分区都挂载好(EFI一般默认挂载在/boot/efi,如果没挂载就手动挂载):
# 挂载EFI分区(如果未自动挂载) sudo mount /dev/nvme0n1p1 /boot/efi # 创建挂载点并挂载第一个Win11分区(对应D:盘,nvme0n1p3) sudo mkdir /mnt/win1 sudo mount /dev/nvme0n1p3 /mnt/win1 # 创建挂载点并挂载第二个Win11分区(对应C:盘,nvme0n1p5) sudo mkdir /mnt/win2 sudo mount /dev/nvme0n1p5 /mnt/win2
步骤2:编辑GRUB自定义配置
打开GRUB的自定义配置文件/etc/grub.d/40_custom:
sudo nano /etc/grub.d/40_custom
在文件末尾添加以下两个引导项(注意替换分区标识为你自己的):
# 第一个Win11实例:WINDOWS 11 (1) menuentry 'WINDOWS 11 (1)' --class windows --class os { insmod part_gpt insmod ntfs insmod fat set root='hd0,gpt3' # 对应nvme0n1p3,也就是D:盘 chainloader /Windows/system32/winload.efi } # 第二个Win11实例:WINDOWS 11 (2) menuentry 'WINDOWS 11 (2)' --class windows --class os { insmod part_gpt insmod ntfs insmod fat set root='hd0,gpt5' # 对应nvme0n1p5,也就是C:盘 chainloader /Windows/system32/winload.efi }
如果担心磁盘顺序变化导致引导失败,也可以用UUID方式(更稳定):
- 先获取Win分区的UUID:
# 获取第一个Win分区UUID sudo blkid /dev/nvme0n1p3 # 获取第二个Win分区UUID sudo blkid /dev/nvme0n1p5
- 把UUID替换到配置里:
menuentry 'WINDOWS 11 (1)' --class windows --class os { insmod part_gpt insmod ntfs insmod fat search --no-floppy --fs-uuid --set=root 你的Win1分区UUID chainloader /Windows/system32/winload.efi } menuentry 'WINDOWS 11 (2)' --class windows --class os { insmod part_gpt insmod ntfs insmod fat search --no-floppy --fs-uuid --set=root 你的Win2分区UUID chainloader /Windows/system32/winload.efi }
步骤3:更新GRUB配置
保存配置后,执行以下命令更新GRUB:
sudo update-grub
重启电脑后,你就会看到GRUB菜单里多了两个独立的Windows 11选项,直接选择就能启动对应的系统,再也不用绕弯子了!
注意事项
- 如果你的Win11系统开启了BitLocker加密,这种方法可能无法直接启动,需要先解密或者调整BitLocker的引导配置。
- 后续如果Win系统更新了引导文件,可能需要重新检查GRUB配置,但一般情况下不会有问题。
备注:内容来源于stack exchange,提问作者NanoBreaker
相关产品推荐
相关产品推荐

