zoukankan      html  css  js  c++  java
  • NFS学习

    NFS : Network File System  网络文件系统

    sun公司
     版本   NFSv2 NFSv3 NSFv4

    RPC : Remote Procedure Call Protocol  远程过程调用协议,编程技术,简化分布式应用程序的

    开发

    工作原理:当地请求调用内核文件系统,内核文件系统发现请求的是远程网络的文件系统(NFS)时

    ,内核会向本地存根发起请求,本地存根向远程RPC服务请求数据,RPC服务器处理返回本地存根对

    应的NFS服务端口,本地存根请求对应端口的NFS服务,NFS服务调用本地内核处理请求。
              C->RPC C->RPC S->S

    Linux上的RPC服务器  Portmap  111端口 tcp/udp
    RPC:二进制格式,文本格式(XMLRPC)

    NFS:只能工作在unix/linux,常用于内网,认证环节很薄弱,不安全

     服务器端:nfs-utils

     service nfs start   需要potmap用时运行,默认是启动的,查看111端口

    rpcinfo    //查看rpc运行服务监听的所有端口

    rpcinfo -p localhost


     
    启动的nfs主要进程:nfsd(文件传输进程)   mountd(挂载服务)  quotad(限定客户端使用配额)
      nfsd tcp 2049 端口
      mountd 端口由RPC服务随机选取
      quotad 端口由RPC服务随机选取
    启动的服务

    [root@localhost lib]# rpm -ql nfs-utils
    /etc/nfsmount.conf
    /etc/rc.d/init.d/nfs
    /etc/rc.d/init.d/nfslock
    /etc/rc.d/init.d/rpcgssd
    /etc/rc.d/init.d/rpcidmapd
    /etc/rc.d/init.d/rpcsvcgssd


    nfslock服务,防止同一个文件被多个请求占用,用户的锁中断恢复。
    nfs服务 要开启启动
    chkconfig nfs on


    配置文件  /etc/exports      man exports 查看帮助文档
    配置格式
        /path/to/somefile    client1 client2 ...   多个客户端用空格隔开,每个客户端后    

    面加(),客户端可以是主机名 IP 网络组 通配符 定义客户端的,()里面定义文件属性
            /nfs/file     192.168.136.0/24(ro,async) 192.168.135.0/24(rw,sync)
            #开头的是注释
    showmount
        -a ip  显示所有客户端名称,挂载的目录
        -e ip 显示共享(导出)的目录   showmount -e 192.168.136.135  查看指定IP的共享(导出)    

              目录,客户端也可查看服务端共享(导出)的目录
        -d ip  只显示被挂载的目录

    客户端使用mount挂载
       mount -t nfs Server:/path/exports    /nfs/local

    exportfs
       -a 和-r或-u同时使用
       -r 重新导出所有目录
       -u 取消导出所有
       -v  显示过程
    exportfs -ra


      nfs是要通过映射用户ID来管理里用户权限的,如果挂载的客户端有一个用户A的UID号和服务端  

    共享的文件属主相同的UID,则文件属主则会变为A。
    文件系统导出的属性
      ro
      rw
      sync
      async
      root_squash  默认将管理员映射为来宾账号
      no_root_squasha
      all_squash   将所有用户映射为来宾账号    
      anonuid,anongid  anonuid=504 将用户映射为指定来宾的用户

    /shared               192.168.136.0/8(rw,all_squash,anonuid=503,anongid=503)  //修改对应文件属主属组为503,然后客户端重新挂载
    exportfs -ra

     这里遇到nfs属主属组都为nobody

    [root@localhost nfs]# ll
    total 0
    -rw-r--r--. 1 nobody nobody 0 Jul 20 00:48 1
    -rw-rwxr--. 1 nobody nobody 0 Jul 19 23:02 test
    -rw-rwxr--. 1 nobody nobody 0 Jul 19 23:18 test2
    -rw-rwxr--. 1 root   ro

    网上搜答案都说这样解决,不过我没解决,有空在找

    最终测试结果发现,nobody的权限是和nfstest的权限是一样的。不影响使用 。

    setfacl -m u:nfstest:rwx  shared   // 则nobody拥有对shared目录下拥有读写执行权限。可以删除root组的文件,但没有对root组文件有写的权限。 


     /etc/fstab 开机自动挂载

    192.168.113.111:/img    /var/www/html/img       nfs      defaults,_rnetdev 0 0   // _rnetdev  如果开机系统无法挂载则不挂在,防止系统无法启动

           nfs配置文件:/etc/sysconfig/nfs
           启用自定义端口防止和其它端口冲突
                   Mountd_port
                   Reqotaad_port    

           Lockd_tcpport
                    lockd_udpport

    问题:

    启动nfs报错

    [root@localhost mnt]# service nfs restart
    Shutting down NFS daemon:                                  [  OK  ]
    Shutting down NFS mountd:                                  [  OK  ]
    Shutting down NFS quotas:                                  [  OK  ]
    Starting NFS services:                                     [  OK  ]
    Starting NFS quotas: Cannot register service: RPC: Unable to receive; errno = Connection refused
    rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp).
                                                               [FAILED]
    Starting NFS mountd:                                       [FAILED]
    Starting NFS daemon: rpc.nfsd: writing fd to kernel failed: errno 111 (Connection refused)
    rpc.nfsd: unable to set any sockets for nfsd
                                                               [FAILED]
    [root@localhost mnt]# 


    解决:RH系操作系统在6.0版本之后没有portmap服务控制rpc的启动,由于NFS和nfslock的启动需要向

    rpc进行注册,rpc不启动的话就会报错。

    解决方法:启动rpcbind&rpcidmap rpcbind是6.0版本后默认的RPC服务,所以要先于nfs启动。如

    果不启动rpcidmap则会造成用户权限的映射错误,用户的权限看起来是一串数字。

    [root@bjs0- ~]# /etc/init.d/rpcbind start
    Starting rpcbind:                                          [  OK  ]
    [root@bjs0- ~]# /etc/init.d/rpcidmapd start
    Starting RPC idmapd:                                       [  OK  ]
    [root@bjs0- ~]# /etc/init.d/nfs start
    Starting NFS services:                                     [  OK  ]
    Starting NFS quotas:                                       [  OK  ]
    Starting NFS mountd:                                       [  OK  ]
    Starting NFS daemon:                                       [  OK  ]
     

             

  • 相关阅读:
    AspNet上传文件的几个控件(downmoon收集)
    简单的iframe无刷新上传带生产缩略图和水印
    js 操作frameset frame 对象
    C#里的三种定时器类型
    Asp.net上传图片同时生成缩略图和水印图后台代码
    .NET调用新浪微博开放平台接口的代码示例
    用 javascript 获取鼠标(光标)的坐标位置 兼容IE/Firefox等浏览器
    IIS Web服务扩展中没有Asp.net 2.0
    asp.net实现form验证登陆
    Asp.net实现在线截图(大图截取为小图)
  • 原文地址:https://www.cnblogs.com/kankanhua/p/4660152.html
Copyright © 2011-2022 走看看