我有两个独立的 Linux 发行版,位于两个 SSD 中。
- 佐林 (/dev/sda)
- Linux Mint (/dev/sde)
首先我安装了 Zorin,然后安装了 Linux Mint。
我跑了启动信息脚本。这是结果的要点。
Boot Info Script 0.61 [1 April 2012]
============================= Boot Info Summary: ===============================
=> No boot loader is installed in the MBR of /dev/sda.
=> No boot loader is installed in the MBR of /dev/sdb.
=> No boot loader is installed in the MBR of /dev/sdc.
=> No boot loader is installed in the MBR of /dev/sdd.
=> No boot loader is installed in the MBR of /dev/sde.
sda1: __________________________________________________________________________
File system: vfat
Boot sector type: FAT32
Boot sector info: No errors found in the Boot Parameter Block.
Operating System:
Boot files: /efi/BOOT/fbx64.efi /efi/BOOT/mmx64.efi
/efi/memtest86/BOOTX64.efi /efi/ubuntu/grubx64.efi
/efi/ubuntu/mmx64.efi /efi/ubuntu/shimx64.efi
sda2: __________________________________________________________________________
File system: ext4
Boot sector type: -
Boot sector info:
Operating System: Zorin OS 16.1
Boot files: /boot/grub/grub.cfg /etc/fstab
sde1: __________________________________________________________________________
File system: vfat
Boot sector type: FAT32
Boot sector info: No errors found in the Boot Parameter Block.
Operating System:
Boot files:
sde2: __________________________________________________________________________
File system: ext4
Boot sector type: -
Boot sector info:
Operating System: Linux Mint 20.3 Una
Boot files: /boot/grub/grub.cfg /etc/fstab
我不确定我使用的是哪个 grub。我如何知道我正在使用哪个 grub(引导期间显示的 grub 菜单)?如何使用不同 SSD 中的 grub。我想在 /dev/sda 中使用 grub(这是因为我从这个驱动器启动,并且我还想自定义 grub 菜单)。我怎样才能做到这一点?
更新1:
在 Linux Mint 中efibootmgr
命令显示:
$ efibootmgr
BootCurrent: 0004
Timeout: 1 seconds
BootOrder: 0004,0001,0002,0003
Boot0001* UEFI:CD/DVD Drive
Boot0002* UEFI:Removable Device
Boot0003* UEFI:Network Device
Boot0004* ubuntu
我认为这是我的系统中维护的启动顺序。当我grub-customizer
在 Linux Mint 中使用时(在我的例子中Boot0004* ubuntu
),它改变了启动菜单。
添加请求的命令输出。
$ sudo efibootmgr -v
[sudo] password for ismail:
BootCurrent: 0004
Timeout: 1 seconds
BootOrder: 0004,0001,0002,0003
Boot0001* UEFI:CD/DVD Drive BBS(129,,0x0)
Boot0002* UEFI:Removable Device BBS(130,,0x0)
Boot0003* UEFI:Network Device BBS(131,,0x0)
Boot0004* ubuntu HD(1,GPT,264abb67-bc63-46f7-8106-01f8aa3c65d2,0x800,0x100000)/File(\EFI\UBUNTU\SHIMX64.EFI)
$ lsblk -o +partuuid
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT PARTUUID
sda 8:0 0 232.9G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi 264abb67-bc63-46f7-8106-01f8aa3c65d2
└─sda2 8:2 0 232.4G 0 part 1aa55c42-f8ba-4af5-95f1-719f0ea3f6fe
sdb 8:16 0 3.7T 0 disk
└─sdb1 8:17 0 3.7T 0 part 97963414-695e-4e8d-a872-752afe27fcf1
sdc 8:32 0 5.5T 0 disk
└─sdc1 8:33 0 5.5T 0 part 27e20d5e-a539-407f-b9d7-0928a78e8706
sdd 8:48 0 3.7T 0 disk
└─sdd1 8:49 0 3.7T 0 part 13e6dcd3-161a-4c72-a49f-431b03c9f595
sde 8:64 0 223.6G 0 disk
├─sde1 8:65 0 512M 0 part d641c8e7-d1ed-4fb0-97d1-3d256f343bad
└─sde2 8:66 0 223.1G 0 part / 9fa068c4-b486-4044-810d-9d41a978c361
答案1
看起来目前只使用 Mint 的 GRUB。
如果您进入固件启动设置菜单(“BIOS 设置”),您可能会发现当前主启动目标的名称只是ubuntu
而不是“磁盘 1”之类的名称。 UEFI 允许已安装操作系统的启动设置具有清晰的人类可读名称,在本例中为ubuntu
.
由于 Mint 和 Zorin 都是 Ubuntu 的衍生版本,因此它们显然都默认将 GRUB 安装到/boot/efi/EFI/ubuntu
ESP 上的目录中,因此最后安装的一个将通过覆盖另一个的引导加载程序来“获胜”。
BootCurrent: 0004
显示这Boot0004
是启动当前运行的操作系统实例的配置。 PARTUUID264abb67-bc63-46f7-8106-01f8aa3c65d2
指的sda1
是与引导配置一起使用的 EFI 系统分区Boot0004
。固件最初将加载/boot/efi/EFI/ubuntu/shimx64.efi
,这是由 Microsoft 签名的安全启动兼容性填充程序。它将加载并验证/boot/efi/EFI/ubuntu/grubx64.efi
。
(挂载的文件系统/boot/efi
是FAT32,根据UEFI规范,它应该不区分大小写。但是,一些有错误的UEFI固件版本是区分大小写的。这里我假设你的固件没有这样的错误。)
仅固件将接受由硬件制造商或 Microsoft 签名的引导加载程序;shimx64.efi
将 Canonical 的签名密钥和可选的机器所有者密钥 (MOK) 添加到允许列表中(非持久性,因此必须shimx64.efi
在每次启动时执行)。启用安全启动后,如果您希望构建自己的自定义内核或使用第三方内核模块,则需要设置 MOK。
(如果您需要设置MOK,请参阅 Debian Wiki 上的这篇文章。它也适用于 Ubuntu 及其衍生版本。)
/boot/efi/EFI/ubuntu/grubx64.efi
是 GRUB 的一个版本,基本上所有 GRUB 模块都内置并由 Canonical 签名,以符合安全启动要求。它来自 package grub-efi-amd64-signed
。由于它是由 Canonical 而不是 Microsoft 签署的,因此 Canonical 将能够在需要时及时为 GRUB 提供安全更新。
(当安全启动生效时,GRUB 将无法根据需要加载 GRUB 模块,因为符合安全启动的固件将标记所有未从有效签名的 Windows 风格 PE+ 二进制文件对于 CPU 来说是不可执行的。由于 GRUB 模块使用 Unix 风格ELF 二进制格式即使模块经过加密签名,固件也不会知道如何检查它们(而不是 PE+)。)
可能有一个最小的 GRUB 配置文件,其中仅包含访问包含目录的文件系统并从那里加载实际/boot/efi/EFI/ubuntu/grub.cfg
文件系统所需的最少配置行,并通过唯一的 UUID 标识文件系统。如果你用eg查看它,它可能看起来像这样:/boot
/boot/grub/grub.cfg
sudo cat /boot/efi/EFI/ubuntu/grub.cfg
search.fs_uuid 11111111-2222-3333-4444-555555555555 root
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg
代替字符串 11111111-2222-3333-4444-555555555555 的将是 或sda2
的唯一文件系统 UUID sde2
:运行lsblk -o +uuid
并比较 UUID。
sda2
如果您希望更改读取其实际配置的位置EFI/ubuntu/grubx64.efi
,您只需编辑/boot/efi/EFI/ubuntu/grub.cfg
以将其指向不同的文件系统即可。
由于当前的操作系统似乎是 Mint(= Ubuntu 的衍生版本),您可能需要/etc/grub.d/40_custom
在 Mint 上进行编辑以添加额外的菜单项以切换到 Zorin 的启动菜单:
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry 'Switch to Zorin OS's GRUB menu' {
search.fs_uuid <filesystem UUID of sda2 here> root
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg
}
当 Zorin 操作系统运行时,您同样可以添加一个菜单项来切换到 Mint 的 GRUB 配置,以防使用 Zorin 的 GRUB:
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry 'Switch to Mint's GRUB menu' {
search.fs_uuid <filesystem UUID of sde2 here> root
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg
}
如果您希望每个操作系统都有单独的引导加载程序,则必须使用自定义引导加载程序 ID 重新安装 GRUB。为此,在每个操作系统上:
- 确保
/dev/sda1
安装为/boot/efi
- 分别运行
grub-install --bootloader-id=mint
或grub-install --bootloader-id=zorin
/boot/efi/EFI/mint/
这应该会导致目录和中出现两个新的 UEFI GRUB 实例/boot/efi/EFI/zorin/
。这些还应该分别注册为名为mint
和的 UEFI 启动选项zorin
。您将在efibootmgr -v
输出中看到名称;如果您系统的 UEFI 固件设计良好,它还会在固件启动顺序设置中显示名称。
如果执行此操作,一旦引导选项mint
和zorin
都经过测试并按预期工作,您可能需要删除旧的不明确ubuntu
条目。这可以通过以下方式完成:
sudo efibootmgr -b 0004 -B
sudo rm -rf /boot/efi/EFI/ubuntu