一、简介
网络文件系统(NFS)是一种在网络上的机器间共享文件的方法,文件就如同位于客户的本地硬盘驱动器上一样。
Red Hat Linux 既可以是 NFS 服务器也可以是 NFS 客户,这意味着它可以把文件系统导出给其它系统,
也可以挂载从其它机器上导入的文件系统


网络文件系统(NFS),起初由 Sun 微系统公司进行开发,后经 IETF 扩展,
现在能够支持在不同类型的系统之间通过网络进行文件共享。换言之,
NFS 可用于不同类型计算机、操作系统、网络架构和传输协议运行环境中的网络文件远程访问和共享。
  
NFS 使用客户端/服务器架构,并由一个客户端程序和服务器程序组成。
服务器程序向其它计算机提供对文件系统的访问,其过程就叫做“输出”。
NFS 客户端程序对共享文件系统进行访问时,把它们从 NFS 服务器中“输送”出来。
NFS 传输协议用于服务器和客户机之间文件访问和共享的通信,
该协议还支持服务器通过输出控制向一组受到限制的客户计算机分配远程访问特权。
  
NFS 版本2,是 NFS 最早被广泛应用的版本,起初完全运行于 UDP 协议之上,并且不保留状态。
几大厂商扩展了 NSF 版本2,使之支持 TCP 传输。NFS 版本3整合了 TCP 传输。
使用了 TCP 传输后,使得广域网中的 NFS 应用更为灵活。
在继承了以前版本优点的基础之上,目前,NFS 版本4在功能上有如下的改进:
  
* 提高了经由 Internet 进行访问的性能。本协议能够很容易地通过防火墙;
  在等待时间较长时带宽较小的情况下,其性能优越;且每台服务器所连接用户的数目可扩展到相当大的数目。
* 将许可条款内置到协议之中,安全性得到了极大的加强。在对远程过程调用(RPC) PRCSEC_GSB 协议的支持上,
  本协议则建立在 ONCRPC 工作组的工作之上。另外,NFS 版本4支持客户机与服务器之间的安全对话,
  并要求客户机和服务器支持最简单的安全计划。
* 支持扩展协议。本协议接受所支持协议的标准扩展,而不是打折的向后兼容。
  
NFS 与 UNIX 系统息息相关,尽管它可以用于任何平台中,
如 Macintosh 和 Microsoft Windows 操作系统。
服务器消息块协议(SMB)和国际互联网普通文件系统(CIFS)是 NFS 的类似协议,
在 Microsoft Windows 平台中,拥有着对等的网络文件系统应用。


二、好处
以下是NFS最显而易见的好处:
1.本地工作站使用更少的磁盘空间,因为通常的数据可以存放在一台机器上而且可以通过网络访问到。
2.用户不必在每个网络上机器里头都有一个home目录。Home目录 可以被放在NFS服务器上并且在网络上处处可用。
3.诸如软驱,CDROM,和 Zip(是指一种高储存密度的磁盘驱动器与磁盘)之类的存储设备可以在网络上面被别的机器使用。
  这可以减少整个网络上的可移动介质设备的数量。


三、组成
NFS至少有两个主要部分:
一台服务器和一台(或者更多)客户机。
客户机远程访问存放在服务器上的数据。为了正常工作,一些进程需要被配置并运行。


四、应用
NFS 有很多实际应用。下面是比较常见的一些:
1.多个机器共享一台CDROM或者其他设备。这对于在多台机器中安装软件来说更加便宜跟方便。
2.在大型网络中,配置一台中心 NFS 服务器用来放置所有用户的home目录可能会带来便利。
  这些目录能被输出到网络以便用户不管在哪台工作站上登录,总能得到相同的home目录。
3.几台机器可以有通用的/usr/ports/distfiles 目录。
  这样的话,当您需要在几台机器上安装port时,您可以无需在每台设备上下载而快速访问源码。



五、NFS的安装 

RedHad默认已经安装了NFS,如果没装需手动安装如下5个rpm包: 

setup-*:             共享NFS目录在/etc/exports中定义 

initscripts-*:        包括引导过程中装载网络目录的基本脚本 

nfs-utils-*:         包括基本的NFS命令与监控程序 

portmap-*:           支持安全NFS RPC服务的连接 

quota-*:            网络上共享的目录配额,包括rpc.rquotad (这个包不是必须的) 



六、NFS服务端 

1. 配置  

(服务端配置,在需要共享文件系统的主机上进行的操作) 

编辑/etc/exports文件添加共享目录: 

/home/stb 192.168.1.235(rw,sync,no_root_squash) 

/home/stb 192.168.1.170(rw,sync,no_root_squash) 

/home/stb 192.168.1.31(rw,sync,no_root_squash) 



注释: 

  /home/stb为对外共享的目录; 

  192.168.1.235为需要挂载共享目录的主机(客户端)的ip地址; 

  ()内为opitons; 

    rw:             可读写的权限; 

    ro:             只读的权限; 

    no_root_squash: 登入到NFS主机的用户如果是ROOT用户,他就拥有ROOT的权限root_squash:    

    在登入 NFS 主机使用目录的使用者如果是 root 时,那么这个使用者的权限 

    sync:           资料同步写入存储器中。 

    async:          资料会先暂时存放在内存中,不会直接写入硬盘。 



2. NFS服务端的启动 

$ service nfs start 

Starting NFS services:  [  OK  ] 

Starting NFS quotas: [  OK  ] 

Starting NFS daemon: [  OK  ] 

Starting NFS mountd: [  OK  ] 

Starting RPC idmapd: [  OK  ] 



$ service nfs restart 

$ service nfs stop 

$ service nfs reload   //当修改过/etc/exports文件后不用重启服务可执行该命令 



启动时报错: 

Starting NFS quotas: Cannot register service: RPC: Unable to receive; errno = Connection refused 

rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp). 

[FAILED] 

Starting NFS daemon: [FAILED] 

这时候应该先启动portmap 然后启动nfs即可! 

$ service portmap start  



3. NFS服务端卸载 

如果不想再使用已挂载的NFS输出目录,可用umount命令来卸载该目录。 

例如, 

要卸载前面挂载的/mnt/nfs目录,可使用下面的命令。 

$ umount /mnt/nfs 



如果当前还有客户端正在连接NFS服务器,此时要想将NFS服务器所在的主机关机,应先关掉portmap和nfs这两个服务, 

否则可能要等待很久才能正常关机。 

如果无法正确地将potrmap和nfs这两个服务关掉,那么可先用命令netstat -utlp找出它们的PID, 

然后使用kill命令杀掉,这样才能正常关机。 

当然,还可以先用exportfs -auv命令将当前主机中NFS服务器的所有输出目录停止掉,再关机。 



七、客户端的挂载 

1. 通过mount命令挂载 

$ mkdir /mnt/stb 

$ mount 192.168.1.162:/home/stb /mnt/stb  

$ mount -t nfs 192.168.1.162:/home/stb /mnt/stb -o nolock 



NOTE:  

其中客户端必须有/mnt/stb目录;  

在本地文件系统的 /mnt/stb 目录中不应该有子目录;  



mount时出错: 

1). mount.nfs: Input/output error 

解决: 

在客户端也需启动portmap 



2). mount: 192.168.1.111:/utuLinux failed, reason given by server: Permission denied 

查看配置文件exports,是否为允许挂载的客户。 



3). mount: RPC: Unable to receive; errno = No route to host 

首先看是否在同一网段;  

再者输入: 

[root@localhost etc]# service iptables status 



看防火墙是否开启,有则将其关闭 

[root@localhost etc]# service iptables stop 



4). mount: RPC: Unable to receive; errno = Connection refused 

首先看nfs服务是否开启,其次看rpcbind是否开启,如果rpcbind没有运行,那在重新开启rpcbind后,要再restart nfs服务, 

因为重启rpcbind已对nfs的一些配置造成影响,需要restart. 





2.使用/etc/fstab来挂载NFS 

要挂载其他机器上的NFS共享的另一种方法是在/etc/fstab文件中添加一行, 

必须是根用户才能修改/etc/fstab文件. 



在这一行中必须声明: 

  NFS服务器的主机名:要导出的目录 要挂载NFS共享的本地机器目录 nfs options 



/etc/fstab中每行的一般语法如下所示: 



 server:/usr/local/pub    /pub   nfs    rsize=8192,wsize=8192,timeo=14,intr 



注释: 

  挂载点/pub在客户端机器上必须存在. 



在客户端系统的/etc/fstab文件中添加这一行后, 

在shell提示下键入命令 

$ mount /pub 

将会从服务器中挂载的挂载点/pub. 



3.使用autofs来挂载NFS 

挂载NFS共享的第3种方法是使用autofs, 

它使用automount守护进程来管理挂载点,只在文件系统被访问时才动态地挂载. 



autofs咨询主映射配置文件/etc/auto.master来决定要定义哪些挂载点, 

然后使用适用于各个挂载点的参数来启动automount守护进程. 

主映射配置中的每一行都定义一个挂载点, 

一个分开的映射文件定义在该挂载点下要挂载的文件系统. 

如/etc/auto.misc文件可能会定义/misc目录中的挂载点,这种关系在/etc/auto.master文件中会被定义. 



auto.master文件中的每个项目都有3个字段, 

  第1个字段是挂载点; 

  第2个字段是映射文件的位置; 

  第3个字段可选,可以包括超时数值之类的信息. 



例如, 

要在客户端机器上的 /opt/myproj  挂载点上 

挂载远程服务端机器penguin.example.net中的 /opt/proj52 目录, 



Step1. 在客户端的 /etc/auto.master 文件中添加或修改以下行: 

/opt   /etc/auto.misc --timeout 60 



Step2. 在客户端的 /etc/auto.misc 文件中添加以下行:  

myproj  -rw,soft,intr,rsize=8192,wsize=8192 penguin.example.net:/opt/proj52 



/etc/auto.misc中: 

  第1个字段是/opt/下,子目录的名称,该目录被automount动态地创建,它不应该在客户端机器上实际存在; 

  第2个字段包括挂载选项,如rw代表读写访问权, 

  第3个字段是要导出的NFS的位置,包括主机名和目录. 



Step3. autofs是一种服务,要启动这项服务, 

在shell提示下键入以下命令: 

$ /sbin/service autofs restart 



Step4. 要查看活跃的挂载点,在shell提示下键入以下命令: 

$ /sbin/service autofs status 



Step5. 如果在autofs运行时修改了/etc/auto.master配置文件, 

则必须在shell提示下键入以下命令来通知automount守护进程重新载入配置文件: 

$ /sbin/service autofs reload 



NOTE: 

A. 目录 /opt 在本地文件系统中必须存在. 

B. 要先启动服务 portmap 才能成功挂载;  





4. 客户端卸载 

如果不想再使用已挂载的NFS输出目录,可用umount命令来卸载该目录。 

例如, 

要卸载前面挂载的/mnt/nfs目录,可使用下面的命令。 



  $ umount /mnt/nfs 

如果当前还有客户端正在连接NFS服务器,此时要想将NFS服务器所在的主机关机,应先关掉portmap这个服务, 



5. 补充: 

如果nfs的服务器和客户端不在同一网段,一定要给客户端所在网段的出口加上权限;  

比如: 

nfs服务器在192.168.1.0网段,客户端在3.0网段, 

但是通过192.168.1.48与1.0网段通信,这时要给1.48加上权限;