使用NFS模块构建的initrd无法挂载NFS根目录

enti

我正在构建一个自定义的initrd,以便可以使用tmpfs根目录而不是NFS根目录引导无盘节点(initrd中的脚本将根设备的内容复制到tmpfs文件系统,然后更改的值NEWROOT)。在我的测试环境中,一切看起来都很好,我生成了一个自定义的initrd,将其启动,/没有安装为tmpfs,但是拥有NFS根目录提供的所有文件,非常棒。

然后,我开始转向真实环境,当initrd启动时,它因尝试挂载NFS根目录(此时仍是正常的NFS引导)而感到窒息mount.nfs4: No such device

我使用以下方法生成initrd:

dracut -v -m "nfs network base" --include rd.live.overlay/ / initrd-tmpfs.img

我确认initrd-tmpfs.img正在加载(基于PXE引导的早期部分,其中列出了initrd的加载内容)。

当initrd失败时,它会进入紧急状态外壳,并且有一些有趣的事情:

ip addr show 从DHCP列出我的IP,然后可以ping NFS服务器

echo $netroot 列出了NFS引导参数 nfs4:[Server IP]:[root location]:[nfs options]

mount -t nfs4 [Server IP]:[root location] /sysroot结果:(mount.nfs4: No such device非常熟悉)

modprobe nfs结果:modprobe:FATAL: Module nfs not found显然是个问题

grep nfs /usr/lib/dracut/modules.txt 确实匹配

grep nfs /usr/lib/modules/[kernel version]/modules.order匹配几次,提及:kernel/fs/nfs.ko | kernel/fs/nfsv3.ko | kernel/fs/nfsv4.ko但是这些都不存在

环境:RHEL 7


就像我写完一样,我的问题已经解决了,我将发布答案

enti

我所做的最后一个调试步骤使我陷入了困境,所以我认为我会为他人着想而给出答案。grep nfs /usr/lib/modules/[kernel version]/modules.order匹配kernel/fs/nfs.ko | kernel/fs/nfsv3.ko | kernel/fs/nfsv4.ko,但它们不存在。

*.ko表示一个内核驱动程序,并initrd具有一个选项--add-drivers,所以

dracut -v -m "nfs network base" --include rd.live.overlay/ / initrd-tmpfs.img

成为:

dracut -v -m "nfs network base" --add-drivers "nfs nfsv4" \
--include rd.live.overlay/ / initrd-tmpfs.img

然后lsinitrd | grep nfs上市nfs.konfsv4.ko,根设备本身了安装,复制和幸福的日子,有,有一个tmpfs的启动在NFS无盘服务器/的目录,伟大的东西的HA集群无盘。

我的测试环境和目标之间的驱动程序差异可能是/etc/dracut.conf的结果/etc/dracut.conf.d/,它可以指定要包含的驱动程序,但我并没有对其进行过多研究(我宁愿在运行命令时指定驱动程序,以便于我的理智)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章