フラッシュドライブで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"
そしてそれは素晴らしい作品です。