我正在尝试构建内核 3.13.9,使用 获取apt-get source
并构建一个干净的debootstrap
chroot(主机和 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
.
简而言之,有几种可能:
- 按照上面的链接告诉你:已经
root=/dev/nfs
设置,给出正确的nfsroot
参数并通过参数告诉你的内核你的网络配置ip
(这是确保它正常工作的最佳方法,即排除错误配置的 DHCP 服务器)。 - 启用
CONFIG_IP_PNP
并CONFIG_IP_PNP_DHCP
设置 DHCP 守护进程来告诉您的客户端要使用哪个 IP 地址以及在哪里可以找到其 NFS 根目录。 - 构建一个
initramfs
进行正确配置和 NFS 安装的文件系统。
编辑:我认为,如果您按照编辑建议使用initrd
/ ,initramfs
则必须在 中进行 NFS 安装initrd
(您initrd
必须意识到它必须这样做)。通过内核自动挂载(如 IP 自动配置、IIRC)仅在没有initrd
.
答案2
FalcoGer,我也在问自己同样的问题。由于我们已经在引导加载程序中将 root=/dev/nfs 作为参数传递,因此我尝试注释此行,systemd-remount-fs 停止抱怨!现在想知道这是否真的需要