![将 NFS 更改为使用 UDP 而不是 TCP](https://linux22.com/image/764589/%E5%B0%86%20NFS%20%E6%9B%B4%E6%94%B9%E4%B8%BA%E4%BD%BF%E7%94%A8%20UDP%20%E8%80%8C%E4%B8%8D%E6%98%AF%20TCP.png)
我有一台使用 NFS 的 Debian 10 机器,它使用 TCP 协议,我想将其更改为 UDP。
这是网络启动机器的输出:
mount | grep 1
10.10.1.1:/remotesys on / type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,proto=tcp,port=2049,timeo=7,retrans=10,sec=sys,local_lock=all,addr=10.10.1.1)
我可以在哪里永久更改 proto=tcp 参数?我猜想这可以在 pxelinux.cfg/default 文件中设置,但我没有找到此文件的任何文档,所以我不知道这里使用的语法。
编辑:到目前为止我已经尝试过:
- 将选项“proto=udp”添加到 /etc/exports(已启动但 tcp 仍在使用中)
- 将选项“udp”添加到 /etc/exports(已启动但 tcp 仍在使用中)
- 在 pxelinux.cfg/default 中的 nfsroot 选项中添加选项“,proto=udp”(启动失败 - 无效选项 proto)
- 将选项“proto=udp”添加到 pxelinux.cfg/default(已启动但 tcp 仍在使用中)
- 将选项“udp”添加到 pxelinux.cfg/default(已启动但 tcp 仍在使用中)
答案1
在您的 中pxelinux.cfg/default
,您可能指定了如下内容:
LABEL Ubuntu
MENU LABEL ^Ubuntu 20.04 LTS Desktop
MENU DEFAULT
KERNEL ubuntu-live/casper/vmlinuz
APPEND root=/dev/nfs boot=casper ip=dhcp netboot=nfs nfsroot=192.168.xx.yy:/srv/ubuntu initrd=ubuntu-live/casper/initrd
这里这是内核命令行中 nfsroot 参数的文档。它说:
nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
因此,您的问题的答案是,只需将proto=udp
选项附加到上面指定的 nfsroot 参数,如下所示:
APPEND root=/dev/nfs boot=casper ip=dhcp netboot=nfs nfsroot=192.168.xx.xx:/srv/ubuntu,proto=udp initrd=ubuntu-live/casper/initrd
[编辑]
这应该是该文件所用文件格式的文档pxelinux.cfg/default
。
[编辑2]
经过长时间的彻底搜索,我想我终于找到了内核命令行中的选项被忽略的原因:
ubuntu casper 的错误报告
- scripts/casper 脚本使用 nfsmount,它不接受 -o udp 选项。将 »nfsmount« 更改为 »mount -t nfs« 是一个简单的更改,而且有效。
因此解决方案是修复图像中使用的 initrd...
答案2
这是一个安装选项:
mount -o udp server:/export /mnt
笔记通过 UDP 传输大文件可能会导致数据丢失!