嵌入式环境搭建之NFS

2024-05-06 16:14:07

嵌入式环境搭建之NFS

Author:tiger-john
Time:2013-08-04
mail:jibo.tiger@gmail.com
转载请注明出处!


[摘要]:本文介绍NFS相关概念,NFS配置文件以及介绍如何设置NFS服务端和客户端,并检验是否设置成功;并对出现的异常进行分析,同时给出一个嵌入式配置实例。

一. 网络文件系统简介

1.1.What is NFS ?

NFS就是Network FileSystem的缩写,是由Sun公司发展出来的。其目的是让linux 机器之间彼此分享文档。NFS可以让服务器端共享的目录挂载到本地客户机上,对于本地客户机器来说,远程服务器上的目录就好像自己的一部分。

1.2 whatis NFS, In embedded development engineer ‘s eyes?

它的功能是把NFS服务器(即Linux主机)的某个目录挂载到开发板的文件系统上。这样,开发板就可以执行该目录中的可执行程序。这样做的优点在于:不用将程序写入开发板的Flash,减少了对Flash的损害,同时也方便调试

在嵌入式系统开发中主要用于NFS网络根文件系统启动或者网络加载调试应用程序。

1.3  NFS工作原理

NFS是基于客户/服务器模式的。NFS服务器是输出一组文件的计算机,而NFS客户端是访问文件的计算机。客户和服务器端通过远程过程调用通信,当客户主机上的应用程序访问远程文件时,客户主机内核向远程NFS服务器发送一个请求,等待服务器响应,而NFS服务器一直处于等待状态,如果接收到客户请求,就处理请求并将结果返回给客户机。NFS服务器上的目录如果可以被远程用户访问,就称为”导出(export)”;客户主机访问服务器导出目录的过程称为“安装(mount)”,或者称为“挂载”,“导入”等。

特点:

(1)Linux主机之间的共享

(2)开发板和开发主机之间的共享

(3)服务器可以是虚拟机,也可是是独立的Linux服务器

(4)在服务器上建立多个账户,多人共享,节省资源

(5)可以有独立的个人目录,安全可靠。

二.NFS server端的设定

NFS服务器的配置包括四个主要的步骤:

(1)安装NFS软件包

(2)在/etc/exprots文件中配置NFS服务器上要导出的文件系统或目录。

(3)启动NFS服务。

(4)导出/etc/exports中配置的文件系统或目录。

2.1 安装NFS

(1)在ubuntu下安装NFS可以通过如下命令:

#sudo  apt-get  install nfs-kernel-server

(2)NFS的启动和停止是通过/etc/init.d目录中的脚本文件nfs实现的。

(3)在命令行重启NFS的命令为/etc/init.d/nfs  restart

note:

在启动NFS服务器之前,先要启动rpcbind

#/etc/init.d/rpcbind restart

2.2  配置NFS服务器

(1)配置NFS主要涉及配置文件/etc/exports,它用于NFS服务器端,其中列出了NFS服务器中要导出的目录、可以访问这些目录的NFS客户机及其访问权限。

(2) /etc/exports文件的格式如下:

[cpp]view plaincopy

  1. dir_to_export  NFS_client (permissions)  [NFS_client (permissions)…]

实例:

#vim  /etc/exports

[cpp]view plaincopy

  1. /tmp       192.168.100.0/24(ro)  localhost(rw)  *(ro,sync)

  2. [分享目录]  [第一个客户端(权限)] [可用主机名]  [可用通配符]

该实例表示将将/tmp 分别分享给三个不同的主机或网域。

格式中的输出目录和客户端之间,客户端与客户端之间都使用空格分隔,但是客户端和权限参数之间不能有空格。当若权限参数不止一个时,则以逗号(,) 分开。

输出目录:dir_to_export是要导出的文件系统或目录名称,也就是要共享给客户端使用的目录。该目录必须是一个绝对路径。

客户端:NFS_client是可以访问该NFS服务器的客户机名称。客户机的指定非常灵活,可以是单个主机的IP地址或域名,也可以是某个子网或域中主机等。

选项:该设置主要是权限(permissions),这是NFS客户机访问导出目录的访问权限,它的可选值为ro(只读)或rw(读写)。

note:

关于以上参数的详细解释,附件一:exportfs中各元素的详细说明。

2.3exportfs维护NFS服务的输出目录列表

(1)当修改了/etc/exprots文件的内容后,不需要重新启动NFS服务,而直接使用命令exportfs就可以使设置其立即生效。

(2)exportfs命令就是用来维护NFS服务的输出目录列表的,命令格式如下:

exportfs  [options]

-a :全部挂载(或卸载)/etc/exports文件中的所设置的所有目录

-r:重新挂载/etc/exports文件中的设置,并使设置立即生效,而不需要重新启动NFS服务。

-u:卸载某一目录

-v:在export的时候,将分享的目录显示到屏幕上。

(3)当修改了/etc/exports文件中的内容后,在命令执行如下命令使其配置立即生效:

# exportfs  -rv

(4)全部卸载共享目录时,可以使用如下命令:

#exportfs -au

三.NFS客户端的设定

NFS服务器通过/etc/expors共享,并用exportfs发布。目录共享之后,可以用命令shownmount来显示共享目录。

NFS客户端配置需要以下几个步骤:

(1)编译内核时,选择NFS选项。

(2)使用showmount扫描NFS服务器分享的目录有哪些,并了解我们是否可以使用。

(3)在客户端建立预计要挂载的挂载点目录。

(4)利用mount将远程主机直接挂载到相关目录。

(5)查看挂载情况

3.1  NFS客户端的安装(在内核中支持NFS的配置)

要在目标板上运行nfs,必须编译内核,使得其支持NFS

[cpp]view plaincopy

  1. File systems

  2. netwok file systems

  3. <*>nfs file system support

  4. <*>provide nfsv3 client support

  5. <*>nfs server support

3.2 showmount查看NFS服务器信息

在客户端,要查看NFS服务器上有哪些共享目录,可以使用showmount命令。

(1)showmount的命令格式如下:

showmount  [-ade] [hostname]

-a:列出所有远程加载

-d:列出被远程加载的目录

-e:列出所有共享的文件系统

(2)例如:如果NFS服务器的IP地址为192.168.1.101,可以使用如下命令查看:

#showmount  -e192.168.1.101

3.3连接NFS服务器(mount)

在利用showmount命令得知远程NFS服务器上的共享资源后,接下来就是进行实际的挂载操作。

(1)挂载NFS服务器上的输出目录的命令格式如下:

[cpp]view plaincopy

  1. mount -t nfs NFS_server_name :exported-directory  mount_point

-t nfs:指定文件系统类型。

NFS_server_name:是NFS服务器名称;

exported_directory:是要共享的目录;

mount_point:是在本机的安装位置。

(2)实例:

例如NFS客户端把远程文件系统tiger上导出的/share1目录安装在自己的文件系统/mnt/nfs目录下,以实现共享。

#mount  tiger:/share1  /mnt/nfs

(3)将共享目录挂接进来后,只要键入/mnt/nfs就等于进入了远程主机tiger上的/share1目录中了。

3.4 检查是否加载成功

(1)df可以显示目前系统的盘符,包括挂载的NFS目录。

(2)另外也可以直接查看挂载之后的目录,即可以知道挂载是否成功。

3.5 NFS 文件系统的卸载

使用umount命令

umount /home/think/test

卸载前需要退出当前挂载的目录,否则提示:

the device is busy

3.6 NFS开机自动挂载

开机就挂载的挂载点与相关参数是写入 /etc/fstab 中的,那 NFS 能不能写入 /etc/fstab 当中呢?不可以!!!分析一下开机的流程,我们可以发现网络的启动是在本机挂载之后,因此当你利用 /etc/fstab 尝试挂载 NFS 时,系统由于尚未启动网络,所以肯定是无法挂载成功的啦!不过,我们可以将其就写入到 /etc/rc.d/rc.local 即可!

#vim /etc/rc.d/rc.local

开机就挂载的挂载点与相关参数是写入 /etc/fstab 中的,那 NFS 能不能写入 /etc/fstab 当中呢?不可以!!!分析一下开机的流程,我们可以发现网络的启动是在本机挂载之后,因此当你利用 /etc/fstab 尝试挂载 NFS 时,系统由于尚未启动网络,所以肯定是无法挂载成功的啦!不过,我们可以将其就写入到 /etc/rc.d/rc.local 即可!

#vim /etc/rc.d/rc.local

[cpp]view plaincopy

  1. mout  -t  nfs  192.168.1.100:/home/think//EmbeddedWork  /mnt -o nolock

四. Execption

4.1 开发板和主机的网络不通

连接后若网络端了,则出现

nfs:server 192.168.0.12 not responding ,still trying

4.2连接超时

portmap: server localhost not responding, timed out

解决办法:

#mount -t nfs -o nolock node1:/public /public

即增加-o nolock参数,原因:

Unfsd doesn't support NLMlocking, and it's causing the lockd daemon to be started (which again requiresthe portmapper to be installed。

4.3 访问受限

access denied by server while mounting

可能的原因就是防火墙的问题或者是在配置文件中设置的那个IP段范围设置错了或者设置小了,如果修改之后还没有好的话,那就直接使用一个“*”代替之前的 那个整个IP号,虽然不是很安全,但是一定能解决办法。

4.5 服务器或客户端某些服务未启动

1mount: xxxxx failed: System Error:Connection refused

解决方法:

如果使用ping却发现网路与服务器都是好的,那么就是rpcbind没有开启。启动方法:

# /etc/init.d/rpcbind restart.

2mout: xxxxx  failed:RPCError:Program not  registered.

重新启动了rpcbind服务后,没有重启启动NFS服务。

解决方法:

# /etc/init.d/rpcbind restart.

#/etc/init.d/nfs  restart.

五.实例

5.1.嵌入式系统的典型设置

(1)嵌入式系统服务器端设定

由于嵌入式系统都是自己的电脑跟开发板相连来开发,对访问IP及权限等都没有太大的安全考虑,所以设置较为简单,一般使用如下的配置:

[cpp]view plaincopy

  1. /home/think/EmbeddedWork  *(rw,sync,no_root_squash)

表示任意客户端都可以挂载服务器/home/think/EmbeddedWork目录。这样就不会因为IP设置问题使得开发板不能访问主机,具备可读写的权限,对于开发板上登陆的root用户,其拥有和主机root一样的权限。

(2)客户端(开发板)使用如下mount命令进行挂载

#mount -t nfs 192.168.1.100:/home/think//EmbeddedWork  /mnt -o nolock

附件一:exportfs中各元素的详细说明

1.客户端常用的指定方式 :

[cpp]view plaincopy

  1. 客户端                               说明

  2. 192.168.16.20                          指定IP地址的主机

  3. 192.168.16.0/24(或192.168.16.*)       指定子网中的所有主机

  4. pc1.gdvcp.net                          指定域名的主机

  5. *.gdvcp.net                            指定域中的所有主机

  6. *(或缺省)                          所有主机

2.选项用来设置输出目录的访问权限,用户映射等,在/etc/exports文件中选项,比较多一般可以分成3类

(1)访问权限选项:

用于控制输出目录访问权限的选项

[cpp]view plaincopy

  1. 访问权限选项        说明

  2. ro               设置输出目录只读

  3. rw               设置输出目录可读写

(2)用户映射选项:

[cpp]view plaincopy

  1. 用户映射选项     说明

  2. all_squash           不论登入 NFS 的使用者身份为何,他的身份都会被压缩成为匿名使用者,通常也就是nobody

  3. no_all_squash        不将远程访问的所有普通用户及所属用户组都映射为匿名用户或用户组(默认设置)

  4. root_squash          将root用户及所属用户组都映射为匿名用户或用户组(默认设置)

  5. no_root_squash   不将root用户及所属用户组都映射为匿名用户或用户组

  6. anonuid=xxx         将远程访问的所有用户都映射为匿名用户,并指定该匿名用户账户为本地用户账户(UID=xxx)

  7. anongid=xxx         将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx)

(3)常用的其他选项

其他选项比较多,可用于对输出目录进行更全面的控制

[cpp]view plaincopy

  1. 其他选项          说明

  2. secure                    限制客户端只能从小于1024的TCP/IP端口连接NFS服务器(默认设置)

  3. insecure                 允许客户端从大于1024的TCP/IP端口连接NFS服务器

  4. sync                      将数据同步写入内存缓冲区与磁盘中,虽然这样做效率较低,但可以保证数据的一致性

  5. async                   将数据先保存在内存缓冲区中,必要时才写入磁盘。

  6. wdelay                   检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可提高效率(默认设置)

  7. no_wdelay                若有写操作则立即执行,应与sync配合使用

  8. subtree_check             若输出目录是一个子目录,则NFS服务器将检查其父目录的权限(默认设置)

转载于:https://blog.51cto.com/tigerjibo/1276188

嵌入式环境搭建之NFS相关推荐

  1. Linux嵌入式环境搭建

    Linux嵌入式环境搭建 ​ 自从在记不清的某一年的时候,就有幸在一位老师(这位老师当然很厉害的咯)的手中见过一次树莓派,当时看到了树莓派的可玩性.一直想着去玩玩Linux嵌入这方面的滴,但一直没有机 ...

  2. 嵌入式环境搭建之ssh

    嵌入式环境搭建之SSH Author:tiger-john Time:2013-6-20 mail:jibo.tiger@gmail.com Blog:http://blog.csdn.net/tig ...

  3. 嵌入式软件开发培训笔记——ARM架构Linux系统下交叉编译环境搭建、NFS、TFTP服务配置及Nandflash的读写

    bootloader原理和开发-->kernel构建-->文件系统/根文件系统(filesystem/rootfs) APP 一.配置交叉编译环境(可参考嵌入式Linux移植与驱动开发co ...

  4. NFS环境搭建测试 保证挂载重启后不丢失

    今天学习了NFS环境搭建, NFS需要的软件包 1.nfs-utils 2.portmap 3.rpcbind 准备环境,虚拟机2台.分别将hostname改成 NFS_server ip:192.1 ...

  5. 嵌入式linux编译环境搭建,嵌入式Linux开发环境搭建

    整理下嵌入式Linux开发环境搭建过程笔记. 一.制作u-boot.bin文件: tar xjf u-boot-1.1.6.tar.bz2 cd u-boot-1.1.6 patch -p1 < ...

  6. 嵌入式linux开发环境搭建(VMware16.0.0+Ubuntu16.04.3_X64)

    目录 一.安装VMware 1.VMware介绍 2.安装VMware16.0.0 二.安装ubuntu16.04.3 LTS 1.Ubuntu介绍 2.下载安装包iso 3.安装 四.新安装Ubun ...

  7. 天嵌E9卡片i.mx6q-Linux12.04搭建nfs环境以及从nfs启动开发板

    最近导师丢了一个图像处理的项目,要用嵌入式来实现.于是买了一块天嵌近期推出的E9卡片i.mx6q板子,这款板子算是功能比较全面,基本上要用的驱动都给实现了.刚开始接触嵌入式,之前也没用过Linux系统 ...

  8. 嵌入式Linux开发环境搭建(二)

    资料来自朱有鹏老师的<嵌入式开发环境搭建> 5.配置tftp服务器 第 1 步:安装 tftp 安装 tftp 所需的软件.首先需要安装 tftp-hpa,tftpd-hpa,前者是客户端 ...

  9. 嵌入式LINUX搭建arm环境,手把手教你嵌入式ARM开发环境搭建

    原标题:手把手教你嵌入式ARM开发环境搭建 1. 安装,配置,启动FTP服务 · 安装FTP: sudo apt-get install vsftpd · 修改vsftpd的配置文件/etc/vsft ...

最新文章

  1. 网络营销推广介绍网站该如何布置关键词?
  2. 《HBase企业应用开发实战》—— 2.5 停止HBase集群
  3. Faster R-CNN
  4. “数据驱动”时代来临,阿里云数据中台如何赋能金融业?(附重磅报告下载)
  5. Pattern Discovery and Anomaly Detection via Knowledge Graph-学习笔记
  6. 阿里开源支持10万亿模型的自研分布式训练框架EPL(EasyParallelLibrary)
  7. 怎样看懂Oracle的执行计划
  8. 记录一次奇葩的sleep(15)引起的Too many connections
  9. mysql创建外键失败_mysql创建外键错误
  10. java 生成条形码_JAVA 生成扫描条形码
  11. Unity优化——模型合并
  12. 智力游戏教案c语言代码,幼儿园智力游戏教案有哪些
  13. 【转载!!】一个用消息队列 的人,不知道为啥用 MQ,这就有点尴尬
  14. 数学之美读书感悟01
  15. docker之daemon.json文件
  16. 易基因|DNA甲基化和转录组联合揭示代际遗传对高龄产妇的影响 | 表观遗传研究
  17. 科研入门——文献阅读
  18. element组件---其他组件
  19. YOLOv7使用云GPU训练自己的数据集
  20. bs架构的系统需要服务器吗,BS架构(bs架构开发用什么语言)

热门文章

  1. PHP实现JS颜文字编码解码过程-aaencode+aadecode
  2. iptables的基本概念及数据报文在iptables中的流传过程
  3. HDU 6241 Color a Tree
  4. 简单的横向ListView实现(version 4.0)
  5. ScrollView嵌套ListView冲突问题的最优解决方式
  6. OGG_GoldenGate日常维护(案例)
  7. Hibernate怎么提升数据库查询的性能 (1)
  8. windows server 2008配置之AD域服务器 1
  9. iOS逆向之自动化重签名
  10. 基于SpringBoot的后台管理系统(异常、注解、node、page)(二)