NFS(Network File System的缩写,即网络文件系统),依赖于RPC协议 (Remote Procedure Cal的缩写,即远程过程调用) 实现文件或信息传送,只要用到NFS的地方都要启动RPC服务,不论是NFS SERVER或者NFS CLIENT。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。简单说:NFS是一个文件系统,而RPC是负责信息的传输。

注:NFS使用TCP/IP提供的协议和服务,并且位于OSI模型中的应用层,具体如下:

层数 名称 功能
1 应用层 NFS
2 表示层 XDR
3 会话层 RPC
4 传输层 UDP,TCP
5 网络层 IP
6 数据链路层
7 物理层 Ethernet

server:10.15.72.38

client:10.15.72.83

一、启动NFS服务

[root@justin ~]# rpm -qa|grep nfs   #yum -y install nfs-utils nfs-utils-lib rpcbind
nfs-utils-lib-1.1.5-4.el6.i686
nfs4-acl-tools-0.3.3-6.el6.i686
nfs-utils-1.2.3-26.el6.i686
[root@justin ~]# /etc/rc.d/init.d/rpcbind start
[root@justin ~]# /etc/rc.d/init.d/nfs start
启动 NFS 服务:                                            [确定]
关掉 NFS 配额:                                            [确定]
启动 NFS mountd:                                          [确定]
正在启动 RPC idmapd:                                      [确定]
正在启动 RPC idmapd:                                      [确定]
启动 NFS 守护进程:                                        [确定]
[root@justin ~]# chkconfig --level 35 nfs on
[root@justin ~]# chkconfig --level 35 rpcbind on
[root@justin ~]# /etc/rc.d/init.d/nfs stop
[root@justin ~]# /etc/rc.d/init.d/rpcbind stop

centos7 systemctl enable rpcbind.service systemctl enable nfs-server.service

systemctl start rpcbind.service systemctl start nfs-server.service

NFS启动后的端口:

[root@localhost ~]# rpcinfo -p localhostprogram vers proto   port  service100000    4   tcp    111  portmapper100000    3   tcp    111  portmapper100000    2   tcp    111  portmapper100000    4   udp    111  portmapper100000    3   udp    111  portmapper100000    2   udp    111  portmapper100024    1   udp  34270  status100024    1   tcp  41020  status100005    1   udp  20048  mountd100005    1   tcp  20048  mountd100005    2   udp  20048  mountd100005    2   tcp  20048  mountd100005    3   udp  20048  mountd100005    3   tcp  20048  mountd100003    3   tcp   2049  nfs100003    4   tcp   2049  nfs100227    3   tcp   2049  nfs_acl100003    3   udp   2049  nfs100003    4   udp   2049  nfs100227    3   udp   2049  nfs_acl100021    1   udp  45042  nlockmgr100021    3   udp  45042  nlockmgr100021    4   udp  45042  nlockmgr100021    1   tcp  35301  nlockmgr100021    3   tcp  35301  nlockmgr100021    4   tcp  35301  nlockmgr
[root@localhost ~]#

nfs开启的是2049,portmap/rpcbind开启的是111,其余则是rpc开启的

NFS启动时会随机启动多个端口并向RPC注册,这样如果使用iptables对NFS端口进行限制就会有点麻烦,可以更改配置文件固定NFS服务相关端口。

分配端口,编辑配置文件,文末添加以下,然后在iptables中设置对应端口

[root@rhel5server ~]# vim /etc/sysconfig/nfs
RQUOTAD_PORT=875
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
#STATD_PORT=662是默认参数,但是在/etc/services中有定义了,所以换了个10005
STATD_PORT=10005
#STATD_OUTGOING_PORT=2020是默认参数,在/etc/services中也定义了,所以换了个10006
STATD_OUTGOING_PORT=10006

上面的端口不能与跟/etc/services文件中定义的重复:

[root@localhost ~]# egrep '875|32803|32796|892|10005|10006' /etc/services

二、NFS日志

NFS服务的日志记录在/var/log/messages文件中

三、配置NFS

NFS的常用目录

/etc/exports                           NFS服务的主要配置文件

/usr/sbin/exportfs                   NFS服务的管理命令

/usr/sbin/showmount              客户端的查看命令

/var/lib/nfs/etab                      记录NFS分享出来的目录的完整权限设定值

/var/lib/nfs/xtab                      记录曾经登录过的客户端信息

配置文件/etc/exports,可以设置NFS的共享目录、访问权限和允许访问的主机等参数,在默认情况下,这个文件是个空文件,没有配置任何共享目录,这是基于安全性的考虑,即使系统启动NFS服务也不会共享任何资源。

/etc/exports文件内容格式:

<输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]

server:

允许某一网段访问:/home/nfs 10.15.72.0/24 (ro,sync.no_subtree_check,anouid=0,anogid=0)

也可以是具体IP、或者所有主机(*),还可以是域名,域名支持通配符 如: *.51cto.com

[root@SAMBA1 ~]# service portmap status
portmap (pid 7745) is running...
[root@SAMBA1 ~]#

服务启动时我们一定首先启动portmap进程,之后再启动nfs主进程。由于在6系列里面,portmap已经改名了 ,6系列需要使用 service rpcbind start启动启动的时候最好先启动rpcbind,再启动nfs,停止则反过来

守护进程启动顺序:rpc.portmap, rpc.mountd, rpc.nfsd, rpc.statd, rpc.lockd (新版本会自动跟着nfsd启动起来), rpc.rquotad

[root@localhost ~]# service rpcbind restart
Stopping rpcbind:                                          [  OK  ]
Starting rpcbind:                                          [  OK  ]
[root@localhost ~]# service nfs restart
Shutting down NFS daemon:                                  [  OK  ]
Shutting down NFS mountd:                                  [  OK  ]
Shutting down NFS quotas:                                  [  OK  ]
Shutting down RPC idmapd:                                  [  OK  ]
Starting NFS services:                                     [  OK  ]
Starting NFS quotas:                                       [  OK  ]
Starting NFS mountd:                                       [  OK  ]
Starting NFS daemon:                                       [  OK  ]
Starting RPC idmapd:                                       [  OK  ]
[root@localhost ~]#

mounted已经顺利启动,这个服务管理nfs挂载

daemon也已经顺利启动,这个服务管理客户端机能否顺利登入主机

/home/nfs 共享的目录

10.15.72.83允许访问的IP,也可设置允许访问共享的网段如10.15.72.0/24,如果允许所有客户端访问,可以用通配符“*”

ro     客户端访问共享目录时的权限,ro表示只读,rw表示可读可写
sync    文件同时写入硬盘和内存,这样不会轻易丢失数据,建议所有的NFS共享目录都使用该选项

secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);

insecure:允许客户端从大于1024的tcp/ip端口连接服务器;

async:将数据先保存在内存缓冲区中,必要时才写入磁盘;

wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);

no_wdelay:若有写操作则立即执行,应与sync配合使用;

subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);

fsid=0   表示将共享目录包装成根目录

/data 192.168.0.100(rw,sync,fsid=0) 192.168.0.101(rw,sync,fsid=0)

fsid=0表示将/data找个目录包装成根目录

no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;

no_subtree_check 不检查目录权限,提高目录读取速率

all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);

no_all_squash:与all_squash取反(默认设置);

root_squash:登入NFS主机,使用该共享目录时相当于该目录的拥有者。但是如果是以root身份使用这个共享目录的时候,那么这个使用者(root)的权限将被压缩成为匿名使用者,即通常他的UID与GID都会变成nobody或nfsnobody身份

no_root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。显然开启这项是不安全的。

anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);这个UID必需要存在于你的/etc/passwd当中

anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);

可以设置同一目录不同IP端的权限比如再设置/home/nfs 72.73只读不可写,在上面72.83行后面添加一行/home/nfs 10.15.72.73 (ro)即可

修改了/etc/exports后,并不需要重启nfs服务,只要用exportfs重新扫描一次/etc/exports,并且重新加载即可

exportfs[-aruv] 
参数 含义 
a 全部挂载(或卸载)/etc/exports档案内的设定 
r 重新挂载/etc/exports 里面的设定,也同步的更新/etc/exports和/var/lib/nfs/xtab里面的内容 
u 卸载某一目录 
v 在export的时候,将分享的目录显示到荧屏上

[root@justin ~]# exportfs -av
exporting *:/home/test
[root@justin ~]# exportfs -au     卸载所有共享目录
[root@justin ~]# exportfs -rv     重新共享所有目录并输出详细信息
[root@justin ~]# nfsstat        查看NFS的运行状态
[root@justin ~]# rpcinfo    查看rpc执行信息,可以用于检测rpc运行情况的工具,利用rpcinfo -p 可以查看出RPC开启的端口所提供的程序有哪些。

三、使用showmount命令查询NFS的共享状态

[root@justin ~]# showmount -e 10.15.72.38  显示此IP地址分享出来的目录
Export list for 10.15.72.38:
/home/nfs 10.15.72.83
[root@justin ~]#showmount -a    显示已经于客户端连接上的目录信息

client:

客户端也需要安装rpcbind, 建议nfs一起安装,便于使用showmount命令

[root@justin nfs]# mount 10.15.72.38:/home/nfs /mnt/nfs
mount: wrong fs type, bad option, bad superblock on 10.15.72.38:/home/nfs,missing codepage or helper program, or other error(for several filesystems (e.g. nfs, cifs) you mightneed a /sbin/mount.<type> helper program)In some cases useful info is found in syslog - trydmesg | tail  or so
[root@justin ~]# showmount -e 10.15.72.38
-bash: showmount: command not found
[root@justin nfs]# yum install nfs* -y
......
[root@justin nfs]# /etc/init.d/rpcbind restart
Stopping rpcbind:                                          [  OK  ]
Starting rpcbind:                                          [  OK  ]
[root@justin nfs]# mount -t nfs 10.15.72.38:/home/nfs /mnt/nfs/
[root@justin nfs]# vim /etc/fstab
10.15.72.38:/home/nfs /mnt/nfs defaults,soft,intr 0 0
[root@justin nfs]#
[root@justin nfs]# cd /mnt/nfs/
[root@justin nfs]# ls
nfs.txt
[root@justin nfs]# ls
nfs.txt
[root@justin ~]# showmount -e 10.15.72.38
Export list for 10.15.72.38:
/home/nfs 10.15.72.83
[root@justin ~]# cat /mnt/nfs/nfs.txt
Hello
[root@justin ~]# touch /mnt/nfs/client
touch: cannot touch /mnt/nfs/client': Read-only file system
[root@justin ~]#

10.15.43.238:/app/redis/logs /app/nfs nfs4 defaults,soft,intr 0 0

如果一个NFS服务器上有许多的客户端一直连接的话,NFS服务器会承受很大的带宽压力,这对NFS服务器的正常使用会造成很大的影响,而且,永久挂载后每次系统启动都会自动挂载服务器端NFS,当服务端NFS没有开启时,本地客户端启动时会执行挂载任务,导致系统启动速度变慢,因此,为了解决这一弊端,我可以这样做:让NFS客户端在获取数据时与NFS服务器进行连接,而在没有获取数据的时间内,自动的断开与NFS服务器之间的连接,这就是NFS的自动挂载技术。需要注意的是,配置方法是在NFS客户端方面进行配置的。

自动挂载用到的软件包automount,一般系统都默认安装了的。如果没有安装再安装下:yum install autofs

[root@localhost ~]# yum -y install autofs
[root@localhost ~]# vim /etc/auto.master
/app /etc/auto.nfs --timeout=60   #文末添加此行
[root@localhost ~]# cp -p /etc/auto.misc /etc/auto.nfs
[root@localhost ~]# vim /etc/auto.nfs
nfs          -rw,soft,intr            10.15.43.238:/app/redis/logs
[root@localhost ~]# systemctl start autofs.service

/app是客户端挂载的本地路径,我们在向NFS服务器发送请求信号时,一定要在这个目录下面进行操作,否则是无效的,实验的时候我事先创建了nfs文件夹,当达到超市时候后nfs文件夹用ls也是看不到,但是可以在根目录下可以查看挂载后的文件

/etc/auto.nfs: 是一个配置 NFS服务器共享文件的路径,及本地在/app目录中要与远程共享文件挂载的目录及权限,在auto.nfs文件中还要详细说明。

--timeout=60:指NFS客户端在多久没有向NFS服务器请求数据时断开挂载连接。

nfs是一个本地目录,我们不需要创建它,用于挂载远程共享文件10.15.43.238:/app/redis/logs,在我们想要使用远程共享文件时,只要在本地目/app下键入:cd server 系统就会自动挂载到远程共享目录:10.15.43.238:/app/redis/logs,我们就可以正常使用里面的共享文件了 ,在到达超时时间时就会自动卸载。

Windows 7访问NFS:

(1)打开Windows7系统程序--->控制面板--->程序和功能--->打开或关闭windows功能--->选中nfs安装

Tips:

在服务端执行以下:

1.关闭服务端的SELINUX

2.服务端防火墙中开启相应端口,nfs使用:tcp/udp 2049

[root@justin ~]# iptables -I INPUT -p tcp --dport 2049 -j ACCEPT
[root@justin ~]# iptables -I INPUT -p udp --dport 2049 -j ACCEPT
[root@justin ~]# service iptables save
iptables:将防火墙规则保存到 /etc/sysconfig/iptables:     [确定]
[root@justin ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:2049
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:2049
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:5801
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:5901
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
[root@justin ~]#

同时开启多个端口

[root@justin ~]# iptables -I INPUT -p tcp -m multiport --ports 111,875,892,2049,32769  -j ACCEPT

NFS服务端端口管理文件:

[root@justin ~]# egrep "875|32803|32769|892" /etc/sysconfig/nfs
#RQUOTAD_PORT=875
#LOCKD_TCPPORT=32803
#LOCKD_UDPPORT=32769
#MOUNTD_PORT=892
[root@justin ~]#
[root@justin ~]# showmount -a 10.15.72.38
All mount points on 10.15.72.38:
10.15.72.73:/home/nfs
[root@justin ~]#

查看链接的客户端:

[root@justin ~]# showmount -a 10.15.72.38
All mount points on 10.15.72.38:
10.15.72.73:/home/nfs
[root@justin ~]#

查看客户端查看的目录:

[root@justin ~]# showmount -d 10.15.72.38
Directories on 10.15.72.38:
/home/nfs
[root@justin ~]#

 ###########################################################

                         关注微信平台,了解更多分享                                                                        

2014,我们没有时间再去挥霍;
2014,我们需要学习以及坚持;
我们需要把等公交、乘地铁的时间一点点利用;
关注微信平台,随时都可以查看分享;
我们更需要大家一起来分享。
Linux交流QQ群:333212786

################################################################################

RHEL6基础四十二之RHEL文件共享①NFS相关推荐

  1. RHEL6基础四十九之RHEL文件(夹)权限进阶篇

    ACL权限管理 ACL(Access Control List,访问控制列表)主要是提供传统的owner,group,others的read,write,execute权限之外的具体权限设置,ACL可 ...

  2. RHEL6基础之十二RHEL用户和组基础

    RHEL用户/组分类 对于Linux系统来讲,它只认识UID和GID,用户账号和组账号这些名字只是为了方便人们记忆而已 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 ...

  3. redhat linux修复文件系统,RHEL6基础四十五RHEL文件系统修复

    fsck---file system check 说明 :检查与修复 Linux 文件系统,可以同时检查一个或多个 Linux 档案系统. 注意:fsck扫描文件系统时一定要在单用户模式.修复模式或把 ...

  4. OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co

    OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...

  5. 【Visual C++】游戏开发笔记四十二 浅墨DirectX教程之十 游戏输入控制利器 DirectInput专场

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  6. 【Microsoft Azure 的1024种玩法】四十二. 通过Windows Admin Center快速创建Azure Virtual Machines

    [简介] Windows Admin Center是微软开发的一套可以部署在本地基于浏览器的GUI的工具集平台,其平台可用于管理Windows相关服务器和PC机器,我们可以利用Windows Admi ...

  7. 大数据的过去、现在和未来:万字长文解读《大数据四十二条》

    这是傅一平的第314篇原创 "与数据同行"开通了微信群,现已汇聚了3500位小伙伴了,长按以下二维码发送"入群"后加入. 正文开始 它山之石可以攻玉,何宝宏博士 ...

  8. maya批量命名插件_教你玩转MAYA的四十二精华造诣(第一期)

    最近在整理文档时发现我收藏了一篇关于MAYA应用技巧的文章,突然有兴趣看了看,结果发现老版本MAYA中的某些内容很多已经无法应用于新版本.我又上网查了一下,结果发现网上好多帖子和我收藏的这篇内容基本一 ...

  9. 四十二、深入Java中的文件读取操作

    @Author:Runsen @Date:2020/6/8 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

最新文章

  1. 两步改动CentOS主机名称
  2. 线性时不变系统以及响应的分类
  3. android studio 各种问题
  4. 找到合适的方案记录服务端日志
  5. ffmpeg 声音参数_ffmpeg转换参数和压缩输出大小的比率
  6. 9th week blog
  7. 现代图论笔记(二)树与二分图
  8. 2020 最烂密码 TOP 200 大曝光,霸榜的仍旧是 123456!
  9. 数字图像处理-直方图均衡化,直方图规定化
  10. Python+windows系统 虚拟环境的独立搭建 框架scrapy 工具PyCharm
  11. HTML中基于表单的文件上传(post,get)
  12. Windows防火墙无法更改某些设置
  13. O2O模式为什么这么火
  14. C++模拟扑克过五关
  15. js中call 的使用, call方法的继承
  16. Android 修改音量
  17. SQL语句去连接两个表,内连接,左连接以及右连接
  18. python如何增加字符串_在python中增加字符的方法
  19. 在华为云 CCE 上部署 EMQX MQTT 服务器集群
  20. oracle中的冲销日记账,OraEBSR12GL日记账业务操作09:日记账冲销处理

热门文章

  1. 函数参数 不定参数,和 默认参数
  2. centos7 远程连接其他服务器redis
  3. hdu 1496 Equations(技巧hash)
  4. IDEA mybatis-generator 逆向工程
  5. HelloX项目github协同开发指南
  6. tnsnames.ora无法保存的问题
  7. 灰度图像--图像增强 双边滤波 Bilateral Filtering
  8. SSE2实现HAAR小波变换(dwt2与idwt2)
  9. C++ 常用函数总结
  10. STM32F407的时钟配置