zoukankan      html  css  js  c++  java
  • NFS 文件系统

    NFS的安装是非常简单的,只需要两个软件包即可,而且在通常情况下,是作为系统的默认包安装的。

    如果没有则安装:

    yum install nfs-utils portmap -y

    NFS服务的主要配置文件

     /etc/exports

    /etc/exports文件内容格式:

    <输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]
    sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
    async:将数据先保存在内存缓冲区中,必要时才写入磁盘
    r:用户有写入的权限
    w:用户有读取的权限。

    NFS服务器的启动与停止

    启动NFS服务器:

    为了使NFS服务器能正常工作,需要启动portmap和nfs两个服务,并且portmap一定要先于nfs启动。

    service portmap start
    service nfs start

    停止NFS运行时,需要先停止nfs服务再停止portmap服务,对于系统中有其他服务(如NIS)需要使用时,不需要停止portmap服务

    service nfs stop
    service portmap stop

    设置NFS服务器的自动启动状态

    # chkconfig --level 35 portmap on
    # chkconfig --level 35 nfs on     ---设置portmap和nfs服务在系统运行级别3和5自动启动

    相关命令

    1.exportfs                            #exportfs 命令使改动后的/etc/exports文件立刻生效。
    # exportfs [-aruv]
      -a 全部挂载或卸载 /etc/exports中的内容
      -r 重新读取/etc/exports 中的信息,并同步更新/etc/exports、/var/lib/nfs/xtab
      -u 卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)
      -v 在export的时候,将详细的信息输出到屏幕上。
    具体例子:
      # exportfs -au 卸载所有共享目录
      # exportfs -rv 重新共享所有目录并输出详细信息。
    2.showmount
      -a 显示已经于客户端连接上的目录信息
      -e IP或者hostname 显示此IP地址分享出来的目录。

    挂载 NFS 文件系统例子

    1.使用 mount 命令来挂载另一个机器上的 NFS 文件系统:

    mount 服务器ip或域名:/misc/export /misc/local     #将服务器端的目录/misc/export挂载到客户端主机/misc/local下。

    例如:

    mount -t nfs 192.168.2.16:/home/ebank/docroot /appsoft/apache16   #将2.16服务器docroot目录下的文件挂载到本机的/appsoft/apache16目录下.

    2.使用 /etc/fstab 来挂载 NFS 文件系统

    要挂载其它机器上的 NFS 共享的另一种方法是在 /etc/fstab 文件中添加一行。这一行中必须声明 NFS 服务器的主机名,要导出的目录,以及要挂载 NFS 共享的本地机器目录。你必须是根用户才能修改 /etc/fstab 文件。
    /etc/fstab 中每行的一般语法如下所示:

    serverip:/usr/local/pub    /pub   nfs    rsize=8192,wsize=8192,timeo=14,intr

    挂载点 /pub 在客户机器上必须存在。在客户系统的 /etc/fstab 文件中把这一行添加完毕后,在 shell 提示下键入命令 mount /pub,以及将会从服务器中挂载到挂载点 /pub。 /

    mount -a 重新加载

    三、实例说明:

    centos系统两台:

    服务器端:192.168.1.200
    客户端: 192.168.1.100

    需求:将服务器端192.168.1.200的/CentOS/opt/目录挂在到客户端1.100的/opt/目录下,并是客户端有读写的权限.

    S/c都关掉iptables防火墙   /etc/init.d/iptables stop

    一、服务器端配置:

    1.查看nfs是否安装 ; rpm -qa nfs

    2.启动nfs服务

    3.配置/ect/exports文件

     [root@localhost /]# more /etc/exports
    /CentOS/opt  192.168.1.200/24(rw)

    4.重新加载exports文件

    [root@localhost /]# exportfs -r

    5.查看服务端输出信息.

    [root@localhost /]# showmount -e          #查看自己共享的信息。
    Export list for localhost.localdomain:
    /CentOS/opt 192.168.1.200/24

    二、客户端配置。

    1. 客户端使用showmount命令查询NFS的共享状态

    [root@localhost /]# showmount -e 192.168.1.200
    Export list for 192.168.1.200:
    /CentOS/opt 192.168.1.200/24

    2.客户端挂载nfs服务器中的共享目录.

    格式:mount NFS服务器IP:共享目录 本地挂载点目录
    mount -t nfs 192.168.1.200:/CentOS/opt/   /opt

    3. 验证是否挂载成功。

    4.使用 /etc/fstab 来挂载 NFS 文件系统

    使用mount挂载时,当服务器重启后挂载就没有了,只有当写入/etc/fstab文件中,客户端重启挂载点也一直存在。

    vi /etc/fstab
    192.168.1.200:/CentOS/opt/ /opt  nfs defaults 0 0

    三、访问权限问题;

      1.客户机的访问权限问题要结合/etc/exports文件的权限和服务器挂载目录的权限,当/etc/exports文件中设置客户机有rw权限时,目录也必须要有写入的权限.客户机才可以有读写的权限。

    2.在生产中,我们/etc/exports中定义的可以机又rw的权限,目录也是rw权限,在客户端建目录是报权限拒绝,因为当时挂载的目录时www用户的,所以在客户端上面用www用户访问创建目录时,客户端和服务端的www用户的id好必须一样,这是在生产中遇到的问题。

    关于NFS启动报错问题:

    [root@toloan-test opt]# /etc/init.d/nfs start

    启动 NFS 服务: [确定]
    关掉 NFS 配额:无法注册服务: RPC:无法接收; errno = 拒绝连接
    rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp).
    [失败]
    启动 NFS mountd:[失败]
    启动 NFS 守护进程:rpc.nfsd: writing fd to kernel failed: errno 111 (Connection refused)
    rpc.nfsd: unable to set any sockets for nfsd
    [失败]

    正确启动方式:

    root@toloan-test opt]# /etc/init.d/rpcbind start
    正在启动 rpcbind:[确定]
    [root@toloan-test opt]# /etc/init.d/nfs start
    启动 NFS 服务: [确定]
    关掉 NFS 配额:[确定]
    启动 NFS mountd:[确定]
    启动 NFS 守护进程:[确定]
    [root@toloan-test opt]#

    NFS文件系统挂在后客户端目录权限变成4294967294的问题

    在客户端执行10.222上面执行挂载命令:
    mount -t nfs 10.10.10.244:/apps/product/nginx/htdocs/upload      /opt/share/upload/
    ##将服务器端10.244的目录挂载到客户端目录 /opt/share/upload/下
    属主和属组为www用户.挂在后变成4294967294 。
    drwxr-xr-x 2 4294967294 4294967294 4096 8月  13 12:46 upload

    解决办法如下:

    最简单的解决办法就是在NFS的客户端启动rpcidmapd服务,然后你再看挂载的目录用户和组都是对的了,前提是你挂载的那个磁盘目录所属的用户和组,客户端也有。

    root@toloan share]# /etc/init.d/rpcidmapd start
    正在启动 RPC idmapd:[确定]
    [root@toloan ~]# mount -t nfs 10.10.10.244:/apps/product/nginx/htdocs/upload /opt/share/upload/
    [root@toloan ~]# cd /opt/share/
    [root@toloan share]# ll
    总用量 4
    drwxr-xr-x 2 www www 4096 8月  13 12:46 upload
    [root@toloan share]# cd upload/
    [root@toloan upload]# ll
    总用量 0
    -rw-rw-r-- 1 www www 0 8月  13 12:46 1.txt
    [root@toloan upload]#

    客户端启动rpcidmapd后客户端挂载目录正常了....ok 

    nfs服务器端执行showmount -e报错问题

    今天在NFS服务器使用showmount –e查看NFS共享目录时,发现系统一直显示如下错误:
    clnt_create: RPC: Port mapper failure - Timed out

    查询相关资料显示,很有可能是因为NFS服务器的hosts文件中的域名和NFS服务器的IP地址不对应造成的。

    查看NFS服务器的hosts文件,如下:

    more /etc/hosts
    127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4 tt.test.com dev.newsp2p.cn
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    发现NFS服务器的主机名和IP地址记录不在这个文件进行记录。果断添加进去。如下:
    [root@cms ]# hostname
    cms
    [root@cms ]# echo "10.10.100.30 cms" >> /etc/hosts 
    再次使用showmount –e命令查看NFS共享,结果正常了,系统也很快的显示NFS共享。

    挂在成功后在客户端这边的共享目录创建文件后发现权限是nfsnobody的权限,而且访问时客户端ip加路径竟然访问不来资源,最后在/etc/exports中添加no_root_squash参数,然后重启,解决问题.

    /CentOS/opt 192.168.1.200/24(rw,no_root_squash)

    no_root_squash:登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限!这个项目『极不安全』,不建议使用!
    root_squash:在登入 NFS 主机使用分享之目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody 那个系统账号的身份。

  • 相关阅读:
    sfs2x 连接 mongodb
    java websocket
    webstorm 4.0 注册码
    解决 sfs2 admin tool 找不到扩展
    window 注册表五大类
    opengl 学习第二日
    java google Protobuf
    扩展 java sencha touch PhonegapPlugin
    sencha touch2 kryonet socket phonegap 通信 作者:围城
    sencha touch2 layout 笔记
  • 原文地址:https://www.cnblogs.com/saneri/p/6095034.html
Copyright © 2011-2022 走看看