无盘启动(Diskless Booting)- grub.cfg配置与NFS根文件系统参数传递问题
无盘启动(Diskless Booting)- grub.cfg配置与NFS根文件系统参数传递问题
看起来你已经走完了无盘启动准备的核心步骤——搭好PXE服务器、导出NFS根文件系统,现在卡在grub参数配置和initrd的疑问上了,我来帮你梳理清楚关键要点:
一、NFS根文件系统的参数传递位置
你需要把根文件系统的相关参数添加到**linux行(也就是vmlinuz所在的那一行)**,而非initrd行。内核启动时需要先明确根文件系统的位置和类型,这些参数是直接传递给内核的,不是给initrd的。
具体要添加的核心参数包括:
root=/dev/nfs:告诉Linux内核,根文件系统通过NFS挂载nfsroot=<NFS服务器IP>:<根文件系统的NFS共享路径>:指定NFS服务器IP和共享出去的根文件系统路径,比如nfsroot=192.168.0.134:/srv/nfs/ubuntu2204-rootfsip=dhcp:让无盘客户端通过DHCP获取IP(无盘环境下没有本地网络配置)rw:将根文件系统挂载为读写模式(如果需要只读可换成ro)
二、关于initrd的问题
你当前用的是Ubuntu ISO自带的initrd,它是为安装介质设计的,并不适配无盘NFS启动场景——它不会自动挂载NFS根文件系统,所以必须替换为适配无盘启动的initrd。
获取适配initrd的方法:
从你用来制作根文件系统的那个Ubuntu客户端系统中,提取/boot目录下对应内核版本的initrd文件(比如initrd.img-5.15.0-xx-generic),把它上传到PXE服务器的对应路径下,替换原来的initrd。
三、修改后的grub.cfg示例
把你现有menuentry部分修改成如下样子:
menuentry 'Ubuntu 22.04 Diskless Client' { gfxmode $linux_gfx_mode # 这里添加了NFS根文件系统的核心参数 linux /distros/ubuntu22.04/vmlinuz root=/dev/nfs nfsroot=192.168.0.134:/srv/nfs/ubuntu2204-rootfs ip=dhcp rw quiet splash # 替换为适配无盘启动的initrd initrd /distros/ubuntu22.04/initrd.img-5.15.0-xx-generic }
额外注意事项
- 确认NFS服务器的
/etc/exports配置正确,比如共享路径的条目可以是/srv/nfs/ubuntu2204-rootfs 192.168.0.0/24(rw,sync,no_subtree_check,no_root_squash),配置后记得重启NFS服务(systemctl restart nfs-server) - 确保客户端和NFS服务器之间的网络通畅,防火墙不要拦截NFS相关端口(主要是2049,以及rpcbind的端口)
- 根文件系统中需要预先安装
nfs-common包,保证NFS挂载相关的工具和模块存在
备注:内容来源于stack exchange,提问作者Mubeen
相关产品推荐
相关产品推荐

