Linux nfs服务介绍

nfs服务介绍

  1. nfs(Network File System) 网络文件系统,能使用户访问服务器的文件系统,就像访问自己的本机的文件系统一样,并且多个
    客户端共享访问该文件系统。
  2. 目前nfs服务,较为流行的两个nfs的组件为:nfsd,nfs-ganesha。前者linux为系统自带的内核态的文件系统,后者是开源的用户空间的文件
    系统。因为nfs-ganesha运行在用户态,nfsd运行在内核态,所以nfs-ganesha具有内存分配灵活,可移植性更好,更方便扩展等优势。
    缺点是nfs-ganesha目前的稳定性还不如nfsd。

如何搭建nfsd和nfs-ganesha服务

机器环境为centos7,由于两者都使用2049端口,因此一台服务器上,只能跑其中之一.

  1. 搭建nfsd服务
    A. 检查是否安装rpcbind和nfs-utils软件
    rpm -qa | grep rpcbind nfs-utils

    B. 如果上面两个软件没有安装,需要安装这两个软件
    yum install -y rpcbind nfs-utils

    C. 启动B中安装的软件
    systemctl start rpcbind && systemctl enable rpcbind
    systemctl start nfs && systemctl enable nfs

    D. 配置nfs权限文件
    配置权限可以直接修改/etc/exports文件,也可以在/etc/exports.d目录下,添加*.exports文件。
    文件内容格式为:目录 IP/IP网段(nfs选项)
    文件内容每一个权限的占用一行,选项一般使用较多的搭配项为,rw/ro,sync,no_root_squash,rw表示读写,ro表示只读
    sync,表示数据写入到内存和硬盘,保证数据不会丢失,当客户端用root身份挂载时候,nfs服务器将其映射为root用户.

    E. 执行权限的加载 命令,exportfs -rav 执行这个命令,并不需要去重启nfs服务。

    F. 客户端使用如下命令去挂载,172.16.0.1表示服务器的ip地址,vers 代表协议类型,支持3,4,4.1等,/mnt表示服务器的
    共享目录,/tmp为本地目录
    mount -t nfs 172.16.0.1:/mnt /tmp -o vers=4

    G. 挂载成功后,使用df命令,nfs4所在的哪一行为挂载的nfs文件系统

    然后就可以,cd /tmp,对这个目录下进行读写文件等操作了,
    至此nfsd服务全部搭建完毕。

    H. 查看nfs的日志,在系统日志/var/log/messages中,可以用vim打开,搜索nfs关键字。

  2. nfs-ganesha搭建
    A. 从github下载nfs-ganesha,按照官网给的编译文档进行编译,并将相应的二进制ganesha.nfsd ,拷贝/usr/bin/目录下

    B. 配置nfs-ganesha的systemd服务,从nfs-ganesha/src/scripts/systemd目录下,将nfs-ganesha-lock.service.el7,nfs-ganesha.service.el7
    拷贝到目录/usr/lib/systemd/system,并去掉后缀el7,然后执行命令systemctl daemon-reload

    C.配置nfs-ganesha的配置文件,/etc/ganesha/ganesha.conf内容大概如下,
    EXPORT
    {

    Export Id (mandatory, each EXPORT must have a unique Export_Id)

    Export_Id = 12345;

    Exported path (mandatory)

    Path = /mnt;

    Pseudo Path (required for NFSv4 or if mount_path_pseudo = true)

    Pseudo = /mnt;

    Restrict the protocols that may use this export. This cannot allow

    access that is denied in NFS_CORE_PARAM.

    Protocols = 3,4;

    Access type for clients. Default is None, so some access must be

    given. It can be here, in the EXPORT_DEFAULTS, or in a CLIENT block

    Access_Type = RW;

    Whether to squash various users.

    Squash = no_root_squash;

    Allowed security types for this export

    Sectype = sys,krb5,krb5i,krb5p;

    Exporting FSAL

    FSAL {
    Name = VFS;
    }
    }
    具体配置可以参照,github文档

    D. 启动nfs-ganesha服务,执行systemctl start nfs-ganesha,
    然后检查nfs-ganesha状态,执行systemctl reload nfs-ganesha,

    E. client挂载与nfsd client挂载方式一样,挂载成功后,说明nfs-ganesha搭建完成

nfs服务常见异常问题解决办法

1.  当nfs 服务器宕机或者nfs服务挂掉时,客户端未进行正常的umount,这时候客户端执行df命令,或者cd 到挂载路径,
   client会hang住,客户端可以执行 umount 挂载路径 -fl

2.  当客户端在服务器的授权正常时,client mount不了服务器的目录,可以在服务器的/var/log/messages中查下,是不是
     nfsd最大块的问题,就是当前nfsd支持传输的最大块大小,不能满足client传输的块大小,
     实质上就是nfsd设置的块大小过小,
     解决办法是:在nfs服务器上执行,echo 1048576 > /proc/fs/nfsd/max_block_size
     内核目前支持的最大块大小为1M

posted on 2019-11-05 23:51  盛夏落木  阅读(1733)  评论(0编辑  收藏  举报

导航