将已知分区的 UUID 读取到 GRUB 中的变量中

将已知分区的 UUID 读取到 GRUB 中的变量中

我已经使用闪存驱动器上的 grub 成功启动了循环安装的 arch 安装 iso(以及其他几个 isos)。我的 grub 文件位于闪存上的 /boot/grub 中,iso 文件位于 /boot/iso 中(请参阅https://wiki.archlinux.org/index.php/Multiboot_USB_drive)。 grub.cfg 的相关部分是

imgdevpath="/dev/disk/by-uuid/CF3D-EC7C"

menuentry '[loopback]archlinux-2015.07.01-dual.iso i686' {
    set isofile='/boot/iso/archlinux-2015.07.01-dual.iso'
    loopback loop $isofile
    linux (loop)/arch/boot/i686/vmlinuz archisolabel=ARCH_201507 img_dev=$imgdevpath img_loop=$isofile earlymodules=loop
    initrd (loop)/arch/boot/i686/archiso.img
}

当 imgdevpath 中的 UUID 正确时,这可以正常工作。因此,必须事先手动更新线路。只有这样才有效。

我想读取 GRUB 根分区的 UUID(这也是我存放iso文件的分区),在引导时从 grub 内部进入变量。这可以做到吗?

它将简化从(循环安装)iso 文件的引导。 “ls ($root)”已经显示了 UUID(除其他外),但它不能被输入到变量中(或者至少我不知道如何)。理想情况下,我想做类似的事情

foobar_readuuid ($root) --set=rootuuid
imgdevpath="/dev/disk/by-uuid/$rootuuid"
...

我不是在寻找“搜索”命令;而是在寻找“搜索”命令。据我所知,它的输出始终是“设备,分区”,即 hdX,msdosY 之类的东西。我已经知道它在 $root 中。只是想读取 uuid,这样我就可以将它提供给 $imgdevpath

答案1

得到了来自 help-grub 邮件列表的回答:

probe -u $root --set=abc

使用 $abc 作为 $root 的 uuid 变量。

因此,在我的具体情况下,grub.cfg 的相关部分变为:

probe -u $root --set=rootuuid
set imgdevpath="/dev/disk/by-uuid/$rootuuid"

而且效果很好。

相关内容