NFS服务器详解

1、什么是NFS服务器

       1.1Network File System的简写。

      NFS 是由Sun公司发展, 并於1984年推出, NFS是一个RPC service ,它使我们能够达到文件的共享, 它的设计是为了在不同的系统间使用, 所以它的通讯协定设计与主机及作业系统无关.当使用者想用远端文件时只要用"mount"就可把remote文件系统挂接在自己的文件系统之下,使得远端的文件使用上和local机器的文件没两样.

假如我们在机器A上, 要把机器B上的 /usr/man 挂接到machine A 的/usr/man只要下mount machine_name:/usr/man /usr/home 就可mount过来.而我们不只是可以mount目录,就是一个文件也是可以的.在挂接之后我们只能对文件做reading (or writing) 的动作,而不能在remote machie上把此文件或目录move,delete掉 , 但须注意的是如我们mount /usr 后 , 不能再mount /usr底下的目录, 否则会发生错误

NFS就是促使Servers上的档案能被其他的机器mount,而达到资源共享,享用这些档案的机器就可称为Client,一个client可以从server上mount一个档或是一个层次的目录(file hierarchies) . 然而事实上任何一台机器都可以做NFS server or NFS client ,甚至同时为NFS server and NFS client 也可以.

NFS 服务器所export 出来的文件或目录都记录在 /etc/exports 这一个文件中,当我们启动NFS server 时 在 /etc/rc.local 的这一个script会自动的启动 exportfs 这一个程式 , 搜寻 /etc/exports 这一个文件是否存在, 并且赋予正确的权限给所有export出去的 file hierarchies .

但须注意的是,只有服务器所export出去的路径,NFS client才能够mount, 同样的当启动client时 , 系统会自动去mount所有server export的路径,而mount到的所有路径都会记录在 /etc/fstab 下 , 类似如下的fstab档

/dev/sd0a / 4.2 rw 1 1 
/dev/sd0h /tmp 4.2 rw 1 3 
/dev/sd0g /usr 4.2 rw 1 2 
/dev/fd0 /pcfs pcfs rw,noauto 0 0 
sparc20:/swap /swap nfs rw,intr,bg,soft 0 0 
sparc17:/home /home nfs rw,intr,bg,soft 0 0 
sparc17:/home3 /home3 nfs rw,intr,bg,soft 0 0 
sparc14:/home4 /home4 nfs rw,intr,bg,soft 0 0 
sparc20:/home2 /home2 nfs rw,intr,bg,soft 0 0 
sparc20:/var/spool/mail /var/spool/mail nfs rw,intr,bg,soft 0 0 
rs970:/home1 /home1 nfs rw,intr,bg,soft 0 0

当client mount 到一个路径,绝对不是说copy server上的这一个路径到local的机器上,我们可以用 cd 进入这一个mount到的路径,就如同是使用local directory一样 

  1.2  为何使用NFS

  NFS的目标是使计算机共享资源,在其发展过程中(即20世纪80年代),计算机工业飞速发展,廉价CPU及客户端/服务器技术促进了分布式计算环境的发展。然而当处理器价格下降时,大容量的存储系统相对而言价格仍居高不下。因此必须采用某种机制在充分发挥单个处理器性能的同时使计算机可共享存储资源和数据,于是NFS应运而生。

  1.3  NFS协议

 使用NFS,客户端可以透明地访问服务器中的文件系统,这不同于提供文件传输的FTP协议。FTP会产生文件一个完整的副本;NFS只访问一个进程引用文件部分,并且一个目的就是使得这种访问透明。这就意味着任何能够访问一个本地文件的客户端程序不需要做任何修改,就应该能够访问一个NFS文件。

  NFS是一个使用SunRPC构造的客户端/服务器应用程序,其客户端通过向一台NFS服务器发送RPC请求来访问其中的文件。尽管这一工作可以使用一般的用户进程来实现,即NFS客户端可以是一个用户进程,对服务器进行显式调用,而服务器也可以是一个用户进程。因为两个理由,NFS一般不这样实现。首先访问一个NFS文件必须对客户端透明,因此NFS的客户端调用是由客户端操作系统代表用户进程来完成的;其次,出于效率的考虑,NFS服务器在服务器操作系统中实现。如果NFS服务器是一个用户进程,每个客户端请求和服务器应答(包括读和写的数据)将不得不在内核和用户进程之间进行切换,这个代价太大。第3版的NFS协议在1993年发布,图1-2所示为一个NFS客户端和一台NFS服务器的典型结构。

   NFS服务器详解

    
    图1-2  NFS客户端和NFS服务器的典型结构

  (1)访问一个本地文件还是一个NFS文件对于客户端来说是透明的,当文件被打开时,由内核决定这一点。文件被打开之后,内核将本地文件的所有引用传递给名为"本地文件访问"的框中,而将一个NFS文件的所有引用传递给名为"NFS客户端"的框中。

  (2)NFS客户端通过其TCP/IP模块向NFS服务器发送RPC请求,NFS主要使用UDP,最新的实现也可以使用TCP。

  (3)NFS服务器在端口2049接收作为UDP数据包的客户端请求,尽管NFS可以被实现为使用端口映射器,允许服务器使用一个临时端口,但是大多数实现都是直接指定UDP端口2049。

  (4)当NFS服务器收到一个客户端请求时,它将这个请求传递给本地文件访问例程,然后访问服务器主机上的一个本地的磁盘文件。

  (5)NFS服务器需要花一定的时间来处理一个客户端的请求,访问本地文件系统一般也需要一部分时间。在这段时间间隔内,服务器不应该阻止其他客户端请求。为了实现这一功能,大多数的NFS服务器都是多线程的--服务器的内核中实际上有多个NFS服务器在NFS本身的加锁管理程序中运行,具体实现依赖于不同的操作系统。既然大多数UNIX内核不是多线程的,一个共同的技术就是启动一个用户进程(常被称为"nfsd")的多个实例。这个实例执行一个系统调用,使其作为一个内核进程保留在操作系统的内核中。

  (6)在客户端主机上,NFS客户端需要花一定的时间来处理一个用户进程的请求。NFS客户端向服务器主机发出一个RPC调用,然后等待服务器的应答。为了给使用NFS的客户端主机上的用户进程提供更多的并发性,在客户端内核中一般运行着多个NFS客户端,同样具体实现也依赖于操作系统。

2、NFS服务器的安装和操作

1)检查linux系统中是否安装了nfs-utils和portmap两个软件包(RHEL5系统默认已经安装了这两个软件包)

    命令#rpm –q nfs-utils portmap

显示已经装了两个包:
nfs-ttils-1.0.9-33.e15
portmap-4.0-65-2.2.1


2)查看NFS服务器是否启动

 命令:

#service nfs status
#service portmap status

3)如果服务器没有启动,则开启服务(默认服务下nfs没有完全开启)
    命令:
#service nfs start
#service portmap start

4)指定NFS服务器的配置文件
 NFS服务器的配置文件保存“/etc/”目录中,文件名称是“exports”,该文件用于被指NFS服务器提供的目录共享
命令:
#vi /etc/exports
  配置“exports”文件格式如下:
 /home *(sync,ro)
         Home: 共享目录名
            *: 表示所有主机
 (sync,ro): 设置选项
    exports文件中的“配置选项”字段放置在括号对(“( )”)中 ,多个选项间用逗号分隔
    sync:设置NFS服务器同步写磁盘,这样不会轻易丢失数据,建议所有的NFS共享目录都使用该选项
    ro:设置输出的共享目录只读,与rw不能共同使用
    rw:设置输出的共享目录可读写,与ro不能共同使用

    exports文件中“客户端主机地址”字段可以使用多种形式表示主机地址
    192.168.152.13 指定IP地址的主机
    nfsclient.test.com 指定域名的主机
    192.168.1.0/24 指定网段中的所有主机
    *.test.com 指定域下的所有主机

    * 所有主机


5)重新输出共享目录
    Exportfs管理工具可以对“exports”文件进行管理
    命令#exportfs –rv 
可以让新设置的“exports”文件内容生效


6)显示NFS服务器的输出目录列表
    显示当前主机中NFS服务器的输出列表
    # showmount -e


7)显示NFS服务器中被挂载的共享目录
    显示当前主机NFS服务器中已经被NFS客户机挂载使用的共享目录
    # showmount -d


8)在另外一个linux系统中挂在共享目录
    显示NFS服务器的输出
    # showmount -e 172.16.75.1
    挂载NFS服务器中的共享目录
    # mount -t nfs 172.16.75.1:/software /mnt/
查看mnt目录中的内容
    Cd /mnt |ll
9)卸载系统中已挂载的NFS共享目录
    命令# umount /mnt/
    总结:
    1、在配置NFS服务器之前用ping命令确保两个linux系统正常连接,如果无法连接关闭图形界面中的防火墙#service iptables stop
    2、在配置中确保输入的命令是正确的
    3、更改完“exports”文件后要输入exportfs –rv ,使得“exports”文件生效。
    4、检查nfs服务是否开启,默认是关闭的。
    5、卸载的时候不能在/mnt目录中卸载,必须注销系统后卸载。

上一篇:normal数据库关闭hang的问题


下一篇:文档预览功能使用技巧(1)---文字拷贝