使用 NFS 支持构建内核,但未获取 /dev/nfs

使用 NFS 支持构建内核,但未获取 /dev/nfs

我正在尝试构建内核 3.13.9,使用 获取apt-get source并构建一个干净的debootstrapchroot(主机和 chroot 都是 Ubuntu Trusty 的安装)。我的目标是通过 NFS 将无盘机器引导到控制台。

我运行make menuconfig并启用了 64 位内核,禁用了调试,并确保我正在进行 64 位构建。此外,我进入文件系统->网络文件系统,并启用以下内容:

  • 网络文件系统
  • NFS 客户端支持

主机已nfs-kernel-server安装,并为我想用作网络引导系统的根目录的目录设置了导出。

PXE 启动正常,内核和 initrd 已加载,但在长时间暂停后,由于缺少根文件系统,我被转储到 busybox 提示符。

可能是什么原因? (或者,需要更多信息吗?)

编辑:我已经过去了nfsroot

LABEL linux
KERNEL vmlinuz-3.13.9
APPEND root=/dev/nfs initrd=initrd.img-3.13.9 nfsroot=192.168.1.39:/nfsroot,rw ip=dhcp rw

答案1

作为内核文档状态,/dev/nfs不是一个真正的设备,而只是一个提示内核使用 NFS 作为rootfs.您还必须通过参数 nfsroot或正确设置的 DHCP 守护程序告诉内核在哪里可以找到此根目录。为了使后一个工作正常,您还必须配置内核以自动配置其网络接口,或者让一个程序initramfs来处理这个问题。

另外,请确保您的内核二进制文件中内置了 NFS 支持,并且不是作为一个模块(或者有一个initramfs,它负责这个)。网络驱动程序也是如此:您很可能希望将以太网网卡的驱动程序内置到内核映像中,否则您必须从initramfs.

简而言之,有几种可能:

  1. 按照上面的链接告诉你:已经root=/dev/nfs设置,给出正确的nfsroot参数并通过参数告诉你的内核你的网络配置ip(这是确保它正常工作的最佳方法,即排除错误配置的 DHCP 服务器)。
  2. 启用CONFIG_IP_PNPCONFIG_IP_PNP_DHCP设置 DHCP 守护进程来告诉您的客户端要使用哪个 IP 地址以及在哪里可以找到其 NFS 根目录。
  3. 构建一个initramfs进行正确配置和 NFS 安装的文件系统。

编辑:我认为,如果您按照编辑建议使用initrd/ ,initramfs则必须在 中进行 NFS 安装initrd(您initrd必须意识到它必须这样做)。通过内核自动挂载(如 IP 自动配置、IIRC)仅在没有initrd.

答案2

FalcoGer,我也在问自己同样的问题。由于我们已经在引导加载程序中将 root=/dev/nfs 作为参数传递,因此我尝试注释此行,systemd-remount-fs 停止抱怨!现在想知道这是否真的需要

相关内容