• 嵌入式Linux之NFS配置


    NFS(Network File System)

    1、RPC和rpcbind

      RPC(Remote Procedure Call)即远程过程调用,是分布式应用的基础,即允许计算机远程调用网络上其他计算机的程序。RPC通常由提供RPC服务的服务端和使用RPC服务端的客户端组成。

      rpcbind(亦称rpc.portmap, port mapper, portmap)是一个运行在网络节点(提供其他RPC服务)上的RPC服务。rpcbind是RPC服务的管理者。当一个RPC服务端开启时,它会告诉rpcbind它提供的RPC服务的端口号、协议类型(TCP/UDP)、过程调用服务号和版本号键值对。当RPC客户端请求指定过程调用号和版本号的RPC服务时,首先必须通过rpcbind获取端口号和协议类型。rpcbind服务必须在其他RPC服务端之前开启。

      rpcbind协议的前身是portmap协议,从第三版开始更名为rpcbind。rpcbind协议占用TCP/UDP的111号端口。使用rpcinfo -p命令可以查询当前系统中提供的RPC服务的服务名称、端口号、协议类型、过程调用号和版本号等信息。

    $rpcinfo -p
      program vers proto   port
       100000    2   tcp    111  portmapper
       100000    2   udp    111  portmapper
       100003    2   udp   2049  nfs
       100003    3   udp   2049  nfs
       100003    4   udp   2049  nfs
       100003    2   tcp   2049  nfs
       100003    3   tcp   2049  nfs
       100003    4   tcp   2049  nfs
       100024    1   udp  32770  status
       100021    1   udp  32770  nlockmgr
       100021    3   udp  32770  nlockmgr
       100021    4   udp  32770  nlockmgr
       100024    1   tcp  32769  status
       100021    1   tcp  32769  nlockmgr
       100021    3   tcp  32769  nlockmgr
       100021    4   tcp  32769  nlockmgr
       100005    1   udp    644  mountd
       100005    1   tcp    645  mountd
       100005    2   udp    644  mountd
       100005    2   tcp    645  mountd
       100005    3   udp    644  mountd
       100005    3   tcp    645  mountd

    2、NFS介绍

      NFS(Network File System)是Sun公司开发的分布式文件系统,由提供NFS服务的NFS Server端和使用NFS服务的NFS Client端组成。

      NFS服务本质上是一个RPC服务,因此它必须依赖rpcbind服务“广播”自己的过程调用号、版本号、端口号、协议类型等信息。

      通过实现NFS服务,NFS Client端可以在本地文件系统的NFS挂载点对NFS Server端的文件系统进行直接读写操作。

      一般情况下,NFS服务通过2049号端口进行数据传输,用户也可以指定端口号。

      在Linux系统中部署NFS服务需要系统的支持,mount程序版本v2.10及以上版本,且需要Linuxn内核支持NFS文件系统。
      一般情况下,通过nfs-utils组件实现NFS服务端和客户端,它会在后台运行5个守护进程:

     

    3、NFS配置

    3.1、Linux内核支持NFS文件系统
    首先必须配置Linux内核支持NFS文件系统,即使能CONFIG_EXPORTFS和CONFIG_NFS_FS配置选项

     
    3.2、根文件系统集成nfs-utils和rpcbind服务组件
    通过buildroot搭建根文件系统时,在buildroot配置选项中选中nfs-utils和rpcbind
     
     
    3.3、mount命令支持NFS文件系统
    通过busybox集成mount命令时,使能busybox配置选项的FEATURE_MOUNT_NFS选项
    3.4、NFS Server配置
    首先配置/etc/exports文件,该配置文件提供给exportfs命令使用,主要是用来配置NFS共享目录及其属性。
    /mnt/share 192.168.100.2(insecure,rw,sync,fsid=0,no_subtree_check,no_root_squash)
    其中/mnt/share为共享目录路径,192.168.100.2为NFS Client端的IP地址,其他的为配置参数。
    其次,在系统启动脚本中执行以下命令:
                exportfs –arv    //根据/etc/exports配置文件更新共享目录列表
                rpc.mountd -p 52400  //指定rpc服务数据报文端口号
                rpc.statd --no-notify  //该守护进程用于监听其他主机的重启消息,并管理本地主机重启时需要通知的主机列表。
                sm-notify     //在本地系统重启时通知NFS对端
     
    3.5、NFS Client配置
     在系统启动脚本中执行以下命令挂载NFS Server共享目录
            sm-notify
            rpc.statd
            mount -t nfs 192.168.100.1:/mnt/share /mnt/share -o nfsvers=3 –v
    其中,192.168.100.1:/mnt/nor为NFS Server的IP和共享目录路径,/mnt/share为挂载点。
     
     
    4、NFS配置文件和常用命令
     
    4.1、NFS共享目录配置文件
     
    /etc/exports配置文件的格式为:
     [共享的目录] [主机名或IP(参数,参数)]
     其中参数是可选的,当不指定参数时,nfs将使用默认选项。默认的共享选项是sync,ro,root_squash,no_delay。
     当主机名或IP地址为空时,则代表共享给任意客户机提供服务。
     当将同一目录共享给多个客户机,但对每个客户机提供的权限不同时,可以这样:
     [共享的目录] [主机名1或IP1(参数1,参数2)] [主机名2或IP2(参数3,参数4)]
     
    下面是一些NFS共享的常用参数:
    ro  只读访问
    rw  读写访问
    sync  同步写入资料到内存与硬盘中
    async  资料会先暂存于内存中,而非直接写入硬盘
    secure  NFS通过1024以下的安全TCP/IP端口发送
    insecure  NFS通过1024以上的端口发送
    wdelay  如果多个用户要写入NFS目录,则归组写入(默认)
    no_wdelay  如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
    hide  在NFS共享目录中不共享其子目录
    no_hide  共享NFS目录的子目录
    subtree_check  如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
    no_subtree_check  和上面相对,不检查父目录权限
    all_squash  共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
    no_all_squash  保留共享文件的UID和GID(默认)
    root_squash  root用户的所有请求映射成如anonymous用户一样的权限(默认)
    no_root_squash  root用户具有根目录的完全管理访问权限
    anonuid=xxx  指定NFS服务器/etc/passwd文件中匿名用户的UID
    anongid=xxx  指定NFS服务器/etc/passwd文件中匿名用户的GID
     
    4.2、exportfs
    当/etc/exports配置文件修改后,通过以下命令可以不重启NFS服务就刷新NFS共享目录列表:
    exportfs -arv
     
    4.3、showmount
    nfs-utils组件提供showmount命令,NFS客户端可以利用showmount命令测试是否能连上NFS服务端。
    命令格式:showmount -e [ hostname | ip ]
     
    4.4、rpcinfo
    查看当前主机RPC状态:
    rpcinfo -p localhost
     
    4.5、nfsstat
    查看NFS状态
     
    4.6、netstat
    查看端口占用情况
     
    4.7、sm-notify
    发送系统重启通知给NFS对端,使用网络状态监控器NSM(Network Status Monitor)协议来通知NFS对端。NFS服务进程由两个独立的用户空间程序组成:
    rpc.statd 该守护进程用于监听其他主机的重启消息,并管理本地主机重启时需要通知的主机列表;
    sm-notify 辅助程序,用于在本地系统重启时通知NFS对端。
    即sm-notify是重启信息的通知者,rpc.statd是重启信息的接收者。
  • 相关阅读:
    php字符串相加
    elementUI的input输入一个字符就失去焦点问题
    js鸡尾酒排序算法
    js快速排序算法
    js冒泡排序算法改进
    js实现队列
    EXIF.js 读取图片的方向
    new Image().src资源重复请求问题
    canvas绘制圆图输出图片格式
    去掉"You are running Vue in development mode"提示
  • 原文地址:https://www.cnblogs.com/justin-y-lin/p/10836721.html
Copyright © 2020-2023  润新知