无盘 Linux UEFI 启动在 pivot_root 处失败,需要指定根,但我如何确定根设备?

无盘 Linux UEFI 启动在 pivot_root 处失败,需要指定根,但我如何确定根设备?

我们需要设置一个 EFI PXE 服务器。我已经成功地让一台测试机器一直启动,直到我们到达启动过程的 pivot_root 部分。然后我得到了可怕的:

VFS: Cannot open root device "nvram" or unknown-block(0,0)
Please append a correct "root=" boot option; here are the available partitions:

是的,分区列表是nil

有人能告诉我如何获取无盘 centos 机器的旧版 grub 配置中的 root= 设备吗?显然,我已经尝试过/dev/nvram、 和/dev/ram

当我们进行 PXE 启动(传统模式)时,没有任何问题或特殊设置要求根设备。它就是正常工作。这是我第一次使用 EFI 启动,所以我确信我只是缺少一些参数。

当前设置:CentOS 6.8、旧版 Grub(bootx64)、ISC DHCP、TFTP

当前 EFI 配置(/EFI/efidefault):

default=0
timeout=3
splashimage=(nd)/splash.xpm.gz
#prompt 0
#ONTIMEOUT default

title Linux
   menu label UEFI Image
   menu default
   root (nd)
   kernel /discovery_images/2.6.32-642.el6.x86_64/vmlinuz-2.6.32-642.el6.x86_64 root=/dev/nvram
   append initrd=/discovery_images/2.6.32-642.el6.x86_64/centos-initramfs-2.6.32-642.el6.x86_64.img.gz rw shell init=/init biosdevname=0 consoleblank=0 vga=773 ramdisk_size=9216

最终修复

所以问题在于我使用了错误的语法来配置旧版 GRUB。感谢 Freenode (IRC) 中的 #CENTOS,其中一位成员(抱歉,我不记得他/她的昵称)指出旧版 GRUB 无法理解该指令。因此,将我的配置字符串(上面)append中的参数移动到指令中并丢失行上的字符串,最后删除和之间的字符串,解决了该问题:appendkernelappendinitrd=initrd/discover...

default=0
timeout=3
splashimage=(nd)/splash.xpm.gz

title Linux
   menu label UEFI Image
   menu default
   root (nd)
   kernel /discovery_images/2.6.32-642.el6.x86_64/vmlinuz-2.6.32-642.el6.x86_64 rw shell init=/init biosdevname=0 consoleblank=0 vga=773 ramdisk_size=9216
   initrd /discovery_images/2.6.32-642.el6.x86_64/centos-initramfs-2.6.32-642.el6.x86_64.img.gz

答案1

AFAICT(但我自己的实验更多是在无盘 Windows 上,即使我们在被这家大两个字母的 IT 公司扼杀之前就开始将我们的无盘解决方案移植到 Windows...),你可能需要一些不同的东西。1 - 不要在内核行上指定任何“root=”2 - 使用 initrd 行(以及你必须构建的相关 init ram 驱动器)3 - 在这个 initrd 中,启动你需要挂载根分区(以及其他分区)的任何块设备和文件系统驱动程序

查看此页面: http://linux120919.blogspot.fr/2015/01/redhat-65-as-legacy-and-uefi-pxe.html 例如

相关内容