兩個 SSD,兩個 Linux 發行版 - 引導期間哪個 grub 顯示 grub 菜單?
我在兩個 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 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
看起來目前只有 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
search.fs_uuid 11111111-2222-3333-4444-555555555555 root set prefix=($root)'/boot/grub' configfile $prefix/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 的啟動菜單:#!/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=mint
或grub-install --bootloader-id=zorin
分別這應該會在目錄
/boot/efi/EFI/mint/
和/boot/efi/EFI/zorin/
. 這些也應分別註冊為 UEFI 引導選項,分別命名為mint
和zorin
。efibootmgr -v
您將在輸出中看到名稱;如果您系統的 UEFI 韌體設計良好,它還會在韌體啟動順序設置中顯示名稱。如果您這樣做,一旦啟動選項經過測試
mint
並按zorin
預期工作,您可能希望刪除舊的模棱兩可的ubuntu
條目。這可以通過以下方式完成:sudo efibootmgr -b 0004 -B sudo rm -rf /boot/efi/EFI/ubuntu