更新记录

version status description date author
V1.0 C Create Document 2019.1.11 John Wan

status:

C―― Create,

A—— Add,

M—— Modify,

D—— Delete。

注:内核版本 3.0.15,系统版本 Ubuntu 12.04.2 LTS

1、nfs介绍

1.1 nfs概念

  NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的不同的机器、不同的操作系统共享彼此的文件,共享资源。在NFS的应用中,可将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,这样本地NFS的客户端应用可以透明地读写位于远端NFS服务器上共享的文件,就像访问本地文件一样。

  • 好处:

    以下是NFS最显而易见的好处:

  1. 节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用。
  2. 用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。
  3. 一些存储设备如软驱、CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。
  • 组成:

    NFS体系至少有两个主要部分:一台NFS服务器和若干台客户机。

    客户机通过网络远程访问存放在NFS服务器上的数据。

    在NFS服务器正式启用前,需要根据实际环境和需求,配置一些NFS参数。

1.2 nfs工作原理

  NFS服务器的挂载结构图:

  如上图示:

  在NFS服务器设置好一个共享目录/home/public,其他有权访问NFS服务器的NFS客户端就可将该目录挂载到自己文件系统的某个挂载点,这个挂载点可以自己定义,如上图客户端A与客户端B挂载的目录就不相同。挂载好后客户端可在本地的挂载点看到服务端/home/public的所有数据,读、写、执行操作具体看服务器分配的权限。

  可通过查看磁盘信息命令:“df –h”,查看挂载情况。

1.3 nfs通讯过程

图2:nfs通讯过程

  NFS是通过网络来进行服务器端和客户端之间的数据传输,最初是由UDP协议实现的,主要用于局域网(LAN),丢包重传的概率很小。但是随着发展,NFS已经不只使用在局域网中,更广泛地使用在广域网(WAN)中,这种情况下,主要使用的协议为TCP,TCP可以使得文件的操作更快。

注:在迅为iTop4412的教程中,使用的NFS与参考资料中不相同,目前只是记录学迅为的过程。

2、搭建和测试 NFS 服务器

2.1 搭建NFS服务器

2.1.1 下载并安装NFS服务器

  在确保联网的情况下,下载并安装 nfs-kernel-server

apt-get install nfs-kernel-server

2.1.2 修改NFS参数

  在 /etc/exports 文件最后一行添加 /home/work/ *(rw,sync,no_root_squash),各参数含义:

/home/work 要共享的目录
* 代表允许所有的网络段访问
rw 可读写权限
sync 资料同步写入内存和硬盘
no_root_squash: 是Ubuntu nfs 客户端分享目录使用者的权限,如果客户端使用的是root 用户,那么对于该共享目录而言,该客户端就具有root 权限;

其它参数:

ro:只读访问

async :nfs 在写入数据前可以相应请求

secure: nfs 通过以下的安全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

2.1.3 重启portmap服务

$service portmap restart 或者 $/etc/init.d/portmap restart

2.1.4 重启 nfs 服务

$service nfs-kernel-server restart 或者 $/etc/init.d/nfs-kernel-server restart

2.1.5 portmap与nfs服务启动、停止、查看

  启动NFS服务器,需要启动portmap和nfs两个服务,并且portmap一定要先于nfs启动;

  停止NFS服务器,先停止NFS服务,再停止portmap服务(系统中无其他服务需要使用portmap时)。

启动:
$service portmap start 或者 $/etc/init.d/portmap start
$service nfs-kernel-server start 或者 $/etc/init.d/nfs-kernel-server start 查看:
$service portmap status
$service nfs-kernel-server status 停止:
$service portmap stop
$service nfs-kernel-server stop

2.1.6 portmap与nfs服务自动启动

  为了下次在重新启动系统时,NFS服务能够自动运行,可以使用checkconfig命令来进行设置。

  首先检查NFS和portmap服务启动时的运行等级,执行命令:

$chkconfig --list portmap
结果:portmap 0:关闭 1:关闭 2:关闭 3:启动 4:启动 5:启动 6:关闭 $chkconfig --list nfs
结果:nfs 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭

  即:portmap启动的运行等级为3,4,5,而nfs在任何运行等级中都不会执行。为了让nfs在系统运行级别为3,4,5时也能自动运行,可使用下面的命令进行设置:

$chkconfig --level 345 nfs on

2.2 测试NFS服务器

  前面nfs服务已经配置完成,设置了 /home/minilinux 为共享目录。

  挂载命令:"mount -t nfs localhost:/home/minilinux /mnt"localhost指明本机。

  卸载命令:"umount /home/minilinux /mnt"

  查看:"df" 或 "df -h"

文件目录结构:

root@ubuntu:/# ls /home
minilinux topeet
root@ubuntu:/# ls /mnt
hgfs
root@ubuntu:/# ls /home/minilinux/
busybox-1.22.1 system system.img
root@ubuntu:/# ls /home/minilinux/system
bin dev etc lib linuxrc mnt proc sbin sys tmp usr var

2.2.1 将 /home/minilinux 挂载到 /mnt 目录下

root@ubuntu:/# mount -t nfs localhost:/home/minilinux/ /mnt
root@ubuntu:/# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 60894268 10281032 47519988 18% /
udev 1876528 4 1876524 1% /dev
tmpfs 754320 812 753508 1% /run
none 5120 0 5120 0% /run/lock
none 1885796 200 1885596 1% /run/shm
localhost:/home/minilinux/ 60894720 10281472 47520256 18% /mnt
root@ubuntu:/# ls /mnt
busybox-1.22.1 system system.img root@ubuntu:/# cd /mnt
root@ubuntu:/mnt# ls
busybox-1.22.1 system system.img
root@ubuntu:/mnt# mkdir helloword
root@ubuntu:/mnt# ls
busybox-1.22.1 helloword system system.img
root@ubuntu:/mnt# ls /home/minilinux/
busybox-1.22.1 helloword system system.img

  从上面可看到挂载成功之后,在 /mnt 可查看和操作 /home/minilinux中的文件。

2.2.2 将 /home 挂载到 /mnt 目录下

root@ubuntu:/# mount -t nfs localhost:/home /mnt
root@ubuntu:/# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 60894268 10281036 47519984 18% /
udev 1876528 4 1876524 1% /dev
tmpfs 754320 812 753508 1% /run
none 5120 0 5120 0% /run/lock
none 1885796 200 1885596 1% /run/shm
localhost:/home 60894720 10281472 47520256 18% /mnt
root@ubuntu:/# ls /mnt
minilinux

  从上面可看到挂载成功之后,如果挂载的文件目录层级比指定的共享目录层级高,那么只能操作指定的共享目录。

2.2.3 将 /home/minilinux/system 挂载到 /mnt 目录下

root@ubuntu:/# mount -t nfs localhost:/home/minilinux/system /mnt
root@ubuntu:/# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 60894268 10281036 47519984 18% /
udev 1876528 4 1876524 1% /dev
tmpfs 754320 812 753508 1% /run
none 5120 0 5120 0% /run/lock
none 1885796 200 1885596 1% /run/shm
localhost:/home/minilinux/system 60894720 10281472 47520256 18% /mnt
root@ubuntu:/# ls /mnt
bin dev etc lib linuxrc mnt proc sbin sys tmp usr var

  从上面可看到挂载成功之后,如果挂载的文件目录层级比指定的共享目录层级低,那么只能操作挂载的文件目录。

3、在线调试:NFS共享目录

  通过 NFS 服务,可以实现在线调试文件系统或应用程序,开发板可直接访问PC上的文件,而不用烧写到开发板的额MMC中再执行。极大的提高了调试效率。

  前面已经了解了如何在搭建NFS服务器,那么接下来需要配置好一个开启了nfs服务并能通过网络访问NFS服务器的内核,并将其编译烧录到开发板中,这样就能够在开发板上通过NFS服务直接访问PC上的文件。

3.1 配置内核

3.1.1 设备内核参数

  将迅为的内核源码(iTop4412_Kernel_3.0_20170719.tar.gz)拷贝到Ubuntu中,并解压。

  解压命令:"tar -xzvf 文件名"

  在解压的文件中执行:"cp config_for_linux_scp_elite .config",根据买的板子型号进行选择,我的是精英板SCP封装。

  执行:"make menuconfig" 命令,进行配置。

  1. Networking support -->

    ​ Networking options ---> "

    ​ [*] IP: kernel level autoconfiguration

   IP: kernel level autoconfiguration:内核启动时自动配置IP地址、路由表等,需要从网络启动的无盘工作站需要这个,普通用户不需要。

  1. File systems --->

​ [*] Network File Systems --->

​ <*> NFS client support

​ [*] NFS client support for NFS version 3

​ [*] NFS client support for the NFSv3 ACL protocol extension

​ [*] NFS client support for NFS version 4

​ [*] NFS client support for NFSv4.1 (EXPERIMENTAL)

​ [*] Root file system on NFS

   开启内核中NFS相关服务。

  1. 编译内核:执行"make zImage",生成的镜像文件在 "./arch/arm/boot" 中。

3.1.2 烧写内核

  参考烧写内核章节

3.2 挂载 nfs 目录

  首先查看板子的IP,需保证板子的IP与PC处于同一网段。

  IP查看:"ifconfig",IP改写:"vi /etc/eth0-setting"。修改之后要重新确认是否已经改过来,如果未改,重启网卡或重启开发板。

  挂载目录:"mount -t nfs -o nolock 192.168.1.103:/home/minilinux/system /mnt"

mount -t nfs -o nolock 192.168.1.103:/home/minilinux/system /mnt

1.将NFS服务器的共享文件(192.168.1.103:/home/minilinux/system)挂载到 /mnt 上。

2."-o nolock" 参数:
nfs mount 默认选项包括文件锁,依赖于portmap提供的动态端口分配功能。
解决方法:kill 文件锁(lockd)或者 mount -o nolock [root@FORLINX6410]# mount -t nfs 192.168.0.1:/home/hellolinux/rootfs /mnt/nfs
svc: failed to register lockdv1 RPC service (errno 111).
mount: mounting 192.168.0.1:/home/hellolinux/rootfs on /mnt/nfs failed: Connection refused

  查看挂载情况:"df"

  至此,开发板可以直接访问PC的文件,那么之后在调试时,只要将编译好的文件放入共享的目录中,在开发板上就能够直接进行执行或加载,无需再执行下载到开发板上的操作了。

  以上是手动挂载,如何实现自动挂载呢?

3.3 内核启动自动挂载nfs目录

  通过修改 /etc/init.d/rcS 文件,使得内核启动时,自动运行我们的命令。

  打开开发板的 /etc/init.d/rcS 文件,在文末添加

ifconfig eth0 192.168.1.230 up
mount -t nfs -o nolock 192.168.1.103:/home/minilinux/system /mnt
  1. 第一句是使开发板的IP固定,而不用每次都去ifconfig
  2. 第二句,也就是前面手动挂载的命令。放到该文件中,内核启动时,自动运行。

注意:可能出现在开发板上手动mount可以,但自动加载不行的情况,那么在添加mount命令之前添加了 "sleep 5" 这条命令,可能是系统启动时,有些网络服务还未稳定。

参考:

  1. TCP/IP协议学习之六(RPC原理以及NFS协议)
  2. NFS笔记(一)NFS服务器工作原理及详细配置
  3. 迅为iTop4412精英板—linux系统编程—视频10、11
  4. 迅为独立文档和程序源码汇总—关于nfs那几篇文档
  5. 关于在开发板中实现NFS自动挂载的问题

nfs服务器的搭建和使用的更多相关文章

  1. 自学linux——21. NFS服务器的搭建

    NFS服务器的搭建 1.NFS的认识 NFS(Network File System即网络文件系统)服务最大的功能就是可以透过网络,让不同的机器.不同的操作系统.可以彼此分享文件,可以将远程 Linu ...

  2. 4、nfs服务器的搭建

    4.1.nfs服务介绍: samba服务器一般互联网企业不会使用 nfs服务的端口是不固定的,需要先启动rpc服务对nfs服务端口进行注册 4.2.安装nfs: rpm -qa nfs-utils r ...

  3. 4412开发板学习笔记-NFS服务器的搭建

    转自iTOP-4412讨论群: http://www.topeetboard.com 先来介绍一下NFS: NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件 ...

  4. Liunx下NFS服务器的搭建与配置

    一.NFS简介 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NF ...

  5. Linux下NFS服务器的搭建与配置

    一.NFS服务简介 NFS 就是 Network FileSystem 的缩写,最早之前是由sun 这家公司所发展出来的. 它最大的功能就是可以透过网络,让不同的机器.不同的操作系统.可以彼此分享个别 ...

  6. Linux下NFS服务器的搭建与配置(转载)

    一.NFS服务简介 NFS 就是 Network FileSystem 的缩写,最早之前是由sun 这家公司所发展出来的. 它最大的功能就是可以透过网络,让不同的机器.不同的操作系统.可以彼此分享个别 ...

  7. Linux下NFS服务器的搭建与配置(转)

    一.NFS服务简介 NFS 就是 Network FileSystem 的缩写,最早之前是由sun 这家公司所发展出来的. 它最大的功能就是可以透过网络,让不同的机器.不同的操作系统.可以彼此分享个别 ...

  8. NFS服务器的搭建与使用,实现数据同步

    NFS的基本架构,如下图所示: NFS服务是基本RPC协议的,所以安装NFS的前提要安装RPC协议,就像java语言一定要基于jdk一样! 下面的搭建centos-1作为服务端模拟A服务器,cento ...

  9. CentOS NFS服务器的搭建与配置

    1.查看系统是否已安装NFS [root@bogon ~]# rpm -qa | grep nfs [root@bogon ~]# rpm -qa | grep rpcbind 2.安装NFS [ro ...

随机推荐

  1. JVM | 分代垃圾回收策略的基本概念以及过程

    一.为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大量的对 ...

  2. NLP - Log-linear Models

    1.The Language Modeling Problem         现在抛开我们之前讲的马尔科夫模型的假设,对于一门语言的定义,肯定不能简单依赖于每个单词的前两个单词,这是常识.比如英语中 ...

  3. Linux命令对应的英文全称【转载】

    su:Swith user  切换用户,切换到root用户cat: Concatenate  串联uname: Unix name  系统名称df: Disk free  空余硬盘du: Disk u ...

  4. BeanUtils.getProperty性能分析

    接上文Java各种反射性能对比 BeanUtils.getProperty的原理其实以下方法类似,但稍有不同 //代码片段4.1        PropertyDescriptor descripto ...

  5. mysql千万级数据表结构修改

    当需要对表进行ddl操作如加索引.增删列时,数据量小时直接在线修改表结构影响不大当表达到百万.千万数据就不能直接在线修改表结构 下面是具体的过程:1.备份数据select * from ih_orde ...

  6. ScrollView-基本设置

    一: 掌握两点: 1. ScrollView必须有一个确定的高度才能正常工作,因为它实际上所做的就是将一系列不确定高度的子组件装进一个确定高度的容器(通过滚动操作).要给一个ScrollView确定一 ...

  7. docker MySQL官方版本使用记录

    docker MySQL官方版本使用记录 使用记录 拉取官方镜像:docker pull mysql 运行镜像:docker run --name mysql -p 3306:3306 -e MYSQ ...

  8. 【AMAD】django-oauth2-provider -- 为你的app提供Oauth2的访问

    简介 个人评分 简介 django-oauth2-provider1主要是为django集成oauth2加入了不少的工具,比如装饰器,Base View, Authentication Backend ...

  9. 在vue中使用Normalize初始化样式

    参考链接:https://www.jianshu.com/p/34533b45aac1

  10. SolidWorks学习笔记8 包覆,圆顶

    包覆 在该平面上创建草图,点击A,创建文字 在左侧取消勾选“使用文档字体”,点击字体,重新设置高度,字体. 在草图上点击来放置. 点击特征->包覆, 在模型树中选择有文字的草图 这里面 选择圆柱 ...