两个 SSD、两个 Linux 发行版 - 哪个 grub 在启动过程中显示 grub 菜单?

两个 SSD、两个 Linux 发行版 - 哪个 grub 在启动过程中显示 grub 菜单?

我有两个独立的 Linux 发行版,位于两个 SSD 中。

  1. 佐林 (/dev/sda)
  2. 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/ubuntuESP 上的目录中,因此最后安装的一个将通过覆盖另一个的引导加载程序来“获胜”。

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.cfgsudo 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=mintgrub-install --bootloader-id=zorin

/boot/efi/EFI/mint/这应该会导致目录和中出现两个新的 UEFI GRUB 实例/boot/efi/EFI/zorin/。这些还应该分别注册为名为mint和的 UEFI 启动选项zorin。您将在efibootmgr -v输出中看到名称;如果您系统的 UEFI 固件设计良好,它还会在固件启动顺序设置中显示名称。

如果执行此操作,一旦引导选项mintzorin都经过测试并按预期工作,您可能需要删除旧的不明确ubuntu条目。这可以通过以下方式完成:

sudo efibootmgr -b 0004 -B
sudo rm -rf /boot/efi/EFI/ubuntu

相关内容