zoukankan      html  css  js  c++  java
  • centos7搭建nfs服务器

    一.NFS简介

    NFS 就是 Network FileSystem 的缩写,最早之前是由sun 这家公司所发展出来的。 它最大的功能就是可以透过网络,让不同的机器、不同的操作系统、可以彼此分享个别的档案 (share files)。所以,你也可以简单的将他看做是一个文件服务器 (file server) 呢!这个 NFS 服务器可以让你的 PC 来将网络远程的 NFS 服务器分享的目录,挂载到本地端的机器当中, 在本地端的机器看起来,那个远程主机的目录就好像是自己的一个磁盘分区槽一样 (partition)!使用上面相当的便利!

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

    二、所需要的软件及软件结构

    要设定好 NFS 服务器我们必须要有两个软件才行,分别是:

      • RPC 主程序:rpcbind

        就如同刚刚提的到,我们的 NFS 其实可以被视为一个 RPC 服务,而要启动任何一个 RPC 服务之前,我们都需要做好 port 的对应 (mapping) 的工作才行,这个工作其实就是『 rpcbind 』这个服务所负责的!也就是说, 在启动任何一个 RPC 服务之前,我们都需要启动 rpcbind 才行! (在 CentOS 5.x 以前这个软件称为 portmap,在 CentOS 6.x 之后才称为 rpcbind 的!)

      • NFS 主程序:nfs-utils

        就是提供 rpc.nfsd 及 rpc.mountd 这两个 NFS daemons 与其他相关 documents 与说明文件、执行文件等的软件!这个就是 NFS 服务所需要的主要软件啦!一定要有喔!
      • 主要配置文件:/etc/exports
        这个档案就是 NFS 的主要配置文件了!不过,系统并没有默认值,所以这个档案『 不一定会存在』,你可能必须要使用 vim 主动的建立起这个档案喔!我们等一下要谈的设定也仅只是这个档案而已吶!

      • NFS 文件系统维护指令:/usr/sbin/exportfs
        这个是维护 NFS 分享资源的指令,我们可以利用这个指令重新分享 /etc/exports 变更的目录资源、将 NFS Server 分享的目录卸除或重新分享等等,这个指令是 NFS 系统里面相当重要的一个喔!至于指令的用法我们在底下会介绍。

      • 分享资源的登录档:/var/lib/nfs/*tab
        在 NFS 服务器的登录文件都放置到 /var/lib/nfs/ 目录里面,在该目录下有两个比较重要的登录档, 一个是 etab ,主要记录了 NFS 所分享出来的目录的完整权限设定值;另一个 xtab 则记录曾经链接到此 NFS 服务器的相关客户端数据。

      • 客户端查询服务器分享资源的指令:/usr/sbin/showmount
        这是另一个重要的 NFS 指令。exportfs 是用在 NFS Server 端,而 showmount 则主要用在 Client 端。这个 showmount 可以用来察看 NFS 分享出来的目录资源喔!

    三、环境准备

    [root@server ~]# cat /etc/redhat-release 
    CentOS Linux release 7.4.1708 (Core)
    [root@server ~]# uname -r
    3.10.0-693.el7.x86_64
    [root@server ~]# hostname -I
    10.0.0.10 

    四、安装NFS服务和RPC-bind服务

    1、查看系统是否已安装NFS

    [root@bogon ~]# rpm -qa | grep nfs
    [root@bogon ~]# rpm -qa | grep rpcbind

    2、安装NFS

    [root@server ~]# yum -y install nfs-utils rpcbind

    五、服务端配置

    在NFS服务端上创建共享目录/data/nfsdir并设置权限

    [root@server ~]# mkdir -p /data/nfsdir

      [root@server ~]# chmod 666 /data/nfsdir/
      [root@server ~]# ll /data/
       total 0
       drw-rw-rw- 2 root root 6 Apr 16 08:52 nfsdir

    编辑export文件

    [root@server ~]# vi /etc/exports
    /data/nfsdir 10.0.0.0/24(rw,no_root_squash,no_all_squash,sync)
    常见的参数则有:
    
    参数值    内容说明
    rw  ro    该目录分享的权限是可擦写 (read-write) 或只读 (read-only),但最终能不能读写,还是与文件系统的 rwx 及身份有关。
    
    sync  async    sync 代表数据会同步写入到内存与硬盘中,async 则代表数据会先暂存于内存当中,而非直接写入硬盘!
    
    no_root_squash  root_squash    客户端使用 NFS 文件系统的账号若为 root 时,系统该如何判断这个账号的身份?预设的情况下,客户端 root 的身份会由 root_squash 的设定压缩成 nfsnobody, 如此对服务器的系统会较有保障。但如果你想要开放客户端使用 root 身份来操作服务器的文件系统,那么这里就得要开 no_root_squash 才行!
    
    all_squash    不论登入 NFS 的使用者身份为何, 他的身份都会被压缩成为匿名用户,通常也就是 nobody(nfsnobody) 啦!
    
    anonuid  anongid    anon 意指 anonymous (匿名者) 前面关于 *_squash 提到的匿名用户的 UID 设定值,通常为 nobody(nfsnobody),但是你可以自行设定这个 UID 的值!当然,这个 UID 必需要存在于你的 /etc/passwd 当中! anonuid 指的是 UID 而 anongid 则是群组的 GID 啰。

    配置生效

    [root@server ~]# exportfs -r

    启动rpc和nfs(注意顺序)

    [root@server ~]# systemctl start rpcbind
    [root@server ~]# systemctl start nfs

    查看RPC服务的注册情况

    [root@server ~]# rpcinfo -p localhost
       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  54506  status
        100024    1   tcp  34836  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  44948  nlockmgr
        100021    3   udp  44948  nlockmgr
        100021    4   udp  44948  nlockmgr
        100021    1   tcp  41426  nlockmgr
        100021    3   tcp  41426  nlockmgr
        100021    4   tcp  41426  nlockmgr
    选项与参数:
    -p :针对某 IP (未写则预设为本机) 显示出所有的 port 与 porgram 的信息;
    -t :针对某主机的某支程序检查其 TCP 封包所在的软件版本;
    -u :针对某主机的某支程序检查其 UDP 封包所在的软件版本;

    利用showmount命令检查服务端连机情况

    [root@server ~]# showmount -e localhost
    Export list for localhost:
    /data/nfsdir 10.0.0.0/24
    选项与参数:
    -a :显示目前主机与客户端的 NFS 联机分享的状态;
    -e :显示某部主机的 /etc/exports 所分享的目录数据。

    六、客户端配置

    创建需要挂载的目录

    [root@client01 ~]# mkdir /nfsdir

    查看服务端的共享目录信息

    [root@client01 ~]# showmount -e 10.0.0.10
    Export list for 10.0.0.10:
    /data/nfsdir 10.0.0.0/24

    为了提高NFS的稳定性,使用TCP协议挂载,NFS默认用UDP协议

    mount -t nfs 192.168.2.203:/data/lys /lys -o proto=tcp -o nolock

    七.测试

    查看挂载情况

    [root@client01 ~]# df -h|grep nfsdir
    10.0.0.10:/data/nfsdir    17G  1.3G   16G   8% /nfsdir

    服务端在共享目录下生成一个测试文件

    [root@server ~]# echo "hello nfs" > /data/nfsdir/test.txt

    客户端查看

    [root@client01 ~]# ll /nfsdir/
    total 4
    -rw-r--r-- 1 root root 10 Apr 16 09:19 test.txt

      [root@client01 ~]# cat /nfsdir/test.txt
      hello nfs

    客户端生成文件内容

    [root@client01 ~]# echo "client also write message" >> /nfsdir/test.txt 
    [root@client01 ~]# cat /nfsdir/test.txt                                 
    hello nfs
    client also write message

    服务端查看文件内容

    [root@server ~]# cat /data/nfsdir/test.txt 
    hello nfs
    client also write message

    卸载已挂载的NFS

    [root@client01 ~]# umount /nfsdir/
    [root@client01 ~]# df -h|grep nfsdir
    [root@client01 ~]# df -h
    Filesystem               Size  Used Avail Use% Mounted on
    /dev/mapper/centos-root   17G  1.2G   16G   7% /
    devtmpfs                 220M     0  220M   0% /dev
    tmpfs                    231M     0  231M   0% /dev/shm
    tmpfs                    231M  4.6M  226M   2% /run
    tmpfs                    231M     0  231M   0% /sys/fs/cgroup
    /dev/sda1               1014M  125M  890M  13% /boot
    tmpfs                     47M     0   47M   0% /run/user/0

    补充部分:

    由于每次nfs启动向rpc注册端口都是随机生成,不是固定的,这样就给我们防火墙的设置带来不便。

    [root@server ~]# rpcinfo -p localhost
       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  54506  status
        100024    1   tcp  34836  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  44948  nlockmgr
        100021    3   udp  44948  nlockmgr
        100021    4   udp  44948  nlockmgr
        100021    1   tcp  41426  nlockmgr
        100021    3   tcp  41426  nlockmgr
        100021    4   tcp  41426  nlockmg

    通过修改配置文件,将注册端口固定。

    [root@server ~]# echo -e "RQUOTAD_PORT=30001
    LOCKD_TCPPORT=30002
    LOCKD_UDPPORT=30002
    MOUNTD_PORT=30003
    STATD_PORT=30004" >>/etc/sysconfig/nfs 
    [root@server ~]# tail -5 /etc/sysconfig/nfs
    RQUOTAD_PORT=30001
    LOCKD_TCPPORT=30002
    LOCKD_UDPPORT=30002
    MOUNTD_PORT=30003
    STATD_PORT=30004

    重启nfs,并查看注册端口

    [root@server ~]# systemctl restart nfs
    [root@server ~]# rpcinfo -p localhost
       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  54506  status
        100024    1   tcp  34836  status
        100005    1   udp  30003  mountd
        100005    1   tcp  30003  mountd
        100005    2   udp  30003  mountd
        100005    2   tcp  30003  mountd
        100005    3   udp  30003  mountd
        100005    3   tcp  30003  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  38083  nlockmgr
        100021    3   udp  38083  nlockmgr
        100021    4   udp  38083  nlockmgr
        100021    1   tcp  46265  nlockmgr
        100021    3   tcp  46265  nlockmgr
        100021    4   tcp  46265  nlockmgr

    这下防火墙只需要开发这些相应的端口就可以了。

    over...

  • 相关阅读:
    Java
    Linux
    Linux
    Linux
    Java
    Ansible
    Ansible
    Java
    ACM&OI 基础数论算法专题
    题解 P4781 【【模板】拉格朗日插值】
  • 原文地址:https://www.cnblogs.com/benjamin77/p/8854164.html
Copyright © 2011-2022 走看看