NFS(Network FileSystem),是1984年由SUN公司为了适应网络环境而开发的技术,其使用RPC(Remote Procedure Call)协议来传送信息,通信标准遵循RFCs(Request For Comments)。NFS的目的是允许客户端的用户可以通过网络远程访问服务器端的数据,而不会觉得和访问本地数据有什么不同。

NFS到目前为止有4个版本:

  • original NFS,1984年。sun公司发布的版本,定义在RFC 1904。
  • NFSv2,1989年。定义在RFC 1904上,数据传送使用UDP协议,最大支持的数据是2GB
  • NFSv3,1995年。定义在RFC 1813上,支持64位系统,超过2GB数据,可以异步写入,使用TCP传送数据
  • NFSv4,2000年。定义在RFC 3010上,提高了安全性要求和对大型集群并行环境的支持

NFS的优势:

1.本地工作站使用更少的磁盘空间,因为通常的数据可以存放在一台机器上而且可以通过网络访问到。

2.用户不必在每个网络上机器里头都有一个home目录。Home目录可以被放在NFS服务器上并且在网络上处处可用。

3.诸如软驱,CDROM和 Zip(是指一种高储存密度的磁盘驱动器与磁盘)之类的存储设备可以在网络上面被别的机器使用。这可以减少整个网络上的可移动介质设备的数量。


NFS的搭建

我自己的环境:

Ubuntu-10.10-Desktop-i386-x86系统机器2台,一台作为NFS服务器,另一台作为客户端

 

服务器hdp0

客户端hdp1

IP

192.168.2.2

192.168.2.3

Netmask

255.255.255.0

255.255.255.0

Gateway

192.168.2.1

192.168.2.1

 

步骤:

1、两台机器上都需要安装完整的NFS软件环境,包括(我自己的环境Ubuntu中):

libgssglue1_0.1-4_i386 
  
 
  

    libnfsidmap2_0.23-2_i386 
  
 
  

    librpcsecgss3_0.19-2_i386 
  
 
  
nfs-common_1%3a1.2.2-1ubuntu1.1_i386
 
  
nfs-kernel-server_1%3a1.2.2-1ubuntu1.1_i386
 
  
portmap_6.0.0-2ubuntu1.1_i386

 

/etc/exports

1. #vi /etc/exports 
2. 3. /home/hadoop/Downloads 192.168.2.0/24(rw,async,no_root_squash,no_subtree_check)
4. |-------第一部分------| |----------------------第二部分------------------------|
5. 6. #其中/home/hadoop/Downloads是服务器上意欲使用NFS共享的目录;192.168.2.0/24指定了能访问
7. #共享目录的客户端;(rw,async,no_root_squash,no_subtree_check)这些是共享设置项。

exports文件有自己的格式,是按照行来划分的,一行一个配置。 第一部分是打算在NFS区域上共享的目录

第二部分是权限控制,意思是在网络上运行192.168.2.x这个网段内的机器来访问hdp0的/home/hadoop/Downloads文件夹,并且他们访问的参数是(可读写,异步IO,不压缩根用户权限,不执行子树查询)。按照这种格式,可以进行访问权限的控制。

exports文件的第二部分可以添加多个控制,可以使用多种形式,可以包括单一主机,网络组,通配符,ip地址,例如:

/home     master(rw) @trustly(rw,no_root_squash) 
  
 
  

    /usr         proj*.local.domain(rw,all_squash,anonuid=150,anongid=100) 
  
 
  

    /pub        *(ro,insecure,all_squash)

3、(在服务器hdp0上)任何对exports文件的修改,必须将两个关键daemon重启:

1. root@hdp0:~# service portmap
2. portmap start/running, process 586 
3. root@hdp0:~# service nfs-kernel-server
4.  * Stopping NFS kernel daemon                                            [ OK ]  
5. for
6. for
7.  * Starting NFS kernel daemon                                            [ OK ]

然后可以对其共享的目录和访问区域进行检测

1. root@hdp0:~# showmount -e 
2. Export list for
3. /home/hadoop/Downloads 192.168.2.0/24 
4. root@hdp0:~#

4、(在客户端hdp1上)如果网络连接没有问题,可以同样使用showmount查看

1. root@hdp1:~# showmount -e hdp0 
2. Export list for
3. /home/hadoop/Downloads 192.168.2.0/24 
4. root@hdp1:~#
1. root@hdp1:~# mount -t nfs hdp0:/home/hadoop/Downloads/ /mnt/NFSX/ 
2. root@hdp1:~#

已经成功挂载

1. root@hdp1:~#mount 
2. ... 
3. hdp0:/home/hadoop/Downloads/ on
4. root@hdp1:~#

因为挂载选项是rw,所以可以对其进行写入,任何改动并没有在本地留存,都是存放在了hdp0上,如果卸载/mnt/NFSX,就失去了改动的文件,所以如果想每次开机自动挂载NFS,就需要编辑/etc/fstab文件,格式如下:

server:path    mountpoint    fstype    option,option,...  0  0

其中挂载选项option里一般都使用:

soft/hard 
  
 
  

    ac/noac 
  
 
  

    fg/bg 
  
 
  

    proto=udp/tcp 
  
 
  

    rw/ro 
  
 
  

    auto/noauto 
  
 
  

    user/nouser 
  
 
  

    intr

将fstab文件修改好,下次开机时就可以自动挂载NFS目录了。

 

exports的选项首先做控制,之后才是fstab的挂载选项,比如exports中声明是ro,但fstab写的是rw,最后的结果是ro!

 


 

 autofs(自动挂载器)

配合一些不常用的挂载点使用,使其能在访问时自动进行挂载,而不需要手动在访问之前挂载。在此配合NFS使用

 

1、安装autofs。

   apt-get install autofs

   会安装autofs和autofs5两个包

2、在/etc目录下默认会产生4个文件,分别是auto.master , auto.misc ,    auto.net , auto.smb 。

3、配置的过程是这样的:比如本例,要在本机的/mnt/testauto目录下挂    载NFS服务器(hdp0-192.168.2.2)上的/media目录。

4、首先编辑 auto.master文件。

   vi /etc/auto.master,在里面写上如下配置项

   /mnt/testauto    /etc/auto.testauto    --timeout=60    //前面    是挂载目录,后面是挂载时的选项配置文件,最后是空闲超时卸载

5、编辑auto.testauto文件

   添加如下配置项:

   media    -soft    192.168.2.2:/media    //前面是挂载点名称,中    间是挂载选项,最后是挂载点路径

6、重启autofs服务,service autofs restart

7、使用命令访问/mnt/testauto/media目录,这时autofs就会自动将media    目录挂载在/mnt/testauto上

 

PS:autofs有一个弊端,就是如果你直接cd到/mnt/testauto目录中,使用ls命令是看不到任何东西的,必须要明确指出要挂载的那个目录的名字(这里是media),否则/mnt/testauto下是不会自动冒出media的,意思是一定要对media有访问这个动作。

(这就有个弊端,时间一长就不可能记得/mnt/testauto这个目录下使用autofs挂载过哪些目录,也就不可能直接访问这个已经忘记的media目录!)

 

转载于:https://blog.51cto.com/spazzzz/606910