获取 grub.cfg 中文件路径的设备部分

获取 grub.cfg 中文件路径的设备部分

我正在为一个可以在不同计算机上使用的驱动器编写自定义 grub.cfg。根据我在哪台计算机上使用它,设备标识符可能会有所不同(从 hd0 到 hd1 或 hd2,具体取决于存在的其他驱动器)。

${cmdpath}了我正确的 grub.cfg 位置,所以我基本上是在尝试做set root=${cmdpath}/../../。但是,然后ls /返回错误消息error: disk '(hd1,gpt1)/EFI/BOOT/../../' not found.

⇒ 有没有办法通过使用 grub.cfg 命令来获取该hd1部分?${cmdpath}=(hd1,gpt1)/EFI/BOOT

我知道正确的解决问题的方法是使用命令search。但为了简化部署,我尝试在多个驱动器上使用完全相同的 grub.cfg(因此没有search.fs_uuid),并且计算机上可以有两个相同驱动器格式的实例(因此我不能依赖search.fs_labelsearch.file)。

答案1

只需注意regexp命令:

regexp -s 2:drive (.*)(hd[0-9]*)(.*) $cmdpath

甚至这似乎也有效:

regexp -s drive (hd[0-9]*).* $cmdpath

不确定在这种情况下(incmdpath是否被忽略/剥离是一个错误,所以第一种方法可能更安全(编辑:除非原始文件root不在同一个磁盘照这样cmdpath,您可以改用这种方法root;当获得其价值()时显然会被剥离)root

顺便说一句,虽然我还没有检查过,但我认为当 grub 安装到 MBR 驱动器以用于 BIOS(即,在这种情况下core.img嵌入到 MBR 后间隙中)时,cmdpath可能是一个hdX。对我来说,不幸的是,在 GPT(EFI 或非 EFI)的情况下,变量没有(重新)定义为磁盘core.img开启,并且也没有为此引入任何新变量。

相关内容