ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux之NFS

2021-12-26 11:33:00  阅读:148  来源: 互联网

标签:10.100 NFS 挂载 nfs Linux home 客户端


目录

简介

  1. NFS 是 Network File System 的缩写,即网络文件系统。功能是让客户端通过网络访问不同主机上磁盘里的数据,主要用在类Unix系统上实现文件共享的一种方法
  2. NFS 的基本原则是容许不同的客户端及服务端通过一组RPC分享相同的文件系统,容许不同硬件及操作系统的系统共同进行文件的分享。
  3. NFS在文件传送或信息传送过程中依赖于RPC协议

NFS Server安装与配置

  1. 查看系统

    $ cat /etc/redhat-release
    CentOS Linux release 7.9.2009 (Core)
    
  2. 机器准备

    名称 IP 描述
    Server 10.100.22.160 服务端
    Client 10.100.22.161 客户端
  3. 服务端安装:在 CentOS 5.x 以前这个软件称为 portmap,在 CentOS 6.x 之后才称为 rpcbind 的

    $ yum install nfs-utils -y
    # 设置开机启动
    $ systemctl enable nfs
    $ systemctl enable rpcbind
    # 启动
    $ systemctl start rpcbind
    $ systemctl start nfs
    # 查看NFS开放的端口
    $ netstat -tulnp| grep -E '(rpc|nfs)'
    
  4. 服务端配置:主要配置文件时/etc/exports

    # 配置一个共享目录
    $ mkdir -p /home/data/nfs
    $ chmod 755 /home/data/nfs
    # 设置导出目录
    $ vim /etc/exports
    /home/data/nfs     10.100.22.0/24(rw,sync,no_root_squash,no_all_squash)
    # 重启nfs
    $ systemctl restart nfs
    # 检查一下服务端本地的共享目录
    $ showmount -e localhost
    Export list for localhost:
    /home/data/nfs 10.100.22.0/24
    
  5. /etc/exports配置说明

    • /home/data/nfs: 共享目录位置
    • 10.100.0.0/24: 客户端 IP 范围,* 代表所有,即没有限制
    • rw: 权限设置,可读可写
    • sync: 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
    • no_root_squash: 可以使用 root 授权
    • no_all_squash: 可以使用普通用户授权
  6. 如果重新处理/etc/exports,不需要重启NFS(如果重启nfs,要再向RPC注册)

    #  重新挂载一次 /etc/exports 的设定
    $ exportfs -arv
    
    # 将已经分享的 NFS 目录资源,通通都卸除
    $ exportfs -auv
    $ showmount -e localhost  看不到任何资源
    

NFS Server配置说明

  1. 主要配置文件:/etc/exports,配置文件并没有默认值,也不一定会存在此文件(需手动创建)。格式:<输出目录> [客户端1 选项(访问权限,用户映射,其他)]

    • 输出目录:NFS系统中需要共享给客户机使用的目录
    • 客户端:网络中可以访问这个NFS输出目录的计算机,指定方式
      • 指定ip地址的主机:192.168.0.200
      • 指定子网中的所有主机:192.168.0.0/24 192.168.0.0/255.255.255.0
      • 指定域名的主机:david.bsmart.cn
      • 指定域中的所有主机:*.bsmart.cn
      • 所有主机:*
    • 选项:设置输出目录的访问权限、用户映射等
      • 访问权限选项:只读ro,读写rw
      • 用户映射选项:
        • all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
        • no_all_squash:与all_squash取反(默认设置);
        • root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置);
        • no_root_squash:与rootsquash取反;
        • anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
        • anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);
      • 其它选项
        • secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
        • insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
        • sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
        • async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
        • wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
        • no_wdelay:若有写操作则立即执行,应与sync配合使用;
        • subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
        • no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;
  2. NFS 文件系统维护指令:/usr/sbin/exportfs可以利用这个指令重新分享 /etc/exports 变更的目录资源、将 NFS Server 分享的目录卸除或重新分享等等

    选项与参数:
    -a :全部挂载(或卸除) /etc/exports 档案内的设定
    -r :重新挂载 /etc/exports 里面的设定,此外,亦同步更新 /etc/exports
         及 /var/lib/nfs/xtab 的内容!
    -u :卸除某一目录
    -v :在 export 的时候,将分享的目录显示到屏幕上!
    
  3. 分享资源的登录文件:/var/lib/nfs/*tab,NFS 服务器的登录文件都放置到此目录里面

  4. 客户端查询服务器分享资源的指令:/usr/sbin/showmount。exportfs 是用在 NFS Server 端,而 showmount 则主要用在 Client 端

NFS Client安装与配置

  1. 查看系统

    $ cat /etc/redhat-release
    CentOS Linux release 7.9.2009 (Core)
    
  2. 安装,客户端不需要启动NFS服务

    $ yum install nfs-utils -y
    # 设置开机启动
    $ systemctl enable rpcbind
    # 启动
    $ systemctl start rpcbind
    # 查看服务端的共享目录
    $ showmount -e 10.100.22.160
    Export list for 10.100.22.160:
    /home/data/nfs 10.100.0.0/24
    # 创建客户端目录
    $ mkdir -p /home/client
    $ chmod 755 /home/client
    # 挂载目录
    $ mount -t nfs 10.100.22.160:/home/data/nfs /home/client
    # 卸载目录
    $ umount /home/client
    # 如果NFS Server宕机,需要强制卸载(umount:/mnt:device is busy)
    $ umount -lf /mnt
    
  3. 如果挂载出现错误,可以在服务端查看日志

    $ cat /var/log/messages | grep mount
    
  4. 测试NFS

    # 在客户端共享目录创建一个文件
    $ cd /home/client && touch a.txt
    # 在服务端
    $ cd /home/data/nfs && touch b.txt
    $ ll
    # 查看NFS的共享状态
    $ showmount -e 10.100.22.160
    Export list for 10.100.22.160:
    /home/data/nfs 10.100.22.0/24
    

客户端自动挂载

  1. 设置自动挂载方法一:缺点是可能偶尔开机挂载不上,除了开机自启动配置,还要对是否挂载进行监控。

    $ chmod +x /etc/rc.local
    $ echo "#mount by oldboy" >> /etc/rc.local
    $ echo "/bin/mount -t nfs nfs 10.100.22.160:/home/data/nfs /home/client" >> /etc/rc.local
    $ tail -2 /etc/rc.local
    
  2. 设置自动挂载方法二:理论上开机启动过程中,fstab会优先于网络被Linux系统加载。网络没启动时执行fstab会导致连不上NFS服务器端,无法实现开机挂载。而且,即使是本地的文件系统,也要注意fstab中最后两列要设置0 0。否则有可能导致无法启动服务器的问题。因此,NFS网络文件系统最好不要放到fstab里实现开机挂载

    $ vim /etc/fstab
    /dev/mapper/centos-root /                       xfs     defaults        0 0
    UUID=39bc8e0d-efbd-4915-ae40-83402394aedc /boot xfs     defaults        0 0
    /dev/mapper/centos-home /home                   xfs     defaults        0 0
    /dev/mapper/centos-swap swap                    swap    defaults        0 0
    # 末尾新增配置
    10.100.22.160:/home/data/nfs  /home/client      nfs     defaults        0 0
    
    $ systemctl daemon-reload
    查看
    $ mount
    ...省略...
    10.100.22.160:/home/data/nfs on /home/client type nfs4 (rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.100.22.161,local_lock=none,addr=10.100.22.160)
    
    # 可以重启客户端,查看是否生效
    $ reboot
    $ df -h |grep /home/client
    10.100.22.160:/home/data/nfs   78G  357M   78G   1% /home/client
    
  3. NFS服务端宕机后给NFS客户端带来的问题,NFS服务器宕机后,在客户端访问挂载点会处于挂掉状态,甚至早期系统执行Ctrl+C都无法退出,CentOS7客户端还可能无法重启,这个问题的解决方法有以下几种

    • cat /proc/mounts |grep nfs找到挂载点,然后执行umount -lf /客户端目录方式卸载即可

    • 在mount挂载时增加soft或者intr,不让客户端持续呼叫NFS服务器。

    • 如果是fstab里实现的挂载即可在第4列defaults后面增加soft或者intr

      $ tail -2 /etc/fstab 
      10.100.22.160:/home/data/nfs  /home/client      nfs     defaults,soft       0 0
      #10.100.22.160:/home/data/nfs  /home/client      nfs     defaults,intr       0 0
      

客户端优化

  1. 查看挂载配置

    # 查看NFS服务器端配置参数的细节
    $ cat /var/lib/nfs/etab
    /home/data/nfs  10.100.22.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,no_root_squash,no_all_squash)
    # 查看客户端mount的挂载参数细节
    $ cat /proc/mounts |grep nfs	
    sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0
    10.100.22.160:/home/data/nfs /home/client nfs4 rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.100.22.161,local_lock=none,addr=10.100.22.160 0 0
    
  2. mount参数说明

    • fg/bg:默认[fg],在客户端执行挂载时,可以选择在前台(fg)执行还是在后台(bg)执行
    • soft/hart:默认[hart]当网络和server出问题时,soft参数会在超时后停止挂载,hard参数会一直挂载直到成功(但可能造成客户端无响应,常配合intr参数使用)
    • intr:当hard挂载资源timeout后,若使用intr参数可在超时后终端挂载,防止NFS锁死
    • resize/wsize:读出和写入的区块大小,影响客户端与服务器段传输数据的缓冲存储量
    • proto=tcp:默认[tcp]传输使用的协议,跨internet建议tcp有较好的纠错能力,内网建议用udp提高性能
  3. 挂载建议

    noatime,nodiratime 减少更新访问时间戳产生的磁盘I/O.本地文件系统挂载时不能加odiratime选项,会报错
    $ mount -t nfs -o noatime,nodiratime,intr,rsize=131072,wsize=131072 \
    10.100.22.160:/home/data/nfs /home/client
    
  4. NFS内核优化

    cat >>/etc/sysctl.conf<<EOF
    net.core.wmem_dafault = 8388608
    net.core.rmem_dafault = 8388608
    net.core.wmem_max = 16777216
    net.core.rmem_max = 16777216
    EOF
    sysctl -p
    
  5. Linux NFS 客户端对于同时发起的NFS请求数量进行了控制,若该参数配置较小,会降低 IO 性能。默认系统为2,最大值为256。可以使用root用户执行以下命令来提高该参数的值,取得较好的性能。

    $ echo "options sunrpc tcp_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf
    $ echo "options sunrpc tcp_max_slot_table_entries=128" >>  /etc/modprobe.d/sunrpc.conf
    $ sysctl -w sunrpc.tcp_slot_table_entries=128
    $ cat /proc/sys/sunrpc/tcp_slot_table_entries
    

标签:10.100,NFS,挂载,nfs,Linux,home,客户端
来源: https://www.cnblogs.com/jannal/p/15732549.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有