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类医疗器械目录高值医用耗材参考目录
主机名称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
对于到底是使用hard还是soft的问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
,这主要取决于你访问什么信息有关。例如你是想通过NFS来运行X PROGRAM的话,你绝对不会希望由于一些意外的情况(如网络速度一下子变的很慢,插拔了一下网卡插头等)而使系统输出大量的错误信息,如果此时你用的是HARD方式的话,系统就会等待,直到能够重新与NFS SERVER建立连接传输信息。另外如果是非关键数据的话也可以使用SOFT方式,如FTP数据等,这样在远程机器暂时连接不上或关闭时就不会挂起你的会话过程。
4、/etc/fstab的设定方法
若客户机启动就自动挂载服务器的共享目录,则需修改客户机上的/etc/fstab文件
/etc/fstab格式:(192.168.1.1:/share /mnt nfs defaults 0 2)
Fs_spec fs_file fs_type fs_options fs_dump fs_pass
Fs_spec:定义希望加载的文件系统所在的设备或远程文件系统,对于nfs则设为IP:/共享目录
Fs_file:本地挂载点
Fs_type:挂载类型
Fs_options:挂载参数
Fs_dump:该选项被“dump”命令使用来检查一个文件系统该以多快频率进行转储,若不需转储即为0 Fs_pass:该字段被fsck命令使用来决定在启动时需要被扫描的文件系统的顺序,根文件系统“/”对应该字段值为1,其他文件系统为2,若该文件系统无需在启动时被扫描则为0
5、与NFS有关的一些命令介绍
nfsstat:
查看NFS的运行状态,对于调整NFS的运行有很大帮助
rpcinfo:
查看rpc执行信息,可以用于检测rpc运行情况的工具。
三、NFS故障解决
1、NFSD没有启动起来
首先要确认NFS 输出列表存在,否则nfsd 不会启动。可用exportfs 命令来检查,如果exportfs 命令没有结果返回或返回不正确,则需要检查/etc/exports 文件。
2、mountd 进程没有启动
mountd 进程是一个远程过程调用(RPC) ,其作用是对客户端要求安装(mount)文件系统的申请作出响应。mountd进程通过查找/etc/xtab文件来获知哪些文件系统可以被远程客户端使用。另外,通过mountd进程,用户可以知道目前有哪些文件系统已被远程文件系统装配,并得知远程客户端的列表。查看mountd是否正常启动起来可以使用命令rpcinfo进行查看,在正常情况下在输出的列表中应该象这样的行:
100005 1 udp 1039 mountd
100005 1 tcp 1113 mountd
100005 2 udp 1039 mountd
100005 2 tcp 1113 mountd
100005 3 udp 1039 mountd
100005 3 tcp 1113 mountd
如果没有起来的话可以检查是否安装了PORTMAP组件。
rpm -qa|grep portmap
3、fs type nfs no supported by kernel
kernel不支持nfs文件系统,重新编译一下KERNEL就可以解决。
4、can't contact portmapper: RPC: Remote system error - Connection refused
出现这个错误信息是由于SEVER端的PORTMAP没有启动。
5、mount clntudp_create: RPC: Program not registered
NFS没有启动起来,可以用showmout -e host命令来检查NFS SERVER是否正常启动起来。
6、mount: localhost:/home/test failed, reason given by server: Permission denied
这个提示是当client要mount nfs server时可能出现的提示,意思是说本机没有权限去mount nfs server上的目录。解决方法当然是去修改NFS SERVER咯。
7、被防火墙阻挡
这个原因很多人都忽视了,在有严格要求的网络环境中,我们一般会关闭linux上的所有端口,当需要使用哪个端口的时候才会去打开。而NFS默认是使用111端口,所以我们先要检测是否打开了这
个端口,另外也要检查TCP_Wrappers的设定。
四、NFS安全
加强NFS安全的方法:
1、合理的设定/etc/exports中共享出去的目录,最好能使用anonuid,anongid以使MOUNT到NFS SERVER的CLIENT仅仅有最小的权限,最好不要使用root_squash。
2、使用IPTABLE防火墙限制能够连接到NFS SERVER的机器范围
iptables -A INPUT -i eth0 -p TCP -s 192.168.0.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p UDP -s 192.168.0.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p TCP -s 140.0.0.0/8 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p UDP -s 140.0.0.0/8 --dport 111 -j ACCEPT
3、为了防止可能的Dos攻击,需要合理设定NFSD 的COPY数目。
4、修改/etc/hosts.allow和/etc/hosts.deny达到限制CLIENT的目的
/etc/hosts.allow
portmap: 192.168.0.0/255.255.255.0 : allow
portmap: 140.116.44.125 : allow
/etc/hosts.deny
portmap: ALL : deny
5、改变默认的NFS 端口
NFS默认使用的是111端口,但同时你也可以使用port参数来改变这个端口,这样就可以在一定程度上增强安全性。
五、实例
最后简单讲一下我在服务器上的配置过程
第一步:在服务器上
# vi /etc/exports
/home/ylw www.ylw.com(rw, sync, insecure)
配置好后运行:
# service nfs start
第二步在客户端
#mount -t nfs www.ylw.com:/home/ylw /home/ylwclient
没有出错提示,NFS就正常运行了,你在客户机上/home/ylwclient里看到的目录文件其实就是服务器上/home/ylw的内容。
说明:一开始我在配置/etc/exports文件时没有加“insecure"参数,在客户机上mount时,出现提示: mount:www.ylw.com:/home/ylw failed, reason given by server:权限不够
加上该参数后运行就成功了。
另外:因为linux系统有很强的权限管理,不同的目录属于不同的用户,服务器端与客户端的用户不同,有可能导致虽然已经将服务器端的目录mount到客户端了,但在客户端只能看而不能写,除非你用ROOT帐户进入,这又带来安全问题。我的解决办法是在客户端上建一个与服务器端目录属主ID一样的用户,比如:
服务器端/home/ylw目录属主为ylw 其ID为510 (具体看/etc/passwd文件)
在客户端建一用ylwclient,将其ID改为510 且将客户端/home/ylwclient目录的属主改为ylwclient
这样就可真正在像本机目录一样读写操作了。
一、查看是否安装NFS(portmap是用于RPC传输的)
# rpm -q nfs-utils portmap
nfs-utils-1.0.9-47.el5_5
portmap-4.0-65.2.2.1
二、配置
1。配置文件
# vi /etc/exports
配置实例:
1)/nfs/public 192.168.16.0/24(rw,async) *(ro)
共享目录客户机1 客户机2
nfs/public共享目录可供子网192.168.16.0/24中的所有客户端进行读写操作,其它网络中的客户端只能有读取操作权限。
2)/home/test 192.168.0.0/24(rw,no_root_squash,async)
no_root_squash:不讲root用户及所属用户组映射为匿名用户或用户组,默认root是被映射为匿名用户的nfsnobody,所有即使开了rw写权限,客户机也使无法写入的,这个不映射为匿名用户,还保留原来的用户权限就可以读写了,因为一般都是用root用户登录的。
注意:当客机是否有写权限时,还要看该目录对该用户有没有开放写入权限
三、维护NFS
格式:
exportfs 选项参数
-a:输出/etc/exports中设置的所有目录
-r:重新读取/etc/exports文件中的设置,并且立即生效,而不需要重新启动NFS服务。
-u:停止输出某一目录
-v:在输出目录时,将目录显示在屏幕上。
1.修改vi /etc/exports后,不用重启服务,直接使用命令输出共享目录
# exportfs -rv
2.停止输出所有共享目录
# exportfs -auv
四、启动和停止NFS服务
1.启动NFS服务
为了是NFS正常工作,需要启动portmap和nfs这两个目录,并且portmap一定要先于nfs启动。# /etc/init.d/portmap start
# /etc/init.d/nfs start
2.停止NFS 服务
停止NFS服务器前,需要先停止NFS服务再停止portmap服务。如果系统中还有其它服务需要portmap时,则可以不用停止portmap服务。
/etc/init.d/nfs stop
/etc/init.d/portmap stop
3。自启动NFS服务
chkconfig --level 35 portmap on
chkconfig --level 35 nfs on
五、测试
1.检查输出目录所使用的选项
在/etc/exports配置文件中,即使只设置了一两个选项,在真正输出目录时,实际上还带了很多某人选项。通过查看/var/lib/nfs/etab文件,就可以知道真正输出目录时,都是用了什么选项。
2.使用showmount测试NFS输出目录状态
格式:
showmount 参数选项nfs服务器名称或地址
-a:显示指定的nfs服务器的所有客户端主机及其所连接的目录
-d:显示指定的nfs服务器中已经被客户端连接的所有共享目录
-e:显示指定的nfs服务器上所有输出的共享目录
(1)查看所有输出的共享目录
# showmount -e
(2)显示所有被挂载的所有输出目录
# showmount -d
六、nfs客户端使用配置
1.查看nfs服务器信息
在客户端,要查看nfs服务器上有哪些共享目录,可以使用showmount命令。
# showmount -e 192.168.0.51
如果出现报错信息,首先查看服务器nfs和portmap服务是否启动。再看是否被防火墙屏蔽掉了。
2.挂载nfs服务器上的共享目录
# mount -t nfs 192.168.0.51:/home/test /mnt/
-t:指定挂载设备的文件类型(nfs是网络文件系统)
192.168.0.51:nfs服务器ip地址
/home/test :nfs服务器的共享目录
/mnt/:挂载在本地的目录
3.卸载nfs
在不使用nfs目录时,可以用umount命令来卸载该目录
注意:当有客户机正在连接nfs服务器时,此时想要将nfs服务器关机,应该先关掉portmap和nfs 这两个服务,否则要等很久才能正常关机。如果无法将portmap和nfs关掉,就直接kill掉进程。也可以用exportmap -auv命令将当前主机中的所有输出目录停止后再关机。
4.启动时自动连接nfs服务器
要先在启动时自动连接nfs服务器上的共享目录,要编辑/etc/fstab文件。在文件中加入
192.168.0.51:/home/test /mnt nfs defaults 0 0
192.168.0.51:/home/test:nfs服务器的共享目录
/mnt:本机挂载目录
-------------------------------------------------
拷贝时cp命令常用参数
cp -a -v /mnt /home/
- a 该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录,其作用等于dpR选项的组合。
-v或–verbose 显示指令执行过程。
-V<备份方式>或–version-control=<备份方式> 用”-b”参数备份目标文件后,备份文件的字尾会被加
上一个备份字符串,这字符串不仅可用”-S”参数变更,当使用”-V”参数指定不同备份方式时,也会产生不同字尾的备份字串。
- i 和f选项相反,在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷贝。