23

 

        网络文件系统(NFS,Network File System)是一种将远程主机上的分区(目录)经网络挂载到本地系统的一种机制,通过对网络文件系统的支持,用户可以在本地系统上像操作本地分区一样来对远程主机的共享分区(目录)进行操作。

        因为NFS支援的功能相当的多,而不同的功能都会使用不同的程式来启动,每启动一个功能就会启用一些port来传输资料,因此, NFS的功能所对应的port才没有固定住,而是采用随机取用一些未被使用的小于1024的埠口来作为传输之用。 此时我们就得需要远端程序呼叫(RPC)的服务啦。 RPC最主要的功能就是在指定每个NFS功能所对应的port number ,并且回报给用户端,让用户端可以连结到正确的埠口上去。那RPC又是如何知道每个NFS的埠口呢?这是因为当伺服器在启动NFS时会随机取用数个埠口,并主动的向RPC注册,因此RPC可以知道每个埠口对应的NFS功能,然后RPC又是固定使用port 111来监听用户端的需求并回报用户端正确的埠口,所以当然可以让NFS的启动更为轻松愉快了!

步骤:
用户端会向伺服器端的RPC (port 111)发出NFS档案存取功能的询问要求;
伺服器端找到对应的已注册的NFS daemon埠口后,会回报给用户端;
用户端了解正确的埠口后,就可以直接与NFS daemon来连线。
        由于NFS的各项功能都必须要向RPC来注册,如此一来RPC才能了解NFS这个服务的各项功能之port number, PID, NFS在主机所监听的IP等等,而用户端才能够透过RPC的询问找到正确对应的埠口。也就是说,NFS必须要有RPC存在时才能成功的提供服务,因此我们称NFS为RPC server的一种。

         在嵌入式Linux 的开发过程中,开发者需要在Linux 服务器上进行所有的软件开发,交叉编译后,通用FTP 方式将可执行文件下载到嵌入式系统运行,但这种方式不但效率低下,且无法实现在线的调试。因此,可以通过建立NFS,把Linux 服务器上的特定分区共享到待调试的嵌入式目标系统上,就可以直接在嵌入式目标系统上操作Linux 服务器,同时可以在线对程序进行调试和修改,大大的方便了软件的开发。因此,NFS 的是嵌入式Linux 开发的一个重要的组成部分,本部分内容将详细说明如何配置嵌入式Linux 的NFS 开发环境。

         嵌入式Linux 的NFS 开发环境的实现包括两个方面:一是Linux 服务器端的NFS 服务器支持;二是嵌入式目标系统的NFS 客户端的支持。因此,NFS 开发环境的建立需要配置linux 服务器端和嵌入式目标系统端。

一、Linux 服务器端NFS 服务器的配置
    以root 身份登陆Linux 服务器,编辑/etc 目录下的共享目录配置文件exports,指定共享目录及权限等。

    执行如下命令编辑文件/etc/exports:

   # vi /etc/exports

   在该文件里添加如下内容:

   /home/work 192.168.0.*(rw,sync,no_root_squash)

   然后保存退出。

   添加的内容表示:允许ip 地址范围在192.168.0.*的计算机以读写的权限来访问/home/work 目录。

   /home/work 也称为服务器输出共享目录。

   括号内的参数意义描述如下:

   rw:读/写权限,只读权限的参数为ro;

   sync:数据同步写入内存和硬盘,也可以使用async,此时数据会先暂存于内存中,而不立即写入硬盘。

   no_root_squash:NFS 服务器共享目录用户的属性,如果用户是 root,那么对于这个共享目录来说就具有 root 的权限。

   接着执行如下命令,启动端口映射:

   # /etc/rc.d/init.d/portmap start

   最后执行如下命令启动NFS 服务,此时NFS 会激活守护进程,然后就开始监听 Client 端的请求:

   # /etc/rc.d/init.d/nfs start

   用户也可以重新启动Linux 服务器,自动启动NFS 服务。

         在NFS 服务器启动后,还需要检查Linux 服务器的防火墙等设置(一般需要关闭防火墙服务),确保没有屏蔽掉NFS 使用的端口和允许通信的主机,主要是检查Linux 服务器iptables,ipchains 等选项的设置,以及/etc/hosts.deny,/etc/hosts.allow 文件。

   我们首先在Linux 服务器上进行NFS 服务器的回环测试,验证共享目录是否能够被访问。在Linux 服务器上运行如下命令:

   # mount –t nfs 192.168.0.20:/home/work /mnt

   # ls /mnt

   命令将Linux 服务器的NFS 输出共享目录挂载到/mnt 目录下,因此,如果NFS 正常工作,应该能够在/mnt 目录看到/home/work 共享目录中的内容。

二、嵌入式目标系统NFS 客户端的配置
       在Linux 服务器设置好后,还需要对客户端进行相关配置。在配置内核时选择Load an Alternate Configuration File输入配置文件的路径和文件名添加内核对NFS的支持:

   选中networking options-》IP:kernel level auloconfiguralion项

   选中file systems-》network file systems-》下的root file system on nfs 和nfs file system support重新编译内核下载bootloader和kernel到开发板上

    在嵌入式目标系统的Linux Shell 下,执行如下命令来进行NFS 共享目录挂载:

    # mkdir /mnt/nfs //建立Linux 服务器输出共享目录的挂载点;

    # mount –t nfs 192.168.0.20:/home/work /mnt/nfs –o nolock

    # cd /mnt/nfs

    # ls

    此时,嵌入式目标系统端所显示的内容即为Linux 服务器的输出目录的内容,即Linux 服务器的输出目。

    录/home/work 通过NFS 映射到了嵌入式目标系统的/mnt/nfs 目录。用户可以用增/删/修改文件的方式来验证实际效果。mount 命令中的192.168.0.20 为Linux 服务器的IP 地址,/home/work 为Linux 服务器端所配置的共享输出目录,/mnt/nfs 为嵌入式设备上的本地目录。

    在开发过程中,来回输入命令非常烦人,我写了两个简单的脚本来完成nfs的启动,挂载。

    host启动nfs:
    snfs
    #!/bin/bash
    ifconfig eth0 192.168.0.20
    /etc/rc.d/init.d/portmap start
    /etc/rc.d/init.d/nfs start
    嵌入式目标机挂载nfs:
    mnfs:

    #!/bin/sh
    mount -t nfs 192.168.0.20:/home/work/nfs /mnt/nfs -o nolock
    echo “nfs ok!”

 

 1.1 NFS概述

NFS(Network File System)是一种分布式文件系统,允许网络中的安装不同操作系统的计算机间共享文件和外设,所以它的通讯协定设计与主机及作业系统无关. 它是由SUN公司于1984年推出,使得可以本地机一样的使用另一台联网计算机的文件和外设。NFS在文件传送或信息传送过程中依赖于RPC协议。NFS 的当前版本是V4(RFC3010)

RPC, 远程过程调用 (remote procedure call) 是能使客户端执行其他系统中程序的一种机制。由于使用 RPC 的程序不必了解支持通信的网络协议的情况,因此 RPC 提高了程序的互操作性。常用于分布式客户端/服务器模型,发出请求的程序是客户程序,而提供服务的程序是服务器。RFC1831

1.2 NFS的安装

NFS的安装是非常简单的,只需要两个软件包即可,而且在通常情况下,是作为系统的默认包安装的,在配置使用NFS之前需要先查询所需的软件包是否已安装.

# rpm -q nfs-utils portmap 

nfs-utils-1.0.6-70.EL4

portmap-4.0-63 

//如果出现包的信息,则表示已安装了nfs-utils portmap两个软件包

1.3 NFS安装包文件 

如当前系统中没有安装NFS所需的使用的软件包,需要手工进行安装。nfs-utils和portmap两个包的安装文件在系统光盘中都会有。

nfs-utils-1.0.6-70.EL4.i386.rpm

portmap-4.0-63.i386.rpm

1.4 Portmap软件包

portmap软件包中的portmap服务,为NFS和NIS等提供PRC服务的支持,因此在安装NFS时就先安装portmap软件包.

rpm -ql portmap

/etc/rc.d/init.d/portmap

/sbin/portmap

1.5 nfs-utils软件包

nfs-utils软件包提供了NFS服务器程序和相应的管理工具。

rpm -ql nfs-utils

1.6 NFS服务器的配置

NFS服务器的配置相对比较简单,只需要在相应的配置文件中进行设置,然后启动NFS服务器即可.

1.7 NFS服务器的配置文件——————-exports

exports文件在目录“/etc”下,用于配置NFS服务器所提供的目录共享。exports的黑夜设置为空,没有输出任何的目录共享,这也是出于安全考虑,这样即使启动了NFS 服务也不会提供任何的共享。

1.8 exports文件的格式

exports文件中每行提供一个共享的目录,设置行的格式如下所示:

要输出的共享目录 客户端主机的地址(设置先项)

/www/chinafu *(sync,ro)

在共享设置文件中,共享目录和主机地址间用空格分隔,主机地址之后紧随设置选项,设置选项放有括号中,多个设置选项间用逗号分隔.

1.8.1共享目录

共享目录设置系统中需要作为共享的目录路径。 

1.8.2 客户端主机地址

在exports文件 客户端,客户端主机的指定非常灵活,如下所示

 

 客户端主机地址                                                    说明

192.168.0.28                                               指定ip地址的主机

www.chinafu.net                                           指定域名的主机

192.168.0.10/31                                       指定网段中的所有主机

*.chinafu.com                                              指定域中的所有主机

*                                                                  指定所有主机

 

1.8.3 设置选项 

exports文件中的设置选择较多,但经常用的并不多

设置选项                                                                      说明

sync                         设置NFS服务器同步写磁盘,这样不会轻易丢失数据,NFS服务器建议使用该选项 

ro                            设置输出的共享目录只读,与 rw捡能同时使用

rw                            设置输出的共享目录可读写 ,与ro不能共同使用

1.8.4 exports文件配置实例

在exports文件中,同一输出共享目录对于不同的主机可以有不同的设置选项,各主机设置间用空格分隔

#more /etc/exports

/www/chinafu *(sync,ro) 192.168.0.19(sync,rw)

/home/ftp 192.168.0.31(sync,ro)

1.9 NFS服务器的启动与停止

在对exports文件进行了正确的配置后,就可以启动NFS服务器了。

19.1 启动NFS服务器

为了使NFS服务器能正常工作,需要启动portmap和nfs两人服务,并且portmap一定要先于nfs启动

[root@localhost ~]# service portmap start

Starting portmap:                                          [ OK ]

//portmap要先于nfs启动

[root@localhost ~]# service nfs start

Starting NFS services:                                     [ OK ]

Starting NFS quotas:                                       [ OK ]

Starting NFS daemon:                                     [ OK ]

Starting NFS mountd:                                      [ OK ]

19.2 查询NFS服务器状态

#service portmap status

#service nfs status

19.3 停止NFS服务器

要停止NFS运行时,需要先停止nfs服务再停止portmap服务,对于系统中有其他服务(如NIS)需要使用时,不需要停止portmap服务

#service nfs stop

#service portmap stop

19.4设置NFS服务器的自动启动状态

对于实际的应用系统,每次启动LINUX系统后都手工启动nfs服务器是不现实的,需要设置系统在指定的运行级别自动启动portmap和nfs服务。

[root@localhost ~]# chkconfig –list portmap

portmap         0:off   1:off   2:off   3:off    4:off 5:off    6:off

[root@localhost ~]# chkconfig –list nfs

nfs             0:off   1:off   2:off   3:off   4:off   5:off   6:off

//设置portmap和nfs服务在系统运行级别3和5自动启动.

[root@localhost ~]# chkconfig –level 35 portmap on

[root@localhost ~]# chkconfig –level 35 nfs on

[root@localhost ~]# chkconfig –list portmap

nfs             0:off   1:off   2:off   3:on    4:off 5:on    6:off

[root@localhost ~]# chkconfig –list nfs

nfs             0:off   1:off   2:off   3:on    4:off 5:on    6:off

20.1 showmount命令

在正确设置了NFS共享目录后并正确启动NFS服务器后,可以使用showmount命令查询NFS的共享状态.

20.1.1 显示showmount命令帮助

showmount -h

20.1.2 显示主机的NFS服务器信息

showmount NFS服务器主机地址     //不指定为当前主机的NFS服务器的信息

20.1.3 显示NFS服务器的输出列表

showmount -e NFS服务器主机地址

20.1.4 显示NFS服务器中被挂载的目录

showmount -d NFS服务器主机地址

20.1.5 显示NFS服务器的客户要与被挂载的目录

showmount -a

21.1exportfs命令

 

21.1.1 重新输出共享目录

exportfs -rv

exportfs -rv命令使NFS服务器重新读取exports文件中的设置,使用该命令可以在改变exports文件设置后,使设置在当前服务器中生效,而不需要重新启动NFS服务器

21.1.2 停止输出所有目录

exportfs -auv

用于停止当前主机中NFS服务器的所有目录输出

21.1.3 输出所有的目录

exportfs -av

用于输出当前主机中NFS服务器的所有共享目录

22.1 NFS的客户端配置

22.1.1显示NFS服务器的输出共享目录

在使用mount挂载NFS服务器的共享目录之前,最好先查询NFS服务器中是否允许本机连接相应的目录共享

showmount -e 服务器地址

23.1 挂载NFS服务器中的共享目录

命令格式

mount NFS服务器地址:共享目录 本地挂载点目录

例子:

mount 192.168.0.130:/www/chinafu /mnt/chinafu

细节提示:挂载点目录是已建立的空目录,也可是使用其他的空目录.

24.1显示当前主机挂载的NFS目录

#mount |grep nfs

25.1卸载已挂载的NFS共享目录

#unmount /mnt/chinafu

//目录/mnt/chinafu为NFS共享目录挂载点

部分转自: http://hi.baidu.com/licett/blog/item/571c13fcb4d657f8fc037f49.html

精彩文章

Category : Linux

4 Responses to “Linux下NFS详解”


我心疯狂 23/09/2009

虽然看不懂,还是顶一下!!

Notify
vayu 23/09/2009

;-) 谢谢支持~@我心疯狂

Notify
Rubinz 24/09/2009

看不完,帮你顶一下

Notify
种草人 27/09/2009

你的博客好漂亮。精彩,顶一下!

Notify