我正在构建一个自定义的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
就像我写完一样,我的问题已经解决了,我将发布答案
我所做的最后一个调试步骤使我陷入了困境,所以我认为我会为他人着想而给出答案。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.ko
和nfsv4.ko
,根设备本身了安装,复制和幸福的日子,有,有一个tmpfs的启动在NFS无盘服务器/
的目录,伟大的东西的HA集群无盘。
我的测试环境和目标之间的驱动程序差异可能是/etc/dracut.conf
或的结果/etc/dracut.conf.d/
,它可以指定要包含的驱动程序,但我并没有对其进行过多研究(我宁愿在运行命令时指定驱动程序,以便于我的理智)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句