我正在尝试通过 USB 拇指驱动器上的 xen 映像启动 grub2。但是,出于某种原因,它无法正常工作。
我的原始 grub 条目如下,它可以在 LVM 分区 HDD 上运行:
menuentry 'Xen 4 (Linux 2.6.32.50-xen)' --class ubuntu --class gnu-linux --class gnu --class os --class xen {
recordfail
insmod ext2
set root='(hd0,1)'
search --no-floppy --fs-uuid --set 6542fe50-82e2-467a-b832-7cf92f71bc98
multiboot /xen.gz placeholder noreboot
module /vmlinuz-2.6.32.50-xen placeholder root=/dev/mapper/xenserver-root ro
module /initrd.img-2.6.32.50-xen
}
但是,不能关闭没有 LVM 且分区为 ext2 的拇指驱动器。
目前它看起来像这样:
menuentry 'Xen 4 (Linux 2.6.32.50-xen)' --class ubuntu --class gnu-linux --class gnu --class os --class xen {
recordfail
insmod ext2
set root='(hd0,1)'
search --no-floppy --fs-uuid --set 55425e50-82e2-4c74-b860-7cf92f91b423
multiboot /xen.gz placeholder noreboot
module /vmlinuz-2.6.32.50-xen placeholder root=/dev/sda1 ro
module /initrd.img-2.6.32.50-xen
}
我的理解是 set root='(hd0,1)' 将根环境变量设置为第一个硬盘、第一个分区。现在,搜索行有什么作用?
根据 grub2 文档中关于搜索命令的内容,如果我没有理解错的话,如果找到了具有该 uuid 的磁盘,它会将 root 设置为该 uuid... 或者这是该磁盘上的第一个分区?如果找不到,是否意味着它默认为 (hd0,1)?
目前不是对我来说,它说我需要先加载多重引导内核。所以显然找不到 xen.gz。可能是我需要删除 --no-floppy 吗?我知道有些 BIOS 将 USB 拇指驱动器视为软盘。虽然在我的系统上它显示为 /dev/hda。如果它插入硬盘,它就是 /dev/hdb。这还能用吗?鉴于未安装 LVM 且 /dev/mapper/xenserver-root 不存在,我应该将 root= 行设置为什么。我看到有些人将其设置为 /dev/hdb1,但我希望它自动解决此问题或由 update-grub 生成。
我该如何让它工作?我尝试了很多方法,但显然都不是正确的方法。
答案1
经过多次试验,我终于让它工作了。在此过程中,我发现了搜索的作用,并在此过程中学习了很多有关 grub 和 grub 命令行的知识。它并不像看起来那么难。
我的条目的问题在于,我需要在多重引导和模块条目的文件名前加上 /boot/ 前缀。
我还发现搜索功能确实发挥了我想的作用。它查找文件或文件系统的 uuid(取决于选项)并将 root 设置为磁盘位置和分区号。
因此,初始的 set root='(hd0,1)' 行有点多余。如果搜索失败,它似乎会默认使用该行。