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
tcp portmapper
udp portmapper
udp nfs
udp nfs
udp nfs
tcp nfs
tcp nfs
tcp nfs
udp status
udp nlockmgr
udp nlockmgr
udp nlockmgr
tcp status
tcp nlockmgr
tcp nlockmgr
tcp nlockmgr
udp mountd
tcp mountd
udp mountd
tcp mountd
udp mountd
tcp 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是重启信息的接收者。

嵌入式Linux之NFS配置的更多相关文章

  1. 嵌入式Linux内时区配置

    一般情况下,嵌入式Linux系统的时区,也是国际事件. 但是我们是属于东八区的时区,所以有一些时候要更改一下 TZ 变量可以配置时区,如下

  2. Linux:NFS配置

    NFS配置 1.创建分享的文件:touch /var/www/html/aa.txt2.查看是否安装NFS:rpm -qa|grep nfs3.查看IP地址:ifconfig4.配置NFS:vi /e ...

  3. Linux的NFS配置

    1.NFS简介 (1)什么是NFS? 1)NFS是Net File System的简写,即网络文件系统.NFS是由SUN公司开发,并于1984年推出的一个RPC(远程过程调用)服务系统,它使我们能够达 ...

  4. 嵌入式Linux之gdb配置和使用

    背景: ARM Cortext-A53核+Linux 4.1.12,内核空间64位,用户态32位,gdb版本7.10.1 GDB编译: 1)手动下载gdb-7.10.1.tar.gz源码编译 ./co ...

  5. 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)

    深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...

  6. 嵌入式Linux系统挂载NFS系统

    在建立交叉编译环境的时候,经常需要网嵌入式Linux环境中拷贝文件,nfs网络共享文件系统是一种很方便的方式. 在嵌入式Linux挂载nfs系统,需要用到如下命令: mount -t nfs -o n ...

  7. 嵌入式Linux开发环境搭建,问题ping、nfs的解决

    一. 嵌入式软件层次 1) Bootloader->引导加载程序 整个嵌入式系统的加载启动任务完全交给Bootloader完成,它的主要任务是将内核映象从硬盘读到RAM中,然后跳转到内核入口启动 ...

  8. 基于mini2440嵌入式Linux根文件系统制作(Initramfs和nfs两种跟文件系统)

    嵌入式系统由三部分构成: 1.bootoader---bootparameters---2.kernel 3.Root-filesysytem 一个内核可以挂载多个文件系统,但是有一个根文件系统所以叫 ...

  9. Linux下NFS的搭建与配置

    一.简介 1.NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布. 2.NFS可实现Linux系统之间的文件 ...

随机推荐

  1. 完整的JavaScript包括三部分、script标签、JavaScript的基本语法以及变量和字面量的关系

    完整的JavaScript包括三大部分: -ECMAScript   JavaScript的开发规范:提供核心语言功能 -DOM   document object model   文档对象模型:提供 ...

  2. OneDrive高速下载链接分享

    目录 1. 下载帮助 2. 本文地址 3. 资源链接 4. 打赏&支持 5. 关于&联系我 1. 下载帮助 OneDrive下载教程,建议不了解的先看下: https://www.cn ...

  3. 如何正确训练一个 SVM + HOG 行人检测器

    这几个月一直在忙着做大论文,一个基于 SVM 的新的目标检测算法.为了做性能对比,我必须训练一个经典的 Dalal05 提出的行人检测器,我原以为这个任务很简单,但是我错了. 为了训练出一个性能达标的 ...

  4. LeNet-5模型的keras实现

    import keras from keras.models import Sequential from keras.layers import Input,Dense,Activation,Con ...

  5. [易学易懂系列|rustlang语言|零基础|快速入门|(6)|变量绑定]

    [易学易懂系列|rustlang语言|零基础|快速入门|(6)] 有意思的基础知识 变量绑定 我们现在回过头来看看,一些基础知识. 因为理解了前面的重要概念:所有权,借用,生命周期. 我们现在看基础知 ...

  6. python修炼之路---面向对象

    面向对象编程 面向对象编程:使用类和对象实现一类功能. 类与对象 类:类就是一个模板,模板里可以包含多个函数,函数里实现一些功能. 对象:是根据模板创建的实例,通过实例对象可以执行类中的函数. 面向对 ...

  7. 【30分钟学完】canvas动画|游戏基础(extra1-1):美图我也行

    前言 本文是接续系列教程的extra1,主要是介绍颜色系统在canvas中的应用. 本来是与extra1一起成文的,因为segmentfault莫名其妙的字数限制bug只能分割放送了. canvas操 ...

  8. DevExpress Winforms Controls:安装使用系统要求文档

    [DevExpress WinForms v19.1下载] 本文档包含了有关安装和使用DevExpress WinForms控件的系统要求信息. .NET Framework 下图展示了支持的.NET ...

  9. Markdown小结

    Markdown标题 以# (#号加空格)开头的行会被视为标题,根据#的数量分为一到六级标题 # 一级标题 ## 二级标题 … ###### 六级标题 Markdown 水平线 一行由三个以上连续的减 ...

  10. LAMP系统优化

    LAMP系统优化 2011-03-18 10:23 度哥 互联网 字号:T | T LAMP(Linux+Apache+Mysql+Perl/PHP/Python)常用来搭建动态网站或者服务器的开源软 ...