NFSV4协议_服务端

rsync端口 873

NFS端口 111

一 、 NFS 简介和架构图

NFS是Network File System的缩写,即网络文件系统。一种使用于分散式文件协定,功能是通过网络让不同的机器、不同的操作系统能够分享个人数据,让应用程序通过网络可以访问位于服务器磁盘中的数据。 NFS在文件传送或信息传送的过过程中,依赖于RPC协议。RPC,远程过程调用(Remote Procedure Call),是使客户端能够执行其他系统中程序的一种机制。NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,就是因为NFS使用了RPC提供的传输协议,可以说NFS就是使用PRC的一个程序。

NFS 存储 服务器主要用于用户上传的数据 ,图片 音频 、等信息

不知道什么是NFS!那就先看图

NFSV4协议_linux_02


NFSV4协议_linux_03

NFS服务端、RPC协议、客户端三者可以理解为房源、中介、租客之间的关系:

NFSV4协议_linux_04


NFSV4协议_ide_05



NFSV4协议_NFSV4协议_06


NFS服务原理图

NFSV4协议_linux_07

在这里插入图片描述

二、准备环境

机器
web01
nfs01

软件
RPC 服务 :rpcbind(C 6 & C 7) portmap(C 5)
nfs服务: nfs-utils

1.安装软件:

yum install -y nfs-utils rpcbind
安装成功后检查安装包
nfs01:

[15:32 root@nfs01 ~]# rpm -qa nfs-utils rpcbind
rpcbind-0.2.0-47.el7.x86_64
nfs-utils-1.3.0-0.61.el7.x86_64

web01

[15:32 root@web01 ~]# rpm -qa nfs-utils rpcbind
nfs-utils-1.3.0-0.61.el7.x86_64
rpcbind-0.2.0-47.el7.x86_64

首先在nfs01服务端操作

2.启动rpc服务并查看注册信息

systemctl restart rpcbind
rpcinfo -p

[15:32 root@nfs01 ~]# systemctl start rpcbind.service 
[15:36 root@nfs01 ~]# #查看rpc服务里面的注册信息
[15:37 root@nfs01 ~]# rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper

3.启动nfs服务并查看注册信息

systemctl restart nfs
rpcinfo -p

[15:37 root@nfs01 ~]# systemctl restart nfs
[15:37 root@nfs01 ~]# #查看rpc服务里面的注册信息
[15:38 root@nfs01 ~]# rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  34623  status
    100024    1   tcp  40441  status
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  39890  nlockmgr
    100021    3   udp  39890  nlockmgr
    100021    4   udp  39890  nlockmgr
    100021    1   tcp  43375  nlockmgr
    100021    3   tcp  43375  nlockmgr
    100021    4   tcp  43375  nlockmgr

4.用户映射 rpc.idmapd

名字映射后台进程
不管哪个用户进入nfs,都属于nfsnobody,在安装nfs时默认创建了这个用户

[15:45 root@nfs01 ~]# id nfsnobody 
uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)

5.nfs配置文件/etc/exports

1.nfs配置文件/etc/exports

2.reload平滑重启,优雅重启
不中断当前正在处理的请求 影响新的请求
注意:nfs尽量不要使用restart重启 使用之后会卡住90s

3.检查放在具体信息 可以挂载什么
showmount -e

[5:50 root@nfs01 ~]# vim /etc/exports
▽                                                                    
#share /upload
/upload         172.16.1.0/24(rw)
[15:55 root@nfs01 ~]# cat /etc/exports
#share /upload
/upload 	172.16.1.0/24(rw)
[15:55 root@nfs01 ~]# mkdir -p /upload
[15:56 root@nfs01 ~]# chown  nfsnobody.nfsnobody /upload/
[15:56 root@nfs01 ~]# systemctl reload nfs
[15:56 root@nfs01 ~]# #检查 挂载信息
[15:56 root@nfs01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/upload 172.16.1.0/24

6.在nfs01服务端进行挂载测试

[16:07 root@nfs01 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  1.7G   18G   9% /
devtmpfs        980M     0  980M   0% /dev
tmpfs           991M     0  991M   0% /dev/shm
tmpfs           991M  9.6M  981M   1% /run
tmpfs           991M     0  991M   0% /sys/fs/cgroup
/dev/sda1       197M  105M   93M  54% /boot
tmpfs           199M     0  199M   0% /run/user/0
[16:07 root@nfs01 ~]# mount -t nfs 172.16.1.31:/upload/ /mnt/
[16:07 root@nfs01 ~]# # 查看一下是否挂载成功
[16:07 root@nfs01 ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/sda3             19G  1.7G   18G   9% /
devtmpfs             980M     0  980M   0% /dev
tmpfs                991M     0  991M   0% /dev/shm
tmpfs                991M  9.6M  981M   1% /run
tmpfs                991M     0  991M   0% /sys/fs/cgroup
/dev/sda1            197M  105M   93M  54% /boot
tmpfs                199M     0  199M   0% /run/user/0
172.16.1.31:/upload   19G  1.7G   18G   9% /mnt
[16:07 root@nfs01 ~]# touch /mnt/oldboy.txt
[16:07 root@nfs01 ~]# ll /upload/
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 May 22 16:07 oldboy.txt

#目录可以理解为/upload/目录就等于/mnt/目录了,都有相同的内容

7.接着按上面的步骤给web01客户端进行挂载测试

把nfs upload目录挂载到/video目录

1.启动rpc服务

在客户端可以不启动rpc服务和NFS服务,在NFS服务端启动就可以了
[16:16 root@web01 ~]# systemctl restart rpcbind.service 
[16:17 root@web01 ~]# rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper

2.启动nfs

[16:18 root@web01 ~]# systemctl restart nfs
[16:18 root@web01 ~]# rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    省略....

3.检查放在具体信息 可以挂载什么

[16:23 root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/upload 172.16.1.7/24

4.把nfs upload目录挂载到/video目录

[16:24 root@web01 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  1.7G   18G   9% /
devtmpfs        980M     0  980M   0% /dev
tmpfs           991M     0  991M   0% /dev/shm
tmpfs           991M  9.6M  981M   1% /run
tmpfs           991M     0  991M   0% /sys/fs/cgroup
/dev/sda1       197M  105M   93M  54% /boot
tmpfs           199M     0  199M   0% /run/user/0
[16:24 root@web01 ~]# mkdir /video   \\创建video目录
[16:25 root@web01 ~]# mount -t nfs 172.16.1.31:/upload/ /video/   
[16:25 root@web01 ~]# df -h
Filesystem          Size  Used Avail Use% Mounted on
/dev/sda3            19G  1.7G   18G   9% /
devtmpfs            980M     0  980M   0% /dev
tmpfs               991M     0  991M   0% /dev/shm
tmpfs               991M  9.6M  981M   1% /run
tmpfs               991M     0  991M   0% /sys/fs/cgroup
/dev/sda1           197M  105M   93M  54% /boot
tmpfs               199M     0  199M   0% /run/user/0
172.16.1.31:/upload   19G  1.7G   18G   9% /video

三、NFS权限控制

配置文件中权限 /etc/exports
Linxu服务端 共享目录权限 755 nfsnobody


NFSV4协议_客户端_08

四、nfs配置文件详解

1.测试一下nfs配置文件

在nfs01和web01创建指定的www虚拟用户

[17:44 root@nfs01 ~]# groupadd -g 888 www
[17:44 root@nfs01 ~]# useradd -u 888 -g www -s /sbin/nologin -M www
[17:45 root@nfs01 ~]# id www
uid=888(www) gid=888(www) groups=888(www)
[17:44 root@web01 ~]# groupadd -g 888 www
[17:44 root@web01 ~]# useradd -u 888 -g www -s /sbin/nologin -M www
[17:45 root@web01 ~]# id www
uid=888(www) gid=888(www) groups=888(www)

2.修改配置文件中的权限/etc/exports

[17:45 root@nfs01 ~]# vim /etc/exports
#share /upload
/upload         172.16.1.0/24(rw)
/nfs            172.16.1.0/24(rw,all_squash,anonuid=888,anongid=888)
#/upload        172.16.1.7(rw)  10.0.0.7(rw)
[17:47 root@nfs01 ~]# systemctl reload  nfs

3.创建一个/nfs目录并授权为www用户

[17:50 root@nfs01 ~]# mkdir -p /nfs
[17:50 root@nfs01 ~]# chown www.www /nfs
[17:50 root@nfs01 ~]# ll /nfs/
total 0

4.接着我们去web01客户端

创建/nfs目录,并检查放在具体信息 可以挂载什么

[17:47 root@web01 ~]# mkdir -p /nfs
[17:50 root@web01 ~]#  showmount -e 172.16.1.31
Export list for 172.16.1.31:
/nfs    172.16.1.0/24
/upload 172.16.1.0/24

5.在web01客户端进行挂载测试

挂载完成后查看一下是否挂载成功

[17:53 root@web01 ~]# mount -t nfs 172.16.1.31:/nfs/ /mnt/
[17:54 root@web01 ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/sda3             19G  1.7G   18G   9% /
devtmpfs             980M     0  980M   0% /dev
tmpfs                991M     0  991M   0% /dev/shm
tmpfs                991M  9.6M  981M   1% /run
tmpfs                991M     0  991M   0% /sys/fs/cgroup
/dev/sda1            197M  105M   93M  54% /boot
172.16.1.31:/upload   19G  1.7G   18G   9% /video
tmpfs                199M     0  199M   0% /run/user/0
172.16.1.31:/nfs      19G  1.7G   18G   9% /mnt

6.接着我们在挂载的目录/mnt/下创建文件测试一下

[17:54 root@web01 ~]# touch /mnt/{01..10}.txt
[17:54 root@web01 ~]# ll /mnt/
total 0
-rw-r--r-- 1 www www 0 May 22 17:54 01.txt
-rw-r--r-- 1 www www 0 May 22 17:54 02.txt
-rw-r--r-- 1 www www 0 May 22 17:54 03.txt
-rw-r--r-- 1 www www 0 May 22 17:54 04.txt
-rw-r--r-- 1 www www 0 May 22 17:54 05.txt
-rw-r--r-- 1 www www 0 May 22 17:54 06.txt
-rw-r--r-- 1 www www 0 May 22 17:54 07.txt
-rw-r--r-- 1 www www 0 May 22 17:54 08.txt
-rw-r--r-- 1 www www 0 May 22 17:54 09.txt
-rw-r--r-- 1 www www 0 May 22 17:54 10.txt

7.我们可以去nfs01服务端查看/nfs/共享目录看一下有没有

[17:56 root@nfs01 ~]# ll /nfs/
total 0
-rw-r--r-- 1 www www 0 May 22 17:55 01.txt
-rw-r--r-- 1 www www 0 May 22 17:55 02.txt
-rw-r--r-- 1 www www 0 May 22 17:55 03.txt
-rw-r--r-- 1 www www 0 May 22 17:55 04.txt
-rw-r--r-- 1 www www 0 May 22 17:55 05.txt
-rw-r--r-- 1 www www 0 May 22 17:55 06.txt
-rw-r--r-- 1 www www 0 May 22 17:55 07.txt
-rw-r--r-- 1 www www 0 May 22 17:55 08.txt
-rw-r--r-- 1 www www 0 May 22 17:55 09.txt
-rw-r--r-- 1 www www 0 May 22 17:55 10.txt

NFSV4协议_NFSV4协议_09


NFSV4协议_linux_10

NFS共享的常用参数:

ro          只读访问 
rw          读写访问 
sync        同步      所有数据在请求时写入共享 
async       异步      NFS在写入数据前可以相应请求 
all_squash            共享文件的UID和GID映射匿名用户anonymous,适合公用目录。 
not_all_squash		  默认与root_squash一起使用
no_all_squash         保留共享文件的UID和GID(默认) 
root_squash           root用户的所有请求映射成如anonymous用户一样的权限(默认) 
no_root_squash         root用户具有根目录的完全管理访问权限 
anonuid=xxx            指定NFS服务器/etc/passwd文件中匿名用户的UID

NFSV4协议_linux_11

五.

1.客户端挂载信息 /proc/mounts

实例:

[17:55 root@web01 ~]# egrep '/nfs|/video' /proc/mounts 
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0
nfsd /proc/fs/nfsd nfsd rw,relatime 0 0
172.16.1.31:/upload /video nfs4 rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.7,local_lock=none,addr=172.16.1.31 0 0
172.16.1.31:/nfs /mnt nfs4 rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.7,local_lock=none,addr=172.16.1.31 0 0

2.服务端配置共享的参数/var/lib/nfs/etab

exports tables nfs 服务端共享信息
实例:

[17:56 root@nfs01 ~]# cat /var/lib/nfs/etab 
/nfs	172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=888,anongid=888,sec=sys,rw,secure,root_squash,all_squash)
/upload	172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,all_squash)

找工作必备的技能

NFSV4协议_NFSV4协议_12

未完待续…