zoukankan      html  css  js  c++  java
  • CentOS 7 安装配置 NFS

    CentOS 7 安装配置 NFS

    环境

    nps 192.168.1.97

    client 192.168.1.98

    一、yum 安装

    »yum -y install nfs-utils rpcbind

    NFS 的套件结构:

    • /etc/exports :这个档案就是 NFS 的主要设定档了!不过,系统并没有预设值,所以这个档案‘ 不一定会存在’,您可能必须要使用 vi 主动的建立起这个档案喔!我们等一下要谈的设定也仅只是这个档案而已呐!
    • /usr/sbin/exportfs :这个是维护 NFS 分享资源的指令,我们可以利用这个指令重新分享 /etc/exports 变更的目录资源、将 NFS Server 分享的目录卸载或重新分享等等,这个指令是 NFS 系统里面相当重要的一个喔!至于指令的用法我们在底下会再介绍。
    • /usr/sbin/showmount :这是另一个重要的 NFS 指令。exportfs 是用在 NFS Server 端,而 showmount 则主要用在 Client 端。这个 showmount 可以用来察看 NFS 分享出来的目录资源喔!
    • /var/lib/nfs/*tab :在 NFS 伺服器的登录档都放置到 /var/lib/nfs/ 目录里面,在该目录下有两个比较重要的登录档, 一个是 etab ,主要记录了 NFS 所分享出来的目录的完整权限设定值;另一个 xtab 则记录曾经连结到此 NFS 主机的相关用户端资料。

    »nfs 的主配置文件 /etc/expots默认为空

    [root@linux ~]# vi /etc/exports
    /opt/test         192.168.1.0/24(rw,no_root_squash,no_all_squash,sync,anonuid=501,anongid=501)   localhost(rw)   *.ev.ncku.edu.tw(ro,sync)
    # [分享目录]      [第一部主机(权限)]                                                               [可用主机名]       [可用万用字元]

    使配置生效 »exportfs -r  

      例:同一目录针对不同范围开放不同权限

    [root@linux ~]# vi /etc/exports
    /opt/test         192.168.1.0/24(rw,no_root_squash,no_all_squash,sync,anonuid=501,anongid=501)   localhost(rw)   *.ev.ncku.edu.tw(ro,sync)
    /home/public 192.168.0.0/24(rw) *(ro) # 继续累加在后面,注意,我有将主机与网域分为两段 (用空白隔开) 喔!

      上面的例子说的是:当我的 IP 是在 192.168.0.0/24 这个网段的时候,那么当我在 Client 端挂载了 Server 端的 /home/public 后,针对这个被我挂载的目录我就具有可以读写的权限~ 至于如果我不是在这个网段之内,那么这个目录的 资料我就仅能读取而已,亦即为唯读的属性啦

    二、权限说明

    注:至于权限方面 (就是小括号内的参数) 常见的参数则有:

    /opt/test 为共享目录

    192.168.1.0/24  可以为一个网段,一个IP,也可以是域名,域名支持通配符 如: *.qq.com

    rw:read-write,可读写;

    ro:read-only,只读;

    sync:文件同时写入硬盘和内存;

    async:文件暂存于内存,而不是直接写入内存;

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

    root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用nobody或nfsnobody身份;

    all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;

    anonuid:匿名用户的UID值,可以在此处自行设定。

    anongid:匿名用户的GID值。

    三、启动 nfs

    NFS 的启动还需要 portmap 的协助才行啊! 所以赶紧来启动吧!

    [root@linux ~]# /etc/init.d/portmap start
    # 如果 portmap 本来就已经在执行了,那就不需要启动啊!
    
    [root@linux ~]# /etc/init.d/nfs start
    # 有时候可能会出现如下的警告讯息:
    exportfs: /etc/exports [3]: No 'sync' or 'async' option specified 
    for export "192.168.0.100:/home/test".
      Assuming default behaviour ('sync').
    # 上面的警告讯息仅是在告知因为我们没有指定 sync 或 async 的参数,
    # 则 NFS 将预设会使用 sync 的资讯而已。你可以不理他,也可以加入 /etc/exports。
    
    [root@linux ~]# vi /etc/exports
    /tmp          *(rw,no_root_squash,sync)
    /home/public  192.168.0.0/24(rw,sync)    *(ro,sync)
    /home/test    192.168.0.100(rw,sync)
    /home/linux   *.linux.org(rw,all_squash,anonuid=40,anongid=40,sync)
    
    [root@linux ~]# /etc/init.d/nfs restart

    service rpcbind start

    service nfs start

    chkconfig rpcbind on

    chkconfig nfs on

    启动之后,请赶快到 /var/log/messages 里面看看有没有被正确的启动呢?

    [root@linux ~]# vi /var/log/messages
    Sep 22 00:01:37 linux nfs: Starting NFS services:  succeeded
    Sep 22 00:01:37 linux nfs: rpc.rquotad startup succeeded
    Sep 22 00:01:37 linux nfsd[1050]: nfssvc_versbits: +2 +3 +4
    Sep 22 00:01:37 linux nfs: rpc.nfsd startup succeeded
    Sep 22 00:01:37 linux nfs: rpc.mountd startup succeeded
    Sep 22 00:01:37 linux rpcidmapd: rpc.idmapd -SIGHUP succeeded

    在确认没有问题之后,接下来我们来瞧一瞧那么 NFS 到底开了哪些端口?

    [root@linux ~]# netstat -ultn
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address  Foreign Address State   PID/Program name
    tcp        0      0 0.0.0.0:2049   0.0.0.0:*       LISTEN  -
    tcp        0      0 0.0.0.0:803    0.0.0.0:*       LISTEN  1047/rpc.rquotad
    tcp        0      0 0.0.0.0:111    0.0.0.0:*       LISTEN  32503/portmap
    tcp        0      0 0.0.0.0:819    0.0.0.0:*       LISTEN  1064/rpc.mountd
    udp        0      0 0.0.0.0:2049   0.0.0.0:*               -
    udp        0      0 0.0.0.0:800    0.0.0.0:*               1047/rpc.rquotad
    udp        0      0 0.0.0.0:816    0.0.0.0:*               1064/rpc.mountd
    udp        0      0 0.0.0.0:111    0.0.0.0:*               32503/portmap
    • portmap 启动的 port 在 111;
    • NFS 启动的 port 在 2049;
    • 其他 rpc.daemons 启动的 port 则是随机产生的,因此需向 port 111 注册。

    那我怎么知道每个 RPC 服务的注册状况?没关系,你可以使用 rpcinfo 来处理的。

    [root@linux ~]# rpcinfo [-p] [IP|hostname]
    参数:
    -p :显示出所有的 port 与 porgram 的资讯;
    
    范例一:显示出目前这部主机的 RPC 状态
    [root@linux ~]# rpcinfo -p localhost
       program vers proto   port
        100000    2   tcp    111  portmapper
        100000    2   udp    111  portmapper
        100011    1   udp    800  rquotad
        100011    2   udp    800  rquotad
        100011    1   tcp    803  rquotad
        100011    2   tcp    803  rquotad
        100003    2   udp   2049  nfs
        100003    3   udp   2049  nfs
        100003    2   tcp   2049  nfs
        100003    3   tcp   2049  nfs
        100005    1   udp    816  mountd
        100005    1   tcp    819  mountd
        100005    2   udp    816  mountd
        100005    2   tcp    819  mountd
        100005    3   udp    816  mountd
        100005    3   tcp    819  mountd
    #         NFS版本       埠口  服务名称

      如果你的 rpcinfo 无法输出,那就表示注册的资料有问题啦!可能需要重新启动 portmap 与 nfs 喔!

    NFS 的连线观察

    在你的 NFS 伺服器设定妥当之后,我们可以先自我测试一下是否可以连线喔! 就是利用 showmount 这个指令来查阅!
    [root@linux ~]# showmount [-ae] [hostname|IP]
    参数:
    -a :显示目前主机与用户端的 NFS 连线分享的状态;
    -e :显示某部主机的 /etc/exports 所分享的目录资料。
    
    范例一:请显示出刚刚我们所设定好的相关 exports 资讯
    [root@linux ~]# showmount -e localhost
    Export list for localhost:
    /tmp         *
    /home/linux  *.linux.org
    /home/public (everyone)
    /home/test   192.168.0.100

      很简单吧!所以,当您要扫瞄某一部主机他提供的 NFS 分享的目录时,就使用 showmount -e IP (或hostname) 即可!非常的方便吧!这也是 NFS client 端最常用的指令喔!

    如果有其他用户端挂载了你的 NFS 档案系统时, 那么该用户端与档案系统资讯就会被记录到 /var/lib/nfs/xtab 里头去的!

    [root@linux ~]# tail /var/lib/nfs/etab
    /home/public    *(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,
    subtree_check,secure_locks,mapping=identity,anonuid=-2,anongid=-2)
    # 上面是同一行,可以看出除了 ro, sync, root_squash 等等,
    # 其实还有 anonuid 及 anongid 等等的设定!
    
    /tmp    *(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,subtr
    ee_check,secure_locks,mapping=identity,anonuid=-2,anongid=-2)
    # 同样的,在 /tmp 也有很多的权限相关的参数喔!

    如果你想要重新处理 /etc/exports 档案,当重新设定完 /etc/exports 后需不需要重新启动 nfs ? 不需要啦!如果重新启动 nfs 的话,要得要向 RPC 注册!很麻烦~ 这个时候我们可以透过 exportfs 这个指令来帮忙喔!

    [root@linux ~]# exportfs [-aruv]
    参数:
    -a :全部挂载(或卸载) /etc/exports 档案内的设定
    -r :重新挂载 /etc/exports 里面的设定,此外,亦同步更新 /etc/exports
         及 /var/lib/nfs/xtab 的内容!
    -u :卸载某一目录
    -v :在 export 的时候,将分享的目录显示到荧幕上!
    
    范例一:重新挂载一次 /etc/exports 的设定
    [root@linux ~]# exportfs -arv
    exporting 192.168.0.100:/home/test
    exporting 192.168.0.0/24:/home/public
    exporting *.linux.org:/home/linux
    exporting *:/home/public
    exporting *:/tmp
    
    范例二:全部都卸载
    [root@linux ~]# exportfs -auv

      要熟悉一下这个指令的用法喔!这样一来,就可以直接重新 exportfs 我们的记录在 /etc/exports 的目录资料啰!

    四、客户端挂载:

    mount -t nfs 192.168.1.97:/opt/test /mnt

    #查看可挂载

    showmount -e 192.168.1.97            

    Export list for 192.168.1.97:

    /opt/test          192.168.1.0/24

    无提示 既为成功

    客户端在挂载的时候遇到的一个问题如下,可能是网络不太稳定,NFS默认是用UDP协议,换成TCP协议即可:

    mount -t nfs 192.168.1.97:/opt/test /mnt -o proto=tcp -o nolock

  • 相关阅读:
    Abp 领域事件简单实践 <一>
    Abp session和Cookie
    Abp 聚合测试
    反向代理
    Angular 变更检测
    VS 之github
    Docker 启动SQLServer
    查出第二大的数是多少
    DDD 理解
    ActionBar的简单应用
  • 原文地址:https://www.cnblogs.com/liuyansheng/p/6108952.html
Copyright © 2011-2022 走看看