NFS
1 nfs特点 (Network File System)
1.节约使用的磁盘空间
客户端经常使用的数据可以集中存放在一台机器上,并使用NFS发布,那么网络内部所有计算机可以通过网络访问,不必单独存储.
2.节约硬件资源
NFS还可以共享软驱,CDROM和ZIP等的存储设备,减少整个网络上的可移动设备的数量.
3.用户主目录设定
对于特殊用户,如管理员等,为了管理的需要,可能会经常登录到网络中所有的计算机,若每个客户端,均保存这个用户的主目录很繁琐,而且不能保证数据的一致性.实际上,经过NFS服务的设定,然后在客户端指定这个用户的主目录位置,并自动挂载,就可以在任何计算机上使用用户主目录的文件.
nfs体系至少有两个主要部分:
一台nfs服务器
若干台客户机
RPC
RPC(Remote Procedure Call Protocol),远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。

rpc工作机制如上图所示,下面来描述一下它:
客户端程序发起一个RPC系统调用基于TCP协议发送给另一台主机(服务端)
服务端监听在某个套接字上,当收到客户端的系统调用请求以后,将收到的请求和其所传递的参数通过本地的系统调用执行一遍,并将结果返回给本地的服务进程
服务端的服务进程收到返回的执行结果后将其封装成响应报文,再通过rpc协议返回给客户端
客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行
nfs工作机制
NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。
NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利;

如上图示:
当我们在NFS服务器设置好一个共享目录/home/public后,其他的有权访问NFS服务器的NFS客户端就可以将这个目录挂载到自己文件系统的某个挂载点,这个挂载点可以自己定义,如上图客户端A与客户端B挂载的目录就不相同。并且挂载好后我们在本地能够看到服务端/home/public的所有数据。如果服务器端配置的客户端只读,那么客户端就只能够只读。如果配置读写,客户端就能够进行读写。挂载后,NFS客户端查看磁盘信息命令:#df –h。
实例
作业
手动搭建一个nfs服务器
开放/nfs/shared目录,供所有用户查阅资料
开放/nfs/upload目录为172.16.12.0/24网段的数据上传目录,并将所有用户及所属的用户组都映射为nfs-upload,其UID与GID均为300
配置的步骤
服务端
[root@czh ]# dnf -y install nfs-utils
[root@czh ]# systemctl start nfs-server
[root@czh # ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 64 0.0.0.0:2049 0.0.0.0:*
LISTEN 0 128 0.0.0.0:36297 0.0.0.0:*
LISTEN 0 64 0.0.0.0:46255 0.0.0.0:*
LISTEN 0 128 0.0.0.0:111 0.0.0.0:*
LISTEN 0 128 0.0.0.0:20048 0.0.0.0:*
LISTEN 0 128 [::]:42005 [::]:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 64 [::]:2049 [::]:*
LISTEN 0 64 [::]:42567 [::]:*
LISTEN 0 128 [::]:111 [::]:*
LISTEN 0 128 [::]:20048 [::]:*
[root@140 ]# systemctl stop firewalld
[root@140 ]# setenforce 0
###编辑/etc/exports文件
root@czh ]# mkdir -p /nfs/upload
[root@czh ]# mkdir -p /nfs/shared
[root@czh ]# vim /etc/exports
[root@czh ]# cat /etc/exports
/nfs/shared *(ro)
/nfs/upload 192.168.31.*(rw,anonuid=300,anongid=300)
创建映射用户和共享目录并设置权限
[root@czh ]# groupadd -r -g 300 nfs-upload
[root@czh ]# useradd -r -u 300 -g 300 nfs-upload
[root@czh ]# id nfs-upload
uid=300(nfs-upload) gid=300(nfs-upload) 组=300(nfs-upload)
[root@czh ]# setfacl -m u:nfs-upload:rwx /nfs/upload/
[root@czh ]# setfacl -m g:nfs-upload:rwx /nfs/upload
重启服务
[root@czh ]# systemctl restart nfs-server
客户端
[root@czh ]# dnf -y install nfs-utils
[root@czh ]# systemctl start nfs-utils
[root@czh ]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:111 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:111 [::]:*
LISTEN 0 128 [::]:22 [::]:*
[root@czh ]# systemctl stop firewalld
[root@czh ]# setenforce 0
挂载
手动挂载
[root@czh ~]# mount -t nfs 192.168.31.140:/nfs/ /media/
[root@czh ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 876M 0 876M 0% /dev
tmpfs 895M 0 895M 0% /dev/shm
tmpfs 895M 8.8M 887M 1% /run
tmpfs 895M 0 895M 0% /sys/fs/cgroup
/dev/mapper/cs-root 17G 1.8G 16G 11% /
/dev/sda1 1014M 195M 820M 20% /boot
tmpfs 179M 0 179M 0% /run/user/0
192.168.31.140:/nfs 17G 1.8G 16G 11% /media
测试
[root@czh upload]# cd ../shared/
[root@czh shared]# ls
[root@czh shared]# touch xixi
touch: 无法创建 'xixi': 只读文件系统
[root@czh shared]# touch hehe
touch: 无法创建 'hehe': 只读文件系统
[root@czh shared]# ll
总用量 0
[root@czh shared]# cd ../upload/
[root@czh upload]# ll
总用量 0
-rw-r--r--. 1 300 300 0 6月 6 13:02 czh
[root@czh upload]# touch xixi
[root@czh upload]# ll
总用量 0
-rw-r--r--. 1 300 300 0 6月 6 13:02 czh
-rw-r--r--. 1 300 300 0 6月 6 13:03 xixi
[root@czh upload]# rm -rf xixi
[root@czh upload]# ll
总用量 0
-rw-r--r--. 1 300 300 0 6月 6 13:02 czh
1757

被折叠的 条评论
为什么被折叠?



