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