NFS服务器
NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利
NFS挂载原理
- 网络文件系统 ,允许网络中的计算机之间通过TCP/IP网络共享资源
- 适用于linux与unix之间。不能实现与windows的文件共享
- nfs服务职能基于ip进行认证
- nfs默认端口号2049/tcp,2049/udp
rpc协议
远程调用协议,NFS服务器的端口开在2049,但由于文件系统非常复杂。因此NFS还有其他的程序去启动额外的端口,这些额外的用来传输数据的端口是随机选择的,是小于1024的端口;既然是随机的那么客户端又是如何知道NFS服务器端到底使用的是哪个端口呢?这时就需要通过远程过程调用RPC协议来实现。
RPC最主要的功能就是指定每个NFS功能所对应的port number,并且通知客户端,记客户端可以连接到正常端口上去。
注意:
- RPC服务(即portmap服务),端口号:111
- NFS程序的端口号是随机的,NFS需要向RPC服务区注册端口号
- RPC如果重新启动,原来已经注册好的NFS端口数据会丢失。
NFS与RPC的通讯
步骤:
- 服务端启用RPC和NFS服务,此时NFS进程拥有自己的随机端口号
- 客户端启用RPC服务。向服务端的RPC(portmap)请求,默认端口111
- 服务端接收请求后,传递给客户端对应的NFS端口号
- 客户端再次请求NFS的mountd进程,来进行权限匹配。
- 匹配通过后服务端的本地磁盘中的文件挂载至客户端进行访问
NFS进程
4个进程
- nfsd
nfs的守护进程,负责接收到用户的调用请求后与内核发出请求并得到调用结果响应给用户,工作在tcp和udp的2049端口。
- mountd
是nfs服务的认证服务的守护进程,客户端在收到返回的真正端口时,就会去连接mountd,认证取得令牌。
- idmapd
是NFS的一个程序,用来负责远程client端创建文件后的权限问题
- portmapper
rpc server的端口,并在客户端请求时,负责响应目的rpc server端口返回给客户端,工作在tcp与udp的111端口上
配置NFS服务实例
[root@sawyer ~]# yum install -y nfs-utils 服务端和客户端安装nfs服务
[root@sawyer /]# vim /etc/exports
/nfs/shared *(ro)
/nfs/upload 192.168.197.0/24(rw,anonuid=300,anongid=300) 服务器配置文件中输入共享的目录及其客户端IP和选项
[root@sawyer nfs]# systemctl enable --now nfs-server
......
开启服务并确定开机自启动
[root@localhost ~]# showmount -e 192.168.197.128 客户端查看服务端配置文件内容及其开放主机
Export list for 192.168.197.128:
/nfs/shared *
/nfs/upload 192.168.197.0/24
[root@localhost ~]# mount -t nfs 192.168.197.128:/nfs/upload /media/ 在客户端上挂载共享目录
[root@localhost media]# mount -t nfs 192.168.197.128:/nfs/shared /mnt
[root@localhost ~]# df -h
......
192.168.197.128:/nfs/upload 28G 1.7G 27G 6% /media
192.168.197.128:/nfs/shared 28G 1.7G 27G 6% /mnt
[root@localhost ~]# cd /media/
[root@localhost media]# ls
[root@localhost media]# touch test.sh 客户端可以正常/nfs/upload下创建文件。
[root@localhost media]# ls
test.sh
[root@localhost media]# ll
total 0
-rw-r--r-- 1 300 300 0 Oct 12 15:45 test.sh
[root@localhost mnt]# touch test.sh
touch: cannot touch 'test.sh': Read-only file system 在/nfs/shared下没有写的权限
[root@localhost media]# vim /etc/fstab
......
/dev/mapper/rhel-root / xfs defaults 0 0
UUID=79b984f2-c57e-4c34-8397-0a395c447e25 /boot xfs defaults 0 0
/dev/mapper/rhel-swap swap swap defaults 0 0
192.168.197.128:/nfs/upload /media nfs defaults,_netdev 0 0
192.168.197.128:/nfs/shared /mnt nfs defaults,_netdev 0 0
192.168.197.128:/nfs/shared /mnt nfs defaults,_netdev 0 0 将挂载信息写入fstab文件,实现永久挂载
[root@localhost media]# mount -a
exportfs
-r :重新读取exports文件
[root@sawyer upload]# vim /etc/exports 修改服务端配置文件的选项
/nfs/shared *(rw)
/nfs/upload 192.168.197.0/24(rw,anonuid=300,anongid=300)
[root@localhost mnt]# touch test.sh
touch: cannot touch 'test.sh': Read-only file system 在没有重读配置文件的情况下无法生效
[root@sawyer upload]# exportfs -r 服务端重读配置文件
[root@sawyer nfs]# chown nobody.nobody shared/ 修改shared文件的所属人及其组
[root@localhost mnt]# touch test.sh 客户端创建成功
[root@localhost mnt]# ls
test.sh