我的服务器上有两个 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 nfs4
和type nfs
可用于确定版本。vers
nfsvers
答案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/