linux中NFS服务器架设所需要用到的知识

一.NFS服务器的简要说明:
NFS传输数据时使用的端口是随机选择的,唯一的限制就是小于1024.
RPC最主要的功能就是在指定每个NFS功能所对应的port number ,并且回报给客户端,让客户端可以连结到正确的埠口上去.
 RPC 如何知道每个 NFS 的埠口呢?
 当服务器在启动 NFS 时会随机取用数个端口,并主动的向 RPC 注册,因此 RPC 可以知道每个端口对应的 NFS 功能,然后 RPC 又是固定使用 port 111 来监听客户端的需求并回报客户端正确的端口.
 
二.运行NFS需要启动的RPC daemons
 1.rpc.nfsd:
主要的功能就是在管理客户端是否能够使用服务器文件系统挂载信息等, 其中还包含这个登入者的 ID 的判别!
  2.rpc.mountd
管理 NFS 的文件系统!当客户端顺利的通过 rpc.nfsd 而登入服务器之后,在他可以使用 NFS 服务器提供的档案之前,还会经过档案权限 (就是那个 -rwxrwxrwx 与 owner, group 那几个权限啦) 的认证程序!他会去读 NFS 的配置文件 /etc/exports 来比对客户端的权限,当通过这一关之后客户端就可以取得使用 NFS 档案的权限!
  3.rpc.lockd (非必要)
管理档案的锁定 (lock) 用途。为何档案需要『锁定』呢? 因为既然分享的 NFS 档案可以让客户端使用,那么当多个客户端同时尝试写入某个档案时, 就可能对于该档案造成一些问题啦!rpc.lockd 必须要客户端与服务器端都开启才行!此外, rpc.lockd 也常与 rpc.statd 同时启用。
  4.rpc.statd (非必要)
可以用来检查档案的一致性,与 rpc.lockd 有关!若发生因为客户端同时使用同一档案造成档案可能有所损毁时, rpc.statd 可以用来检测并尝试回复该档
案。与 rpc.lockd 同样的,这个功能在服务器端与客户端都启动才会生效。
 

三.满足一下三个条件登录者才具有该档案的可写入权限.
 (1)使用者账号,亦即 UID 的相关身份;
 (2)NFS 服务器允许有写入的权限;
 (3)文件系统确实具有 w 的权限时;
  
 
四.要设定好 NFS 服务器必须要有两个软件才行,分别是:
      RPC 主程序:rpcbind ;以前这个软件称为 portmap
      NFS 主程序:nfs-utils; 提供 rpc.nfsd 及 rpc.mountd 这两个 NFS daemons与其他相关 documents 与说明文件、执行文件等的软件!

五.NFS 的软件结构:
      1./etc/exports 主要配置文件
 NFS 的主要配置文件!不过,系统并没有默认值,所以这个档案不一定会存在,使用 vim 主动建立起这个档案即可!
      2./usr/sbin/exportfs NFS 文件系统维护指令:
 这个是维护 NFS 分享资源的指令,我们可以利用这个指令重新分享/etc/exports 变更的目录资源、将 NFS Server
 分享的目录卸除或重新分享等等,这个指令是NFS系统里面相当重要的一个!
      3./var/lib/nfs/*tab 分享资源的登录档
 在 NFS 服务器的登录文件都放置到 /var/lib/nfs/ 目录里面,在该目录下有两个比较重要的登录档, 一个是 etab ,主要记录了 NFS 所分享出来的目录的完整权限设定值;
  另一个 xtab 则记录曾经链接到此 NFS 服务器的相关客户端数据。
      4./usr/sbin/showmount 客户端查询服务器分享资源的指令
 exportfs 是用在 NFS Server 端,而 showmount 则主要用在 Client 端。这个 showmount 可以用来察看 NFS 分享出来的目录资源!
 
 
六./etc/exports配置文件的内容和内容解析:

    /tmp         192.168.100.0/24(ro)   localhost(rw)       *.magedu.com(ro,sync)
    [分享目录]   [可用主机(权限)]     [可用主机名(权限)]    [可用通配符(权限)]
 
 主机名的设定方式:
      1.可使用完整的 IP 或者是网域,例如 192.168.100.10 或192.168.100.0/24 ,或 192.168.100.0/255.255.255.0 都可以接受!
  2.可使用主机名,但这个主机名必须要在 /etc/hosts 内,
  3.可使用DNS找到该名称才行! 主机名可以使用通配符.
  
 权限方面 (就是小括号内的参数) 常见的参数则有:
 参数值  
 rw  ro
 该目录分享的权限是可擦写 (read-write) 或只读 (read-only),但最终能不能读写,还是与文件系统的 rwx 及身份有关。

 sync  async
 sync 代表数据会同步写入到内存与硬盘中,async 则代表数据会先暂存于内存当中,而非直接写入硬盘!

 no_root_squash  root_squash
 预设的情况下,客户端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 。

 suid   nosuid
 如果挂载的 partition 上面有任何 SUID的 binary 程序时, 你只要使用 nosuid 就能够取消 SUID 的功能了!
 dev nodev
 是否可以保留装置档案的特殊功能?一般来说只有 /dev 这个目录才会有特殊的装置,因此你可以选择 nodev 喔!
 exec noexec
 是否具有执行 binary file 的权限? 如果你想要挂载的仅是数据区 (例如 /home),那么可以选择 noexec 啊!
 user nouser
 是否允许用户进行档案的挂载与卸除功能? 如果要保护文件系统,最好不要提供使用者进行挂载与卸除吧!
 auto noauto
 这个 auto 指的是『mount -a』时,会不会被挂载的项目。 如果你不需要这个 partition 随时被挂载,可以设定为 noauto。
 fg bg  
 当执行挂载时,该挂载的行为会在前景 (fg) 还是在背景 (bg) 执行? 若在前景执行时,则 mount 会持续尝试挂载,直到成功或 time out 为止,若为背景执行, 则 mount 会
 在背景持续多次进行 mount ,而不会影响到前景的程序操作。 如果你的网络联机有点不稳定,或是服务器常常需要开关机,那建议使用 bg 比较妥当。
 soft  hard
 如果是 hard 的情况,则当两者之间有任何一部主机脱机,则 RPC 会持续的呼叫,直到对方恢复联机为止。如果是 soft的话,那 RPC 会在 time out
  后『重复』呼叫,而非『持续』呼叫, 因此系统的延迟会比较不这么明显。同上,如果你的服务器可能开开关关,建议用 soft 喔! 
 intr
 当你使用上头提到的 hard 方式挂载时,若加上 intr 这个参数, 则当 RPC 持续呼叫中,该次的呼叫是可以被中断的(interrupted)。
 rsize   wsize
 读出(rsize)与写入(wsize)的区块大小 (block size)。 这个设定值可以影响客户端与服务器端传输数据的缓冲记忆容量。一般来说, 如果在局域网络内 (LAN) ,并且客户端与
 服务器端都具有足够的内存,那这个值可以设定大一点, 比如说 32768 (bytes) 等,提升缓冲记忆区块将可提升 NFS 文件系统的传输能力!但要注意设定的值也不要太大,最好
  是达到网络能够传输的最大值为限。

七.配置过程中我们可能要用到的指令.
1.指令:rpcinfo -p [IP|hostname]
    rpcinfo -t|-u  IP|hostname 程序名称 
    -p :针对某 IP (未写则预设为本机) 显示出所有的 port 与 porgram 的信息;
    -t :针对某主机的某支程序检查其 TCP 封包所在的软件版本;
    -u :针对某主机的某支程序检查其 UDP 封包所在的软件版本;
 
 
2.指令:showmount [-ae] [hostname|IP]
    -a :显示目前主机与客户端的 NFS 联机分享的状态;
    -e :显示某部主机的 /etc/exports 所分享的目录数据。
   
3.指令:[root@www ~]# tail /var/lib/nfs/etab        
/home/public  192.168.100.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash, no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534)  
 
 
4.指令:当重新设定完 /etc/exports 后如果不需要重新启动的时候,我们可以透过 exportfs 这个指令!
 exportfs [-aruv] 
    -a :全部挂载(或卸除) /etc/exports 档案内的设定
    -r :重新挂载 /etc/exports 里面的设定,此外,亦同步更新 /etc/exports及 /var/lib/nfs/xtab 的内容!
    -u :卸除某一目录
    -v :在 export 的时候,将分享的目录显示到屏幕上!  
 
 
5.指令: 建立挂载点案例:
    [root@clientlinux ~]# mkdir -p /home/nfs/public
    [root@clientlinux ~]# mount -t nfs 192.168.100.254:/home/public  /home/nfs/public

你可能感兴趣的:(nfs服务器)