免维护的 Grub2 菜单

免维护的 Grub2 菜单

“免维护”问题在这里,我知道有一些方法可以自动生成 grub2 菜单项,但我需要不时手动编辑/添加它们,例如

  • 到实时 Linux 系统,或者
  • 添加新的 ISO 启动项(存在于另一个磁盘上)时。

几乎所有 grub2 介绍文档都使用以下形式

set root=(hd2,gpt7)

我知道这在我的情况下会失败,因为我需要不时地在我的机器之间移动我的硬盘,并且当发生这种情况时,上述格式肯定会被破坏。

尽管有可能我无法使用 UUID 指定我的根文件系统(和在这里失败了太),我也不想使用UUID,因为当我格式化分区时(安装新操作系统时),该分区的UUID将会改变。

那么更好的选择是什么?

  1. 最重要的是,GPT 分区标签是最好的候选者,因为我可以确保它们在我的所有机器中都是唯一的,即使当我四处移动我的硬盘时也是如此。然而,这样做似乎有问题“我无法使用 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

那么,是否可以使用PARTLABEL最新PARTUUID的 grub2?

答案1

检查 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
}

相关内容