一个 NFS 安装为 nfs-3,另一个安装为 nfs-4。我如何让它们都成为 nfs-4?

一个 NFS 安装为 nfs-3,另一个安装为 nfs-4。我如何让它们都成为 nfs-4?

我的服务器上有两个 NFS 导出,在 /etc/exports 中配置相同。在我的 NFS 客户端上,一个始终使用 NFS-3 自动挂载,而另一个则使用 NFS-4 挂载。我想要 nfs-4。我怎样才能做到这一点?

在服务器上(“nina”):

# cat /etc/exports
/home 192.168.0.0/24(rw,no_all_squash,anonuid=1545,anongid=501)
/misc/fedora-backup 192.168.0.0/24(rw,no_all_squash,anonuid=1545,anongid=501)
# exportfs -arv
exporting 192.168.0.0/24:/misc/fedora-backup
exporting 192.168.0.0/24:/home

在客户端:

$ ls /net/nina/home /net/nina/misc/fedora-backup
/net/nina/home:
bhepple  data  guest  lost+found  nina  watched-files

/net/nina/misc/fedora-backup:
backup-copy  lost+found  media
$ mount |grep nfs
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
nina:/home on /net/nina/home type nfs4 (rw,nosuid,nodev,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.0.104,local_lock=none,addr=192.168.0.19)
nina:/misc/fedora-backup on /net/nina/misc/fedora-backup type nfs (rw,nosuid,nodev,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.0.19,mountvers=3,mountport=20048,mountproto=udp,local_lock=none,addr=192.168.0.19)

这些都是最新的 fedora-37 系统。

编辑手动挂载也显示错误:

sudo mount -t nfs4 nina:/misc/fedora-backup ~/tmp/mnt
mount.nfs4: mounting nina:/misc/fedora-backup failed, reason given by server: No such file or directory 

如果我省略它,-t nfs4它安装正常,但它只是 nfs-3。

答案1

看起来 nfs4 无法导出单独的目录 - 它们都需要嵌套在一起,可能使用绑定安装来指向您想要的位置。

https://superuser.com/questions/362736/cant-mount-nfs4-share

答案2

寻找vers客户端的选项。您有vers=4.2家庭安装和vers=3备份。

此外,如果未指定或其别名,则type nfs4type nfs可用于确定版本。versnfsvers

答案3

我正在使用 Debian,但遇到了同样的问题,特别是在使用下一个稳定版本时“特里克西”(现在是 Debian13/testing)作为客户端以及当前的稳定版“书呆子”(Debian12/稳定版)服务器。我认为理解这个问题对fedora也有帮助。

我的安装使用 Kerberos。默认使用的 NFS 协议是版本 4.2。 Debian12 上的 NFS 客户端如果无法与版本 4 建立连接,会自动回退到协议版本 3。这可以使用 进行测试mount。请注意命令提示符server12:~$client12:~$、 或client13:~$

这些导出不符合 NFS4 的导出根目录仅导出嵌套目录的要求。但可以用NFS3挂载。

server12:~$ cat /etc/exports
/home      192.168.24.0/24(sec=krb5p,rw,async,no_subtree_check)
/srv/nfs   192.168.24.0/24(sec=krb5p,rw,async,no_subtree_check,fsid=0,crossmnt)

server12:~$ sudo exportfs -rv
exporting 192.168.24.0/24:/home
exporting 192.168.24.0/24:/srv/nfs

client12:~$ sudo showmount --exports server
Export list for server:
/home    192.168.24.0/24
/srv/nfs 192.168.24.0/24

client12:~$ sudo mount -vvv -t nfs4 -o sec=krb5p server:/srv/nfs /mnt/server
mount.nfs4: timeout set for Mon Jan  1 14:38:33 2024
mount.nfs4: trying text-based options 'sec=krb5p,vers=4.2,addr=192.168.24.125,clientaddr=192.168.24.65'
mount.nfs4: mount(2): No such file or directory
mount.nfs4: trying text-based options 'sec=krb5p,addr=192.168.24.125'
mount.nfs4: prog 100003, trying vers=3, prot=6
mount.nfs4: trying 192.168.24.125 prog 100003 vers 3 prot TCP port 2049
mount.nfs4: prog 100005, trying vers=3, prot=17
mount.nfs4: trying 192.168.24.125 prog 100005 vers 3 prot UDP port 51678

该图mount显示连接尝试以默认方式启动并成功vers=4.2返回。vers 3您可以看到它与以下连接vers=3

client12:~$ findmnt /mnt/server
/mnt/server server:/srv/nfs nfs    rw,relatime,vers=3,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp, ...

但在 Debian13 上,NFS 客户端不再回退到 NFS3。这给我升级时带来了问题“特里克西”。您现在必须指定要使用的 NFS 版本:

client13:~$ sudo mount -vvv -t nfs4 -o sec=krb5p server:/srv/nfs /mnt/server
mount.nfs4: timeout set for Mon Jan  1 16:21:13 2024
mount.nfs4: trying text-based options 'sec=krb5p,vers=4.2,addr=192.168.24.125,clientaddr=192.168.24.83'
mount.nfs4: mount(2): No such file or directory
mount.nfs4: mounting server:/srv/nfs failed, reason given by server: No such file or directory

client13:~$ # But specifying vers=3 as additional option then it connects:
client13:~$ sudo mount -vvv -t nfs4 -o sec=krb5p,vers=3 server:/srv/nfs /mnt/server
mount.nfs4: timeout set for Mon Jan  1 16:29:31 2024
mount.nfs4: trying text-based options 'sec=krb5p,vers=3,addr=192.168.24.125'
mount.nfs4: prog 100003, trying vers=3, prot=6
mount.nfs4: trying 192.168.24.125 prog 100003 vers 3 prot TCP port 2049
mount.nfs4: prog 100005, trying vers=3, prot=17
mount.nfs4: trying 192.168.24.125 prog 100005 vers 3 prot UDP port 51678

假设已成功配置 NFS 服务器,为了完整起见,以下是有效 NFS4 配置的导出和挂载。

server12:~$ cat /etc/exports
# Only for testing fallback to NFS3
#/home          192.168.24.0/24(sec=krb5p,rw,async,no_subtree_check)
#/srv/nfs       192.168.24.0/24(sec=krb5p,rw,async,no_subtree_check,fsid=0,crossmnt)
#
# Valid NFS4 configuration
/srv/nfs        gss/krb5p(rw,async,no_subtree_check,fsid=0,crossmnt)
/srv/nfs/home   gss/krb5p(rw,async,no_subtree_check)

server12:~$ cat /etc/fstab
PARTLABEL=rootfs   /       ext4   errors=remount-ro   0   1
PARTLABEL=swap     none    swap   sw                  0   0
/dev/vdb           /media  ext4   errors=remount-ro   0   1

/media          /srv/nfs/media           none   bind  0   0
/home/ingo      /srv/nfs/home/ingo       none   bind  0   0
/home/mary      /srv/nfs/home/mary       none   bind  0   0
/home/common    /srv/nfs/home/common     none   bind  0   0


client13:~$ cat /etc/fstab
# Your local mounts ..., then for NFS4 mounts
server:/       /mnt/srv    nfs4    sec=krb5p   0   0
server:/home   /mnt/home   nfs4    sec=krb5p   0   0

client13:~$ ls /mnt/srv
home/  media/
client13:~$ ls /mnt/home
common/  ingo/  mary/

相关内容