我在两个 SSD 中有两个单独的 Linux 发行版。
- 佐林 (/dev/sda)
- Linux Mint (/dev/sde)
首先我安装了 Zorin,然后安装了 Linux Mint。
我跑了bootinfoscript。这是结果的要点。
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 Mintefibootmgr
命令中显示:
$ 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
看起来目前只有 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规范,它应该是不区分大小写的。但是,一些有bug的UEFI固件版本是区分大小写的。这里我假设你的固件没有这样的错误。)仅固件将接受由硬件制造商或 Microsoft 签名的引导加载程序;将
shimx64.efi
Canonical 的签名密钥和可选的机器所有者密钥 (MOK) 添加到允许列表中(非持久性,因此shimx64.efi
必须在每次启动时执行)。启用安全启动后,如果您希望构建自己的自定义内核或使用第三方内核模块,则需要设置 MOK。(如果您需要设置 MOK,请参阅 Debian Wiki 上的这篇文章。它也适用于 Ubuntu 和衍生产品。)
/boot/efi/EFI/ubuntu/grubx64.efi
是 GRUB 的一个版本,基本上所有 GRUB 模块都内置并由 Canonical 签名以符合安全启动要求它来自 packagegrub-efi-amd64-signed
. 因为它是由 Canonical 而不是 Microsoft 签署的,Canonical 将能够在需要时及时向 GRUB 提供安全更新。(当 Secure Boot 生效时,GRUB 将无法根据需要加载 GRUB 模块,因为与 Secure Boot 兼容的固件会将未从有效签名的 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
代替字符串 11111111-2222-3333-4444-555555555555 将是唯一的文件系统 UUID
sda2
或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 的启动菜单:当 Zorin OS 运行时,您同样可以添加一个菜单项来切换到 Mint 的 GRUB 配置,以防曾经使用过 Zorin 的 GRUB:
如果您想为每个操作系统使用单独的引导加载程序,则必须使用自定义引导加载程序 ID 重新安装 GRUB。为此,在每个操作系统上:
/dev/sda1
安装为/boot/efi
grub-install --bootloader-id=mint
或grub-install --bootloader-id=zorin
分别这应该会在目录
/boot/efi/EFI/mint/
和/boot/efi/EFI/zorin/
. 这些也应分别注册为 UEFI 引导选项,分别命名为mint
和zorin
。efibootmgr -v
您将在输出中看到名称;如果您系统的 UEFI 固件设计良好,它还会在固件启动顺序设置中显示名称。如果您这样做,一旦启动选项经过测试
mint
并按zorin
预期工作,您可能希望删除旧的模棱两可的ubuntu
条目。这可以通过以下方式完成: