NFS
nfs特点
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源
nfs工作机制
nfs是基于rpc来实现网络文件系统共享的。
RPC
RPC(Remote Procedure Call Protocol),远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。
rpc工作机制
客户端程序发起一个RPC系统调用基于TCP协议发送给另一台主机(服务端)
服务端监听在某个套接字上,当收到客户端的系统调用请求以后,将收到的请求和其所传递的参数通过本地的系统调用执行一遍,并将结果返回给本地的服务进程
服务端的服务进程收到返回的执行结果后将其封装成响应报文,再通过rpc协议返回给客户端
客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行
showmount命令:
```bash
showmount
-a //显示指定NFS服务器的所有客户端主机及其所连接的目录
-d //显示指定的NFS服务器中已被客户端连接的所有输出目录
-e //显示指定的NFS服务器上所有输出的共享目录
实例要求
开放/nfs/shared目录,供所有用户查阅资料
开放/nfs/upload目录为192.168.149.0/24网段的数据上传目录,并将所有用户及所属的用户组都映射为nfs-upload,其UID与GID均为300
服务端配置
服务端IP:192.168.149.140
- 安装启动nfs并关闭防火墙和selinux
[root@host ~]# dnf -y install nfs-utils
[root@host ~]# systemctl start nfs-server
[root@host ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 64 0.0.0.0:2049 0.0.0.0:*
LISTEN 0 128 0.0.0.0:48197 0.0.0.0:*
LISTEN 0 64 0.0.0.0:44845 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 0.0.0.0:22 0.0.0.0:*
LISTEN 0 64 [::]:2049 [::]:*
LISTEN 0 64 [::]:38759 [::]:*
LISTEN 0 128 [::]:111 [::]:*
LISTEN 0 128 [::]:20048 [::]:*
LISTEN 0 128 [::]:49617 [::]:*
LISTEN 0 128 [::]:22 [::]:*
[root@host ~]# systemctl stop firewalld.service
[root@host ~]# setenforce 0
- 编辑/etc/exports文件
[root@host ~]# vim /etc/exports
[root@host ~]# cat /etc/exports
/nfs/shared *(ro)
/nfs/upload 192.168.149.137(rw,anonuid=300,anongid=300)
- 创建映射用户和共享目录并设置权限
[root@host ~]# groupadd -r -g 300 nfs-upload
[root@host ~]# useradd -r -u 300 -g 300 nfs-upload
[root@host ~]# id nfs-upload
uid=300(nfs-upload) gid=300(nfs-upload) 组=300(nfs-upload)
[root@host ~]# mkdir -p /nfs/upload
[root@host ~]# mkdir -p /nfs/shared
[root@host ~]# setfacl -m u:nfs-upload:rwx /nfs/upload/
[root@host ~]# setfacl -m g:nfs-upload:rwx /nfs/upload/
- 重启服务
[root@host ~]# systemctl restart nfs-server
客户端配置
客户端ip:192.168.149.137
[root@host1 ~]# dnf -y install nfs-utils
[root@host1 ~]# systemctl stop firewalld
[root@host1 ~]# setenforce 0
[root@host1 ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:50017 0.0.0.0:*
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 [::]:33521 [::]:*
LISTEN 0 128 [::]:22 [::]:*
- 手动挂载
[root@host1 ~]# mount -t nfs 192.168.149.140:/nfs /media/
[root@host1 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 876M 0 876M 0% /dev
tmpfs 895M 0 895M 0% /dev/shm
tmpfs 895M 17M 879M 2% /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.149.140:/nfs 17G 2.0G 16G 12% /media
测试
服务端
[root@host ~]# cd /nfs/shared/
[root@host shared]# ll
总用量 0
[root@host shared]# touch xx
客户端
[root@host1 ~]# cd /media/
[root@host1 media]# ls
shared upload
[root@host1 media]# cd shared/
[root@host1 shared]# ls
xx
[root@host1 shared]# rm -rf xx
rm: 无法删除'xx': 只读文件系统
服务端
[root@host shared]# cd ../upload/
[root@host upload]# ll
总用量 0
[root@host upload]# touch ff
[root@host upload]# ll
总用量 0
-rw-r--r--. 1 root root 0 6月 6 13:08 ff
客户端
[root@host1 upload]# ll
总用量 0
-rw-r--r--. 1 root root 0 6月 6 13:08 ff
[root@host1 upload]# rm -rf ff
[root@host1 upload]# ll
总用量 0