我已经使用闪存驱动器上的 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
probe -u $root --set=abc
使用 $abc 作为 $root 的 uuid 变量。
因此,在我的具体情况下,grub.cfg 的相关部分变为:
probe -u $root --set=rootuuid
set imgdevpath="/dev/disk/by-uuid/$rootuuid"
而且效果很好。