既知のパーティションのUUIDをGRUBの変数として読み込みます。

既知のパーティションのUUIDをGRUBの変数として読み込みます。

フラッシュドライブでgrubを使用してループ型アーチインストールISO(および他のいくつかのISO)を正常に起動しました。私のgrubファイルはFlashの/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にあることをすでに知っています。 $imgdevpathに提供できるようにuuidを読みたいです。

答え1

持っているhelp-grub メーリングリストの回答:

probe -u $root --set=abc

$root の uuid 変数として $abc を使用します。

したがって、私の具体的な場合、grub.cfgの関連部分は次のようになります。

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

そしてそれは素晴らしい作品です。

関連情報