背景
dd
我通过USB 磁盘驱动器的命令制作了 Ubuntu 20.04“自定义”img 。我使用Serva
以下作为 PXE 服务器Serva
教程。
官方 Ubuntu 20.04.4 ISO PXE 启动成功。当我 PXE 启动我的“自定义”映像时,它会正确下载vmlinuz
,initrd
但initrd
会触发内核恐慌。
问题
通过将图像文件(根分区文件夹)中的所有文件复制到 来将 Linux 资产添加到 Serva 的存储库是否正确NWA_PXE/{my customized image name}
?
如果这种方法正确,是否会initrd
因为启动时缺少某些内核模块(如 SMB 或 CIFS)而触发内核恐慌?
这是受到这篇文章的启发:使用 PXE 启动自定义 Linux 映像
错误代码是:
[ 1.437739] ---[ end Kernel panic - not syncing: Attempted to kill init! exit code=0x00000200 ]---
ServaAsset.inf 设置是:
[PXESERVA_MENU_ENTRY]
asset = customized img beta
platform = amd64
kernel_bios = /NWA_PXE/$HEAD_DIR$/casper/vmlinuz
append_bios = showmounts toram root=/dev/cifs initrd=/NWA_PXE/$HEAD_DIR$/casper/initrd boot=casper netboot=cifs nfsroot=//$IP_BSRV$/NWA_PXE_SHARE/$HEAD_DIR$ NFSOPTS=-ouser=serva,pass=avres,sec=ntlmv2,vers=2.0,ro ip=dhcp ro ipv6.disable=1
kernel_efi64 = /NWA_PXE/$HEAD_DIR$/boot/vmlinuz-5.11.0-40-generic
append_efi64 = showmounts toram root=/dev/cifs initrd=/NWA_PXE/$HEAD_DIR$/boot/initrd.img-5.11.0-40-generic boot=casper netboot=cifs nfsroot=//$IP_BSRV$/NWA_PXE_SHARE/$HEAD_DIR$ NFSOPTS=-ouser=serva,pass=avres,sec=ntlm,vers=1.0,ro ip=dhcp ro ipv6.disable=1
答案1
能够进行 PXE 引导的 Linux 发行版INITRD
在其脚本中提供了特殊代码init
,允许它们处理 PXE 引导相关的内容,例如获取 IP、设置 DNS 客户端、安装 CIFS 或 NFS(如果发行版是 Live 版本,则安装如果此代码不存在,则将init
在没有正确“chroot”到相应的启动映像的情况下结束,但它init
是一个永远不应该将控制权返回到命令解释器(ash)的脚本,这就是为什么你会得到:
[ end Kernel panic - not syncing: Attempted to kill init! exit code=0x00000200 ]---
在您的情况下,如果您需要 PXE 启动功能,最好从具有 PXE 功能的发行版开始,然后添加您的特定功能。例如,使用实时发行版并将所需的功能添加到包含的 squashfs 映像中。
请记住,Serva 很多次创建补充的 INITRD,修复某些发行版 PXE 错误或只是缺乏所需协议的支持(即启动 INITRD 级别的 CIFS 支持)等。