日期:2014-05-16  浏览次数:20674 次

Linux 共享目录NFS设置

NFS server可以看作是一个FILE SERVER,它可以让你的PC通过网络将远端得NFS SERVER共享出来的档案MOUNT到自己的系统中,在CLIENT看来使用NFS的远端文件就象是在使用本地文件一样。

RPC(Remote Procedure Call)


NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。而这些传输协议用到这个RPC功能的。可以说NFS本身就是使用RPC的一个程序。或者说NFS也是一个RPC SERVER.所以只要用到NFS的地方都要启动RPC服务,不论是NFS SERVER或者NFS CLIENT。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责负责信息的传输。

因为我用的是Redhat Linux,所以下面的操作都是在这个系统上的。

一:服务器端的设定(以LINUX为例)

服务器端的设定其实很简单,只需设定一个文件就行,就是/etc/exports这个文件,设定格式如下:

欲分享出去的目录 主机名称1或者IP1(参数1,参数2) 主机名称2或者IP2(参数3,参数4)

上面这个格式表示,同一个目录分享给两个不同的主机,但提供给这两台主机的权限和参数是不同的,所以分别设定两个主机得到的权限。

Exports文件中可以设定的参数主要有以下这些:

参数? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?说明

Ro? ?? ?? ?? ?? ?? ?? ?? ?? ? 该主机对该共享目录有只读权限
Rw? ?? ?? ?? ?? ?? ?? ?? ?? ? 该主机对该共享目录有读写权限
Root_squash? ?? ?? ?? ?客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户
No_root_squash? ?? ? 客户机用root访问该共享文件夹时,不映射root用户
All_squash? ?? ?? ?? ?? ? 客户机上的任何用户访问该共享目录时都映射成匿名用户
Anonuid? ?? ?? ?? ?? ?? ???将客户机上的用户映射成指定的本地用户ID的用户
Anongid? ?? ?? ?? ?? ?? ???将客户机上的用户映射成属于指定的本地用户组ID
Sync? ?? ?? ?? ?? ?? ?? ?? ? 资料同步写入到内存与硬盘中
Async? ?? ?? ?? ?? ?? ?? ???资料会先暂存于内存中,而非直接写入硬盘
Insecure? ?? ?? ?? ?? ?? ? 允许从这台机器过来的非授权访问

例如可以编辑/etc/exports为:

/??user01(rw) user02(rw,no_root_squash)? ?表示共享服务器上的根目录(/)只有user01和user02两台主机可以访问,且有读写权限;user01主机用root用户身份访问时,将客户机的root用户映射成服务器上的匿名用户(root_squash,该参数为缺省参数),相当于在服务器使用nobody用户访问目录;user02主机用root用户身份访问该共享目录时,不映射root用户(no_root_squash),即相当于在服务器上用root身份访问该目录

/root/share/??192.168.1.2(rw,insecure,sync,all_squash)??表示共享服务器上的/root/share/目录只有192.168.1.2主机可以访问,且有读写权限;此主机用任何身份访问时,将客户机的用户都映射成服务器上的匿名用户(all_squash),相当于在服务器上用nobody用户访问该目录(若客户机要在该共享目录上保存文件(即写操作),则服务器上的nobody用户对该目录必须有写的权限)

/home/ylw/??*.test.com (rw,insecure,sync,all_squash)? ?表示共享/home/ylw/目录,*.test.com域中所有的主机都可以访问该目录,且有读写权限

/home/share/??.test.com (ro,sync,all_squash,anonuid=zh3,anongid=wa4)? ???表示共享目录/home/share/,*.test.com域中的所有主机都可以访问,但只有只读的权限,所有用户都映射成服务器上的uid为zh3、gid为wa4的用户

设定好后可以使用以下命令启动NFS:

service nfs restart??

exportfs命令:

如果我们在启动了NFS之后又修改了/etc/exports,是不是还要重新启动nfs呢?这个时候我们就可以用exportfs命令来使改动立刻生效,该命令格式如下:

exportfs [-aruv]

-a :全部mount或者unmount /etc/exports中的内容
-r :重新mount /etc/exports中分享出来的目录
-u :umount 目录
-v? ? 在export的时候,将详细的信息输出到屏幕上
具体例子:
[root @test root]# exportfs -rv <==全部重新 export 一次!
exporting 192.168.1.2:/root/share
exporting *.test.com:/home/ylw
exporting *.test.com:/home/share
reexporting 192.168.1.100:/home/test to kernel
exportfs -au <==全部都卸载了。

二、客户段的操作:

1、showmout命令对于NFS的操作和查错有很大的帮助,所以我们先来看一下showmount的用法
showmout
-a :这个参数是一般在NFS SERVER上使用,是用来显示已经mount上本机nfs目录的cline机器。
-e :显示指定的NFS SERVER上export出来的目录。
例如:
showmount -e 192.168.1.2
Export list for localhost:
/tmp *
/home/linux *.linux.org
/home/public (everyone)
/home/test 192.168.1.12

2、mount nfs目录的方法:

mount -t nfs hostname(orIP):/directory /mount/point

具体例子:
Linux: mount -t nfs 192.168.0.1:/tmp /mnt/nfs
Solaris:mount -F nfs 192.168.0.1:/tmp /mnt/nfs
BSD: mount 192.168.0.1:/tmp /mnt/nfs

3、mount nfs的其它可选参数:

HARD mount和SOFT MOUNT:
HARD: NFS CLIENT会不断的尝试与SERVER的连接(在后台,不会给出任何提示信息,在LINUX下有的版本仍然会给出一些提示),直到MOUNT上。
SOFT:会在前台尝试与SERVER的连接,是默认的连接方式。当收到错误信息后终止mount尝试,并给出相关信息。
例如:mount -F nfs -o hard 192.168.0.10:/nfs /nfs
对于到底