千家信息网

如何进行nfs不同版本的挂载与解析

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,如何进行nfs不同版本的挂载与解析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。NFS,是Network File System的简写,
千家信息网最后更新 2026年11月03日如何进行nfs不同版本的挂载与解析

如何进行nfs不同版本的挂载与解析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

  • NFS,是Network File System的简写,即网络文件系统。网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS. NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件 。

  • 运行模式: C/S
    版本异同:RHEL6.5以NFSv3作为默认版本,NFSv3使用TCP、UDP协议(端口号是2049),默认是UDP; RHEL7以NFSv4作为默认版本,NFSv4使用TCP协议(端口号是2049)和NFS服务器建立连接。

  • 原理示意图:

  • RHEL6.5环境:

  • 服务端配置安装

  • 1、包安装

  • # rpm -qa | grep nfs-utils
  • # yum install nfs-utils rpcbind
  • 要部署NFS服务,需要安装上面两个软件包
    1.nfs-utils:NSF主程序
    包括rpc.nfsd,rpc.mountd等等
    2.rpcbind:rpc主程序
    NFS可以被视为一个RPC程序,在启动任何一个RPC程序之前,需要做好端口映射工作,这个映射工作
    就是由rpcbind服务来完成的,因此必须先启动rpcbind服务,再启动nfs服务

2、NFS文件配置:

[root@test /]# vi /etc/exports 
#增加一行:
/tmp/test0920 11.11.165.0/24(rw,no_root_squash,no_all_squash,sync)

:x保存退出;

3、使配置生效:

[root@test /]# exportfs -r

注:配置文件说明:

/tmp/test0920 为共享的目录,使用绝对路径。

11.11.165.0/24

4、测试:

[root@localhost ~]# showmount -e 
Export list for test1:
/tmp/test0920 11.11.165.0/24

5、设置服务开机自启
Chkconfig rpcbind on
Chkconfig --level 345 rpcbind on
Chkconfig nfs on
Chkconfig --level 345 nfs on


客户端的配置:
1、yum -y install nfs-utils
2、mount -t nfs 11.11.165.115:/tmp/test0920 /data
3、编辑/etc/fstab
增加11.11.165.115:/tmp/test0920 /data nfs defaults 0 0

注意默认是nfs挂载
如果选择nfs4挂载,则可以用以下语句
mount -t nfs4 11.11.165.115:/tmp/test0920 /data
编辑/etc/fstab
则可以
11.11.165.115:/tmp/test0920 /data nfs4 defaults 0 0
或者
11.11.165.115:/tmp/test0920 /data nfs defaults,v4 0 0

容易出现的问题:
在/etc/sysconfig/nfs文件里,将
# Turn off v2 and v3 protocol support
#RPCNFSDARGS="-N 2 -N 3"
# v4 protocol support
#RPCNFSDARGS="-N 4" 将这句的#去掉后
则出现
[root@testsj ~]# mount -t nfs 11.11.165.115:/tmp/test0920 /data
mount.nfs: Protocol not supported
[root@testsj ~]# mount -t nfs4 11.11.165.115:/tmp/test0920 /data
mount.nfs4: Protocol not supported
因为关闭了nfs4, 则nfs4和4以下的协议都不支持了
当你加上#号后,nfs4和nfs3都可以挂载了




RHEL7.3环境:
在/etc/sysconfig/nfs文件里
RPCNFSDARGS="-V 4.2"
编辑/etc/fstab
则可以
11.11.165.115:/tmp/test0920 /data nfs4.2 defaults 0 0
或者
11.11.165.115:/tmp/test0920 /data nfs defaults,v4.2 0 0
服务和防火墙稍有差别
[root@linuxprobe ~]# systemctl start rpcbind
[root@linuxprobe ~]# systemctl enable rpcbind
[root@linuxprobe ~]# systemctl start nfs-server
[root@linuxprobe ~]# systemctl enable nfs-server

进站允许策略

# firewall-cmd --add-service=nfs --zone=internal --permanent
# firewall-cmd --add-service=mountd --zone=internal --permanent
# firewall-cmd --add-service=rpc-bind --zone=internal --permanent

加安全认证的配置
在desktop30上挂载来自于server30的NFS共享,要求
1 /public挂载在目录/mnt/nfsmount上
2 /protected挂载在目录/mnt/nfssecure,并使用安全的方式,秘钥在http://ldap.example.com/pub/desktop30.keytab
3 这些文件系统在系统启动时自动挂载
[root@desktop30 mnt]# systemctl enable nfs-server.service
[root@desktop30 mnt]# systemctl enable nfs-secure.service
ln -s '/usr/lib/systemd/system/nfs-secure.service' '/etc/systemd/system/nfs.target.wants/nfs-secure.service'
[root@desktop30 mnt]# systemctl start nfs-secure.service
[root@desktop30 mnt]# mkdir nfsmount
[root@desktop30 mnt]# mkdir nfssecure
[root@desktop30 mnt]# wget -O /etc/krb5.keytab http://ldap.example.com/pub/desktop30.keytab
[root@desktop30 mnt]# vim /etc/fstab
172.16.30.130:/public /mnt/nfsmount nfs ro 0 0
server30.example.com:/protected /mnt/nfssecure nfs rw,sec=krb5p 0 0

协议版本解析:
NFS协议到现在经历了V1,V2,V3,V4版本,但是它有一个缺点就是协议没有用户认证机制,而且数据在网络上传送的时候是明文传送,所以安全性极差,一般只能在局域网中使用。
NFSv3是1995年发布的,相比NFSv3,NFSv4发生了比较大的变化,最大的变化是NFSv4有状态了。NFSv2和NFSv3都是无状态协议,服务区端不需要维护客户端的状态信息。无状态协议的一个优点在于灾难恢复,当服务器出现问题后,客户端只需要重复发送失败请求就可以了,直到收到服务器的响应信息。但是某些操作必须需要状态,如文件锁。如果客户端申请了文件锁,但是服务器重启了,由于NFSv3无状态,客户端再执行锁操作可能就会出错了。NFSv3需要NLM协助才能实现文件锁功能,但是有的时候两者配合不够协调。NFSv4设计成了一种有状态的协议,自身实现了文件锁功能,就不需要NLM协议了。
NFSv4和NFSv3的差别如下:
(1) NFSv4设计成了一种有状态的协议,自身实现了文件锁功能和获取文件系统根节点功能,不需要NLM和MOUNT协议协助了。
(2) NFSv4增加了安全性,支持RPCSEC-GSS身份认证。
(3) NFSv4只提供了两个请求NULL和COMPOUND,所有的操作都整合进了COMPOUND中,客户端可以根据实际请求将多个操作封装到一个COMPOUND请求中,增加了灵活性。
(4) NFSv4文件系统的命令空间发生了变化,服务器端必须设置一个根文件系统(fsid=0),其他文件系统挂载在根文件系统上导出。
(5)
NFSv4支持delegation。由于多个客户端可以挂载同一个文件系统,为了保持文件同步,NFSv3中客户端需要经常向服务器发起请求,请求文件属性信息,判断其他客户端是否修改了文件。如果文件系统是只读的,或者客户端对文件的修改不频繁,频繁向服务器请求文件属性信息会降低系统性能。NFSv4可以依靠delegation实现文件同步。当客户端A打开一个文件时,服务器会分配给客户端A一个delegation。只要客户端A具有delegation,就可以认为与服务器保持了一致。如果另外一个客户端B访问同一个文件,则服务器会暂缓客户端B的访问请求,向客户端A发送RECALL请求。当客户端A接收到RECALL请求时将本地缓存刷新到服务器中,然后将delegation返回服务器,这时服务器开始处理客户端B的请求。
(6) NFSv4修改了文件属性的表示方法。由于NFS是Sun开发的一套文件系统,设计之出NFS文件属性参考了UNIX中的文件属性,可能Windows中不具备某些属性,因此NFS对操作系统的兼容性不太好。NFSv4将文件属性划分成了三类:
Mandatory Attributes: 这是文件的基本属性,所有的操作系统必须支持这些属性。
Recommended Attributes: 这是NFS建议的属性,如果可能操作系统尽量实现这些属性。
Named Attributes: 这是操作系统可以自己实现的一些文件属性。
(7)服务器端拷贝:
如果客户需要从一个NFS服务器拷贝数据到另外一个NFS服务器,nfsv4可以让两台NFS服务器之间直接拷贝数据,不需要经过客户端。
(8)资源预留和回收:
NFSv4为虚拟分配提供的新特性。随着存储虚拟分配功能的普及使用,nfsv4可以为预留固定大小的存储空间;同样在文件系统上删除文件后,也能够在存储上面释放相应空间。
(9)国际化支持:
NFSv4文件名、目录、链接、用户与组可以使用 UTF-8字符集,UTF-8兼容ASCII码,使得NFSv4支持更多语言。
(10)RPC合并调用:
NFSv4允许将多个请求合并为一个rpc引用,在NFSv3每个请求对应一个rpc调用。WAN环境中,NFSv4合并rpc调用可以显著降低延迟。
(11)安全性:
NFSv4用户验证采用"用户名+域名"的模式,与Windows AD验证方式类似,NFSv4强制使用Kerberos验证方式。(Kerberos与Windows AD都遵循相同RFC1510标准),这样方便windows和*nix环境混合部署。
(12)pNFS
并行NFS文件系统,元数据服务器负责用户请求调度、数据服务器负责客户请求处理。pNFS需要NFS服务器和客户端协同支持

后来的 NFSv4.1,与NFSv4.0相比,NFSv4.1最大的变化是支持并行存储了。在以前的协议中,客户端直接与服务器连接,客户端直接将数据传输到服务器中。当客户端数量较少时这种方式没有问题,但是如果大量的客户端要访问数据时,NFS服务器很快就会成为一个瓶颈,抑制了系统的性能。NFSv4.1支持并行存储,服务器由一台元数据服务器(MDS)和多台数据服务器(DS)构成,元数据服务器只管理文件在磁盘中的布局,数据传输在客户端和数据服务器之间直接进行。由于系统中包含多台数据服务器,因此数据可以以并行方式访问,系统吞吐量迅速提升。现在新的是nfsv4.2
所以尽可能用nfs4



补充:
nfs4挂载的fsid问题
问题现象:
挂载nfs4时,报错:reason given by server :No such file or directory

背景知识:
NFSv4将所有共享使用一个虚拟文件系统展示给客户端。伪文件系统根目录(/)使用fsid=0标示,只有一个共享可以是fsid=0。客户端需要使用"nfs server ip:/"挂载伪文件系统,伪文件系统一般使用RO方式共享,其他共享可以通过mount -bind选项在伪文件系统目录下挂载。客户端挂载过程需要通过mount -t nfs4指定NFS版本为4,默认采用nfsv3。

解决:
以下是我的配置文件,我想挂在/datapool/nfs目录
/ *(rw,fsid=0,insecure,no_root_squash)
/datapool/nfs *(rw,fsid=1000,insecure,no_root_squash

然后mount -t nfs4 ip:/datapool/nfs /mnt/nfs/



nfs配置参数选项说明:
ro:共享目录只读;
rw:共享目录可读可写;
all_squash:所有访问用户都映射为匿名用户或用户组;
no_all_squash(默认):访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组;
root_squash(默认):将来访的root用户映射为匿名用户或用户组;
no_root_squash:来访的root用户保持root帐号权限;
anonuid=:指定匿名访问用户的本地用户UID,默认为nfsnobody(65534);
anongid=:指定匿名访问用户的本地用户组GID,默认为nfsnobody(65534);
secure(默认):限制客户端只能从小于1024的tcp/ip端口连接服务器;
insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
wdelay(默认):检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率;
no_wdelay:若有写操作则立即执行,应与sync配合使用;
subtree_check(默认) :若输出目录是一个子目录,则nfs服务器将检查其父目录的权限;
no_subtree_check :即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;

Troubleshooting

1、在上面的操作过程中,如果你不幸遇到下面这个问题的话,可以尝试更新 Linux kernel 或通过打开 IPv6 来解决这个问题,这是1个 bug:

# mount -t nfs4 172.16.20.1:/ /home/vpsee/bak/
mount.nfs4: Cannot allocate memory

2、如果遇到如下问题,可能是因为你的 mount -t nfs 使用的是 nfsv3 协议,需要明确指出使用 nfsv4 协议挂载 mount -t nfs4:

# mount -t nfs 172.16.20.1:/ /home/vpsee/bak/
mount: mount to NFS server '172.16.20.1' failed: RPC Error: Program not registered.

# mount -t nfs4 172.16.20.1:/ /home/vpsee/bak/

如果网络不稳定

NFS默认是用UDP协议,换成TCP协议挂载即可:

mount -t nfs 11.11.165.115:/tmp/test0920 /data -o proto=tcp -o nolock

VMware ESXi5.5主机无法挂载RHEL6.5 NFS存储

看完上述内容,你们掌握如何进行nfs不同版本的挂载与解析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

文件 服务 服务器 客户 系统 客户端 用户 数据 目录 属性 问题 支持 版本 状态 配置 方式 存储 安全 功能 网络 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司 华服互联网科技怎么样 互联网科技有限公司图片 科技互联网技术 平安科技 互联网 丰台科技园 互联网 壕鑫互联网络科技 新浪科技互联网 互联网科技股午盘股票涨跌 互联网和高科技公司 现代互联网科技股 知域互联网科技有限公司大骗子 江阴互联网智能科技产品进口 中国互联网公司排名锤子科技 科技互联网海报 上海同邻互联网科技有限公司规模 国产互联网科技公司 科技和互联网行业的特点 广州全民伙伴互联网科技有限公司 小牛互联网科技有限公司地址 互联网科技公司 互联网科技公司经营范围 互联网科技股有哪些 居家互联网科技有限公司 金融科技与互联网金融相同和不同 乌鲁木齐新华智原互联网科技学校 佛山市翊博互联网络科技有限公司 领航科技大厦互联网公司 济南小医互联网科技有限公司招聘 艺电能源互联网科技有限公司招聘
0