我正在开展一个项目,该项目要求我通过 PXEboot 将一个非常大的 initrd (1.3G) 引导到客户端,但是当通过 uefi 使用 grub2 时,我遇到了错误:
Can't allocate initrd
这似乎表明 grub 正在尝试访问超出其地址限制的内容......这很奇怪,因为在具有 32GB RAM 的 64 位机器上,内存限制应该高得多。
由于 NFSmount 在我的位置不可靠,因此无法使用 PXE 来启动较小的映像。我并没有使用 Grub2,但在从源代码编译后无法让 syslinux.efi 启动。
有没有办法强制 grub 采用大的 initrd?
答案1
PXE 传输 1.3GB initrd 是一个糟糕的设计。
您不需要在 NFS 上进行中继。典型的方法是使用具有网络支持的 20/40 MB initrd,能够映射 SMB 共享或仅通过 HTTP(wget/curl)检索组件。在安装离散组件发行版(如 Ubuntu Server)或 Live 发行版(如 Ubuntu 桌面 Live)时可以看到这种方法。如果您的 initrd 中有所有内容,则应将其拆分并将其转换为 squashfs 单个文件。
不幸的是,syslinux.efi 6.03 仍然不是 100% 可靠,并且 grub2 也不太友好。
点击此处了解详情塞瓦PXE 启动许多 Linux 发行版,这肯定有助于您启动您的发行版。(我与 Serva 开发有关)
答案2
我可以通制作一个内置有 livenet/network 模块的 Dracut 图像并使用 squashfs 根来解决这个问题。
需要注意的是,Dracut 希望 SquashFS 以某种方式格式化:/LiveOS/rootfs.img,其中 rootfs.img 是包含实际文件系统的 ext4 格式的文件系统。