Grub2

兩個 SSD,兩個 Linux 發行版 - 引導期間哪個 grub 顯示 grub 菜單?

  • June 2, 2022

我在兩個 SSD 中有兩個單獨的 Linux 發行版。

  1. 佐林 (/dev/sda)
  2. 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/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規範,它應該是不區分大小寫的。但是,一些有bug的UEFI韌體版本是區分大小寫的。這裡我假設你的韌體沒有這樣的錯誤。)

僅韌體將接受由硬體製造商或 Microsoft 簽名的引導載入程序;將shimx64.efiCanonical 的簽名密鑰和可選的機器所有者密鑰 (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 提供安全更新。

(當 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

search.fs_uuid 11111111-2222-3333-4444-555555555555 root 
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

代替字元串 11111111-2222-3333-4444-555555555555 將是唯一的文件系統 UUIDsda2sde2:執行lsblk -o +uuid並比較 UUID。

如果您希望更改sda2EFI/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 OS 執行時,您同樣可以添加一個菜單項來切換到 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//boot/efi/EFI/zorin/. 這些也應分別註冊為 UEFI 引導選項,分別命名為mintzorinefibootmgr -v您將在輸出中看到名稱;如果您系統的 UEFI 韌體設計良好,它還會在韌體啟動順序設置中顯示名稱。

如果您這樣做,一旦啟動選項經過測試mint並按zorin預期工作,您可能希望刪除舊的模棱兩可的ubuntu條目。這可以通過以下方式完成:

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

引用自:https://unix.stackexchange.com/questions/704701