• Linux NFS 详解


    目录:

         1、了解NFS服务

         2、NFS主要文件

         3、NFS安装

         4、NFS配置

         5、NFS客户端配置

         6、固定NFS端口

         7、Windows挂载NFS

    1、了解NFS服务

          NFS是Network  File System(网络文件系统)。主要功能是通过网络让不同的服务器之间可以共享文件或者目录。NFS客户端一般是应用服务器(比如web,负载均衡等),可以通过挂载的方式将NFS服务器端共享的目录挂载到NFS客户端本地的目录下。

          因为 NFS 支持的功能相当的多,而不同的功能都会使用不同的程序来启动, 每启动一个功能就会启用一些端口来传输数据,因此, NFS 的功能所对应的端口才没有固定住, 而是随机取用一些未被使用的小于 1024 的埠口来作为传输之用。但如此一来又造成客户端想要连上服务器时的困扰, 因为客户端得要知道服务器端的相关埠口才能够联机吧!

         此时我们就得需要远程过程调用 (RPC) 的服务啦!RPC 最主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且回报给客户端,让客户端可以连结到正确的埠口上去。 那 RPC 又是如何知道每个 NFS 的埠口呢?这是因为当服务器在启动 NFS 时会随机取用数个埠口,并主动的向 RPC 注册,因此 RPC 可以知道每个埠口对应的 NFS 功能,然后 RPC 又是固定使用 port 111 来监听客户端的需求并回报客户端正确的埠口, 所以当然可以让 NFS 的启动更为轻松愉快了。

          NFS在文件传送过程中依赖与RPC(远程过程调用)协议。NFS本身是没有提供信息传送的协议和功能的,但是能够用过网络进行图片,视频,附件等分享功能。只要用到NFS的地方都需要启动RPC服务,不论是NFS的服务端还是客户端。

          NFS和RPC的关系:可以理解为NFS是一个网络文件系统(比喻为租房的房主),而RPC是负责信息的传输(中介),客户端(相当于租房的租客)。

    2、NFS主要文件

    要设定好 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 服务所需要的主要软件啦!一定要有喔!

     NFS 这个咚咚真的是很简单,上面我们提到的 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 分享出来的目录资源喔!

    3、NFS安装

    # yum -y install nfs-utils rpcbind

    需要先启动rpcbind服务
    # systemctl enable nfs
    # systemctl enable rpcbind
    # systemctl start rpcbind
    # systemctl start nfs

    4、NFS配置

    # mkdir /nfsfile      #如果在配置文件中使用了all_squash权限压缩,需要给nfsfile文件授权:# chown nfsnobody /nfsfile
    
    # cat /etc/exports
    /nfsfile 10.6.0.0/8(rw,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 啰。

     配置生效

    # exportfs -rv

    查看rpc使用状况

    # rpcinfo -p localhost

    选项与参数:
    -p :针对某 IP (未写则预设为本机) 显示出所有的 port 与 porgram 的信息;
    -t :针对某主机的某支程序检查其 TCP 封包所在的软件版本;
    -u :针对某主机的某支程序检查其 UDP 封包所在的软件版本;

    在你的 NFS 服务器设定妥当之后,我们可以在 server 端先自我测试一下是否可以联机喔!就是利用 showmount 这个指令来查阅!

    # showmount -e localhost
    Export list for localhost:
    /nfsfile 10.6.0.0/8
    选项与参数:
    -a :显示目前主机与客户端的 NFS 联机分享的状态;
    -e :显示某部主机的 /etc/exports 所分享的目录数据。

    5、nfs客户端配置

    # yum -y install nfs-utils
    # mkdir /nfsmnt

    # showmount -e 10.6.2.198 #查看NFS共享的目录
    Export list for 10.6.2.198:
    /nfsfile 10.6.0.0/8

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

    # mount -t nfs 10.6.2.198:/nfsfile /nfsmnt -o proto=tcp -o nolock

    6、固定NFS端口

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

    # rpcinfo -p localhost
    # vim /etc/sysconfig/nfs
    RQUOTAD_PORT=30001
    LOCKD_TCPPORT=30002
    LOCKD_UDPPORT=30002
    MOUNTD_PORT=30003
    STATD_PORT=30004
    # service nfs restart     #再使用:# rpcinfo -p localhost 就可以查看到端口了。

    7、Windows 挂载NFS

    安装nfs客户端:

    查看远程服务器上的 NFS 共享目录,运行命令提示符:
    > showmount -e 10.6.2.198

    导出列表在 10.6.2.198:

     

    /nfsfile 10.6.0.0/8

     
    挂载 NFS 目录
    > mount 10.6.2.198:/nfsfile N:
     
    卸载 NFS 目录
    > umount -a
     
    挂载匿名共享的 NFS 目录需要添加2个注册表项,然后重启。
    [HKEY_LOCAL_MACHINESOFTWAREMicrosoftClientForNFSCurrentVersionDefault]
    "AnonymousUid"=dword:00000000
    "AnonymousGid"=dword:00000000
    这里的 Uid 和 Gid 就是远程服务器上 NFS 共享目录属主的 uid 和 gid
    # id
    uid=0(root) gid=0(root)
  • 相关阅读:
    温习:ASP.NET页面生命周期
    浅析大型网站的架构
    ASP.Net2.0小技巧 保持滚动条的位置 焦点移动到某个控件 $符号轻松的使用FindControl
    hiberfil.sys msocache,cpce&天极网,终结析沟,viewstate,cache,scroll不变,换行,cs下换行,为空,marshalbyrefobject,gettype,主题,getlegth(0),is
    Crontab中使用>&的问题
    到底什么是MiddleWare(中间件),请用plain English描述
    Dell D630安装SATA AHCI驱动的方法
    What Is Bootloader And How To Unlock Bootloader On Android Phones
    SCSI和RAID的相关知识
    Defy GPRS设置
  • 原文地址:https://www.cnblogs.com/reachos/p/8708318.html
Copyright © 2020-2023  润新知