我正在尝试让远程根(和启动)NFS 文件系统正常工作,但已经超出了我的知识范围。我想知道是否有人可以给我指明正确的方向。
服务器
TFTP 和 NFS 均由运行 OpenWRT 19.07 的 Linksys WRT 1900 ACS 路由器提供服务。此设备还具有一个外部 SSD,用作覆盖根文件系统。
https://openwrt.org/docs/guide-user/additional-software/extroot_configuration。
每个客户端在此目录中都有一个根系统文件(Ubuntu 21.04)
/nfs/exports/tftp/
以及一个 boot 目录
/tftp/tftpboot/
/etc/exports 的内容如下:
/overlay/upper/nfs/exports/ *(rw,sync,no_subtree_check,no_root_squash) /overlay/upper/tftp/tftpboot/ *(rw,sync,no_subtree_check,no_root_squash)
如果我不添加 /overlay/upper/ 前缀,那么我就无法挂载导出的目录
客户
客户端成功通过 PXE 启动并加载操作系统(Ubuntu 21.04),我可以登录、SSH 等。但是,在启动过程中或尝试执行 apt-get 升级时,会出现错误。
启动时我看到的第一个错误是:
[Failed] Failed to start Remount Root and Kernel File System
后来我明白了
[Failed] Failed to mount /boot
但一旦登录,/boot 似乎就被挂载了。
这是来自客户端的 fstab
10.1.0.1:/overlay/upper/nfs/exports/tftp/68fe97e5 / nfs defaults,_netdev,nfsvers=4.1,proto=tcp 0 0
10.1.0.1:/overlay/upper/tftp/tftpboot/68fe97e5 /boot nfs defaults,_netdev,nfsvers=4.1,proto=tcp 0 0
tmpfs /tmp tmpfs defaults 0 0
tmpfs /var/tmp tmpfs defaults 0 0
tmpfs /var/run tmpfs defaults 0 0
(抱歉格式不对)
和 /boot/cmdline.txt
net.ifnames=0 dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/nfs nfsroot=10.1.0.1:/overlay/upper/nfs/exports/tftp/68fe97e5,tcp ip=dhcp elevator=deadline rootwait fixrtc rw cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory
当我查看 systemctl systemd-remount-fs.service 时,我看到了这一行
May 27 15:10:08 rdg-clust-01 systemd-remount-fs[317]: mount.nfs: an incorrect mount option was specified
有人能指出我哪个选项是错误的吗?
答案1
看看 KickStart、JumpStart 或旧版 RoboInstaller 是如何工作的。miniroot 内核映像由 TFTP 提供服务,文件系统由 NFS 提供服务。这也是过去无盘 UNIX 客户端的工作方式。我非常肯定您无法使用 TFTP 为整个文件系统提供服务。协议的设计方式并非如此。
有许多在线文档可帮助您成功配置无盘系统:
https://www.xmodulo.com/diskless-boot-linux-machine.html
http://mirror.internode.on.net/pub/ldp/en/Diskless-root-NFS-HOWTO/Diskless-root-NFS-HOWTO.pdf