nfs

发布时间 2023-12-22 18:12:43作者: 代码你敲我不敲

nfs服务的搭建

步骤

安装nfs服务
启动nfs服务
创建nfs共享文件
配置nfs服务
测试nfs服务

搭建nfs服务不仅需要安装nfs自己的软件包,还要安装rpcbind软件包,以便nfs服务能够监听到111端口。

安装NFS时需要安装rpcbind的原因是因为NFS(Network File System,网络文件系统)使用RPC(Remote Procedure Call,远程过程调用)来进行客户端和服务端之间的通信。在NFS中,客户端需要知道服务端提供的NFS服务的端口号才能进行连接和数据传输。

而rpcbind服务负责管理和维护RPC服务的端口号映射关系,将服务名称映射到对应的端口号。因此,在安装NFS时,需要同时安装rpcbind服务,以便客户端能够通过rpcbind查询NFS服务的端口号,从而成功连接到NFS服务。

另外,rpcbind还负责处理RPC请求的路由和转发,确保客户端的请求能够正确地路由到对应的服务端。因此,安装rpcbind是确保NFS服务正常运行和客户端能够成功连接的必要条件之一。

如果不安装rpcbind,会导致NFS服务无法正常工作。

因为NFS使用RPC进行通信,而RPC需要使用固定的端口号进行通信。如果没有安装rpcbind,就无法建立正确的端口号映射关系,客户端无法知道NFS服务的端口号,也就无法成功连接到NFS服务。此外,rpcbind还负责处理RPC请求的路由和转发,如果缺少这个服务,客户端发送的RPC请求可能无法正确到达对应的服务端,导致通信失败或出现其他错误。

因此,为了确保NFS服务的正常运行和客户端的正确连接,必须安装rpcbind服务。

安装nfs服务和rpcbind服务

[root@localhost opt]# yum -y install nfs-utils rpcbind
Loaded plugins: langpacks, product-id, search-disabled-repos,
              : subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Package 1:nfs-utils-1.3.0-0.33.el7.x86_64 already installed and latest version
Package rpcbind-0.2.0-38.el7.x86_64 already installed and latest version
Nothing to do

默认情况下,是安装了nfs和rpcbind的。

启动nfs服务和rpcbind服务

systemctl start nfs-server rpcbind

创建共享文件

mkdir nfs

配置nfs服务

/etc/exports是NFS服务器配置文件,用于定义哪些文件系统目录可以被NFS客户端访问,以及访问权限。

在/etc/exports文件中,每一行定义一个共享目录及其访问权限。格式如下:

<directory> <client list> <options>

<directory>:要共享的目录的绝对路径。
<client list>:允许访问该目录的客户端列表。可以使用通配符,例如*表示所有客户端。
<options>:访问权限选项,可以包括以下选项:
rw:允许读写访问。
ro:只允许只读访问。
sync:同步写入,数据写入到磁盘后再返回响应。
async:异步写入,数据写入到缓存中即返回响应。
no_root_squash:允许客户端上的root用户以服务端上的root用户权限进行访问。
其他选项根据需要设置。
例如,以下是一个示例配置:

/usr/sys/src host2(rw,sync,no_root_squash) host3(ro,sync) * (rw,sync)

这个配置将/usr/sys/src目录共享给host2主机,允许读写访问,并且客户端上的root用户以服务端上的root用户权限进行访问。同时,也将该目录共享给host3主机,只允许只读访问。最后,允许所有客户端读写访问该目录。

请注意,修改/etc/exports文件后,需要重新启动NFS服务或使用exportfs -ra命令重新加载配置才能生效。

/home/nfs 192.168.1.0/24(rw,sync,no_root_squash,no_subtree_check)
[root@localhost nfs]# vim /etc/exports

/opt/nfs 192.168.10.10(rw,sync)
/opt/nfs 192.168.10.20(ro,sync)

重启服务

[root@localhost nfs]# systemctl restart nfs-server rpcbind

tips:

重启nfs-server和nfs的主要区别在于它们的作用和范围。

重启nfs-server是指重启NFS服务器服务。NFS(Network File System,网络文件系统)是一种用于在计算机系统之间共享文件和目录的协议。NFS服务器负责提供文件共享服务,允许远程计算机像访问本地文件一样访问和操作远程文件。重启nfs-server会重新启动NFS服务,恢复或解决任何与NFS服务相关的问题。

而nfs则通常是指网络文件系统(Network File System)的简称,它是一种分布式文件系统,可以在不同计算机之间共享文件和目录。nfs不是一项服务或命令,而是一种文件系统类型,它依赖于NFS服务器和客户端之间的通信来实现文件共享。

因此,重启nfs-server和nfs的主要区别在于前者是重启NFS服务器服务,而后者是分布式文件系统类型。

查看

[root@localhost nfs]#  exportfs -v
/opt/nfs      	192.168.10.10(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/opt/nfs      	192.168.10.20(ro,wdelay,root_squash,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)

tips:

exportfs -v命令用于显示NFS服务器上已挂载的共享文件系统信息。这个命令可以帮助你查看哪些目录已经被导出(共享)给其他客户端,以及相关的访问权限和选项。

执行exportfs -v命令后,通常会列出所有已挂载的共享目录及其详细信息,包括客户端列表、访问权限、挂载选项等。

请注意,exportfs命令是NFS服务器端的管理工具,通常在NFS服务器上执行。如果你想查看客户端上的挂载情况,可以使用showmount -e命令。

防火墙的放行

[root@localhost nfs]# firewall-cmd --permanent --add-service=nfs
success
[root@localhost nfs]# firewall-cmd --permanent --add-service=rpc-bind
success
[root@localhost nfs]# firewall-cmd --permanent --add-service=mountd
success
[root@localhost nfs]# firewall-cmd --reload 
success

也可以尝试用富规则放行

[root@localhost nfs]# firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.10.10/24 service name=nfs accept'
success
[root@localhost nfs]# firewall-cmd  --reload 
success
[root@localhost nfs]# firewall-cmd --permanent --remove-service=nfs
success
[root@localhost nfs]# firewall-cmd  --reload 
success
[root@localhost nfs]# firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.10.10/24 service name=rpc-bind accept'
success
[root@localhost nfs]# firewall-cmd  --reload 
success
[root@localhost nfs]# 
[root@localhost nfs]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens32
  sources: 
  services: dhcpv6-client ftp http mountd mysql ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  sourceports: 
  icmp-blocks: 
  rich rules: 
	rule family="ipv4" source address="192.168.10.10/24" service name="nfs" accept
	rule family="ipv4" source address="192.168.10.10/24" service name="rpc-bind" accept

tips:

mountd服务是NFS服务器的重要组成部分,它负责管理NFS共享目录的挂载和卸载。当客户端请求挂载共享目录时,mountd服务会与客户端建立连接,验证客户端的访问权限,然后执行相应的挂载操作。同时,当客户端请求卸载共享目录时,mountd服务也会执行相应的卸载操作。

在NFS服务器中,mountd服务与rpcbind服务协同工作,共同完成NFS服务的启动和停止。当NFS服务器启动时,rpcbind服务会启动并监听相应的端口号,而mountd服务则会通过rpcbind服务提供的端口号与客户端建立连接。

总之,mountd服务是NFS服务器中负责管理共享目录挂载和卸载的重要服务。

测试nfs

[root@client opt]# cd share_nfs/
[root@client share_nfs]# ls
[root@client share_nfs]# touch old
[root@client share_nfs]# ls
old
[root@client share_nfs]# cd ..
[root@client opt]# mount -t nfs 192.168.10.10:/opt/nfs ./share_nfs/
[root@client opt]# df -hT
Filesystem             Type      Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root  xfs        16G  3.4G   13G  22% /
devtmpfs               devtmpfs  977M     0  977M   0% /dev
tmpfs                  tmpfs     993M   84K  993M   1% /dev/shm
tmpfs                  tmpfs     993M  8.9M  984M   1% /run
tmpfs                  tmpfs     993M     0  993M   0% /sys/fs/cgroup
/dev/sda1              xfs       497M  148M  350M  30% /boot
tmpfs                  tmpfs     199M   16K  199M   1% /run/user/42
tmpfs                  tmpfs     199M     0  199M   0% /run/user/0
/dev/sr0               iso9660   3.6G  3.6G     0 100% /media
192.168.10.10:/opt/nfs nfs4       16G  4.1G   12G  27% /opt/share_nfs
[root@client opt]# 
[root@client opt]# cd share_nfs/
[root@client share_nfs]# ls
flag  share
[root@client share_nfs]# cd ..
[root@client opt]# umount /opt/share_nfs/
[root@client opt]# cd share_nfs/
[root@client share_nfs]# ls
old