Grub2

免維護的 Grub2 菜單

  • October 18, 2021

這裡的“免維護”問題之後,我知道有一些方法可以自動生成 grub2 菜單條目,但我需要不時手動編輯/添加它們,比如

  • 到實時 Linux 系統,或
  • 添加新的 ISO 引導條目(存在於另一個磁碟上)時。

幾乎所有 grub2 介紹文件都使用以下形式

set root=(hd2,gpt7)

我知道在我的情況下會失敗,因為我需要不時在我的機器之間移動我的 HD,並且當發生這種情況時,上述格式肯定會中斷。

儘管我可能無法使用 UUID 指定我的 root fs在這裡也失敗了),但我也不想使用 UUID,因為當我格式化分區時(安裝新作業系統時),該分區的 UUID 將改變。

那麼更好的選擇是什麼?

  1. 最重要的是,GPT 分區標籤是最好的候選者,因為我可以確保它們在我所有的機器中都是唯一的,即使我在我的 HD 周圍移動時也是如此。但是,這樣做似乎有問題“我無法使用 PARTLABEL 安裝設備”

但是,它應該是有希望的,正如我所看到的

從 4.20 開始,還支持 PARTLABEL <github.com/torvalds/linux/blob/v4.20/init/do_mounts.c>,我認為這非常方便。也許更新答案。– equaeghe 1 月 20 日

  1. 第二好的是**PARTUUID**。但是,網際網路上有一些令人困惑/相互矛盾的答案。
  • 這裡它說格式是PARTUUID=SSSSSSSS-PP,但它沒有舉例說明它到底是什麼樣子,
  • 一個答案給出了一個例子,但它說格式是root=PARTUUID=666c2eee-193d-42db-a490-4c444342bd4e

那麼,是否會使用PARTLABELPARTUUID可能使用最新的 grub2?

檢查 grub2 的配置文件類型文件和條目。

在為新的 ISO 編輯它時,我總是忘記執行 sudo update-grub。所以我將所有條目移動到我的 ISO 文件夾中的一個文本文件和標準 grub 40_custom 中的一個配置文件條目。然後我只需要編輯文本文件。

有關配置文件的詳細資訊,請參見 6.5 https://www.gnu.org/software/grub/manual/grub/grub.html#Multi_002dboot-manual-config 使用標籤和配置文件來引導另一個安裝

https://askubuntu.com/questions/344125/how-to-add-a-grub2-menu-entry-for-booting-installed-ubuntu-on-a-usb-drive/344359#344359

顯示一個 40_custom 配置文件到 ISO 文件夾中的文本文件中,一個在 hd0 上,另一個在 hd1 上。我在一個驅動器上有 ISO,可以安裝到另一個驅動器,問題較少。

https://ubuntuforums.org/showthread.php?t=2076205&p=13788092#post13788092

https://www.gnu.org/software/grub/manual/grub/grub.html#Multi_002dboot-manual-config

40_custom 中的典型條目,從不更改:

menuentry 'Live ISOs on SSD' {
search --set=root --label iso_ssd --hint hd1,gpt5
configfile /livecdimage.cfg
} 

然後在 livecdimage.cfg 或您想要的任何文件中,複製完整的 grub2 引導節以進行 ISO 或其他安裝。任何 grub 節都可以在文本文件中。

另一個例子:

https://ubuntuforums.org/showthread.php?t=2076205&p=14020961#post14020961

我的名為 livecdimage.cfg 的配置文件範例,通常在 ISO 文件夾中有多個條目或許多 ISO:

# livecdimage.cfg

menuentry "Kubuntu 21.10 Impish Live ISO" {
   set isofile="/ISO/kubuntu-21.10-desktop-amd64.iso"
   loopback loop (hd1,5)$isofile
       linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile toram noeject
       initrd (loop)/casper/initrd
}

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