我正在尝试通过 iPXE 和 NFS 设置 Ubuntu 的网络启动mini.iso
。我目前正在通过 iPXE 命令行而不是脚本逐步完成所有操作。我确保在启用 NFS 的情况下构建 iPXE,这似乎运行良好,因为我可以正常访问initrd.gz
。但我不知道如何告诉 iPXE 内核是什么;我假设该linux
文件是内核,但当我尝试告诉 iPXE 使用该文件时,它会抛出Exec format error (http://ipxe.org/2e008081)
。
更详细地说,系统设置如下:
- mini.iso 作为共享文件夹安装在 QNAP TurboNAS 上,并通过 NFS 启用访客访问
- 新服务器 PXE 启动,通过 TFTP 链式加载 iPXE
- 我
<Ctrl-B>
进入 iPXE 命令行 initrd nfs://guest@<nfs ip address>/Ubuntu1604Mini/initrd.gz
很好用kernel nfs://guest@<nfs ip address>/Ubuntu1604Mini/linux
因上述错误而惊慌失措
我很难在 Google 上搜索这个问题,因为其他一切似乎都假设一个非网络启动映像,所以所有这些说明都假设casper
目录的存在,casper/vmlinuz
但 mini.iso 似乎有一个非常不同的结构。
任何帮助都将不胜感激!谢谢!
编辑
如果相关,则所有 NFS 访客访问都是只读的。
编辑2:
看来这实际上是一个 UEFI 问题。我在文档中发现 mini.iso 没有设置为在 UEFI 环境中启动。因此,我已切换到尝试通过 Ubuntu 16.04 Server .ISO 使其工作,但仍然遇到问题;从一些粗略的网络搜索来看,Ubuntu 16.04 上的 vmlinuz 似乎未使用 EFI Stubs 进行编译。我找到了 EFI/BOOT/BOOTx64.EFI 文件,但当我使用 iPXE 链式加载它时,它开始尝试通过 TFTP 查找 Netbook 映像,因此我不能 100% 确定它在做什么或我可以传递给它什么参数。
答案1
我在 nfs 上实时启动 debian 时遇到了同样的问题。ipxe 文档提到了使用 bios 而不是 efi 的启动情况,正如您提到的,解决方案与 efi 有关。
在 imgargs 行中添加参数 initrd=initrd_file_name。
此信息来源为:http://forum.ipxe.org/showthread.php?tid=7522
虽然我在官方文档中没有找到它,但它在 efi 上对我来说有效。