NFS服务简介
NFS是Network File System的缩写,即网络文件系统。NFS是由Sun开发并发展起来的一项用于在不同机器,不同操作系统之间通过网络互相分享各自的文件。NFS server也可以看作是一个FILE SERVER,用于在UNIX类系统之间共享文件,可以轻松的挂载(mount)到一个目录上,操作起来就像本地文件一样的方便。
一、nfs-server(192.168.2.1)
1、检查是否安装
[root@host ~]# rpm -qa |grep nfs //查看是否安装了nfs
nfs-utils-lib-1.0.8-7.6.el5
nfs-utils-1.0.9-42.el5 //nfs主程序,已安装
2、NFS配置文件设置
若要共享目录或文件,需要在共享清单中指明该文件/etc/exports (语法参照 man exports)
#vim /etc/exports
/home/nfs 192.168.2.0/24(rw,sync) (192.168.2.0网段的用户对/home/nfs NFS卷具有读写)
/media/cdrom 192.168.2.*(ro) (192.168.2.0网段的用户对/media/cdromNFS卷具有读)
注:/etc/exports,配置文件有三部分: 输出目录,客户端,参数选项
a、输出目录是指NFS系统中需要共享给客户机使用的目录;
客户端是指网络中可以访问这个NFS输出目录的计算机
b、客户端常用的指定方式
指定ip地址的主机 192.168.0.200
指定子网中的所有主机 192.168.0.0/24
指定域名的主机 a.liusuping.com
指定域中的所有主机 *.liusuping.com
所有主机 *
c、选项:
选项用来设置输出目录的访问权限、用户映射等。NFS主要有3类选项:
访问权限选项
设置输出目录只读 ro
设置输出目录读写 rw
用户映射选项
all_squash 将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
no_all_squash 与all_squash取反(默认设置);
root_squash 将root用户及所属组都映射为匿名用户或用户组(默认设置);
no_root_squash 与rootsquash取反;
anonuid=xxx 将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
anongid=xxx 将远程访问的所有用户组都映射为匿名用 户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);
其它选项
secure 限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
insecure 允许客户端从大于1024的tcp/ip端口连接服务器;
sync 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
async 将数据先保存在内存缓冲区中,必要时才写入磁盘;
wdelay 检查是否有相关的写操作,如果有则将这些写操作 一起执行,这样可以提高效率(默认设置);
no_wdelay 若有写操作则立即执行,应与sync配合使用;
subtree 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
no_subtree 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率
3、启动nfs服务
# service nfs start
启动 NFS 服务: [确定]
关掉 NFS 配额: [确定]
启动 NFS 守护进程: [确定]
启动 NFS mountd: [确定]
4、查看自己的rpc进程,与NFS相关的是否正常开启,如下表明已经正常开启:
#rpcinfo -p 192.168.2.1 (本机ip,)
100011 1 udp 821 rquotad
.........
100003 2 udp 2049 nfs
........
100021 1 tcp 34647 nlockmgr
.......
100005 1 udp 852 mountd
........
5、导出共享清单
[root@host ~]# exportfs -rv
exporting 192.168.2.0/24:/home/nfs
exporting 192.168.2.*:/media/cdrom
二、nfs客户端(192.168.2.20/24)
1、查看自己的rpc进程是否开启
[root@client ~]# rpcinfo -p
程序 版本 协议 端口
100000 2 tcp 111 portmapper
........
100024 1 udp 794 status
........
100021 1 udp 58859 nlockmgr
........
2、查看nsf-server的exports文件是否可以访问:
[root@client ~]# showmount -e 192.168.2.1
Export list for 192.168.2.1:
/media/cdrom 192.168.2.*
/home/nfs 192.168.2.0/24
3、创建挂载点,手动挂载
#mkdir /tmp/abc
#mkdir /tmp/cdrom
# mount 192.168.2.1:/home/nfs /tmp/abc
# mount 192.168.2.1:/media/cdrom /tmp/cdrom
4、设置开机自动挂载
#vim /etc/fstab
192.168.2.1:/home/nfs /tmp/abc nfs defaults,soft,intr 0 0
192.168.2.1:/media/cdrom /tmp/cdrom nfs defaults,soft,intr 0 0
注:(soft、intr等参数可查看man nfs)
-ro,soft,intr: -ro:挂载时的权限,soft:如果有I/O错误时,会告知系统,中继挂载;intr:挂载时有大量超时时,中继挂载,并告知系统。
#umount /tmp/cdrom /tmp/abc
#mount -a
5、这种方式的挂载需要消耗大量的资源来维持连接,可以使用自动挂载当切换到该目录时进行挂载,退出时,取消挂载
a、安装autofs软件包
[root@client tmp]# rpm -qa|grep autofs
autofs-5.0.1-0.rc2.131.el5
b、编辑autofs的配置文件/etc/auto.master
#vim /etc/auto.master
/tmp /etc/nfs.misc --timeout=08
/tmp /etc/nfs.misc --timeout=08
:wq
c、编辑要求的产生/etc/nfs.misc
#vim /etc/nfs.misc
abc -fstype=nfs 192.168.2.1:/home/nfs
cdrom -fstype=nfs 192.168.2.1:/media/cdrom
:wq
d、启动autofs服务
#service autofs start
#rm -rf /tmp/abc
#rm -rf /tmp/cdrom
e、测试
注:abc、cdrom : 本地目录,我们不需要创建它,用于挂载远程共享文件192.168.2.1:/home/nfs,在我们想要使用远程共享文件/home/nfs时,只要在本地目录/tmp下键入cd abc 系统就会自动挂载到远程共享目录:192.168.2.10:/home/nfs,我们就可以正常使用里面的共享文件了 ,在到达超时时间时就会自动卸载。
f、以rw自动挂载/home/nfs/ NFS卷到/tmp/abc目录下,却发现无法创建目录,因为nfs-server的本地目录还没有写权限,
[root@client abc]# touch nfs.txt
touch: 无法触碰 “nfs.txt”: 权限不够
g、nfs-server服务端修改/home/nfs的本地权限
[root@host home]# chmod o+wt nfs/
就可以正常创建了,
[root@client abc]# touch nfs.txt
[root@client abc]# dir
hello-word.txt nfs.txt nft-test
实验结束。
注:NFS客户端与NFS服务器在连接上之后,为了保证其正常的连接,NFS客户端与NFS服务器之间要不断的发送数据包,来宣告自己还在与NFS服务器进行着连接,但是,如果一个NFS服务器上有许多的客户端一直连接的话,NFS服务器会承受很大的带宽压力,这对NFS服务器的正常使用会造成很大的影响,因此,为了避免这种情况的发生,人们就想到了一种方法,让NFS客户端在获取数据时与NFS服务器进行连接,而在没有获取数据的时间内,自动的断开与NFS服务器之间的连接,但只要客户端发送获取数据的请求进,客户端就与服务器自动连接上,自动挂载的方法对客户端主机与服务器主机都有很大的好处。配置方法是在NFS客户端方面进行配置的
强制 umount nfs文件系统
umount.nfs: /app/nfs: device is busy
umount.nfs: /app/nfs: device is busy
root@ubuntu:/# fuser -km /app/nfs/ 先使用这条命令
/data/nfs/: 8119c
root@ubuntu:/# umount /app/nfs/ 在umount 就可以了
root@ubuntu:/#
一、NFS服务常见故障排查:
NFS服务出现了故障,主要从以下几个方面检查原因:
(1)检查NFS客户机和服务器的负荷是否太高,Server和Client之间的网络是否正常;
(2)检查/etc/exports文件的正确性;
(3)必要时重启NFS和portmap服务;
(4)运行下列命令重新启动portmap和NFS:
# /etc/init.d/portmap restart
# /etc/init.d/nfs restart
# /etc/init.d/rpcbind restart (在RHEL/CentOS 6.x里面)
# chkconfig portmap on
# chkconfig nfs on
# chkconfig rpcbind on (在RHEL/CentOS 6.x里面)
注意:在RHEL/CentOS 6.x里面,portmap服务改名为rpcbind服务了;顺便说一下,rpcbind服务也是图形界面的关键基础服务,不启动此服务,不能启动图形桌面。
(5) 检查Client上的mount命令或/etc/fstab的语法是否正确;
(6) 查看内核是否支持NFS和RPC服务。一般正常安装的Linux系统都会默认支持NFS和RPC服务,除非你自己重新编译的内核,而且没选择nfs支持选项编译。
二、NFS常见故障解决方法:
1、The rpcbind failure error
故障现象:
nfs mount: server1:: RPC: Rpcbind failure
RPC: Timed Out
nfs mount: retrying: /mntpoint
原因:
第一,可能因为客户机的hosts文件中存在错误的ip地址、主机名或节点名组合;
第二,服务器因为过载而暂时停止服务。2、The server not responding error
现象:
NFS server server2 not responding, still trying
原因:
第一,网络不通,用ping命令检测一下。
第二,服务器关机。3、The NFS client fails a reboot error
现象:
启动客户机后停住了,不断显示如下提示信息:
Setting default interface for multicast: add net 224.0.0.0: gateway:
client_node_name.
原因:
在etc/vfstab的mount选项中使用了fg而又无法成功mount服务器上的资源,改成bg或将该行注释掉,直到服务器可用为止。4、The service not responding error
现象:
nfs mount: dbserver: NFS: Service not responding
nfs mount: retrying: /mntpoint
原因:
第一,当前级别不是级别3,用who -r查看,用init 3切换。
第二,NFS Server守护进程不存在,用ps -ef | grep nfs检查,用/etc/init.d/nfs start启动。5、The program not registered error
现象:
nfs mount: dbserver: RPC: Program not registered
nfs mount: retrying: /mntpoint
原因:
第一,当前级别不是级别3。
第二,mountd守护进程没有启动,用/etc/init.d/nfs脚本启动NFS守护进程。
第三,看/etc/dfs/dfstab中的条目是否正常。6、The stale file handle error
现象:
stale NFS file handle
原因:
服务器上的共享资源移动位置了,在客户端使用umount和mount重新挂接就可以了。7、The unknown host error
现象:
nfs mount: sserver1:: RPC: Unknown host
原因:
hosts文件中的内容不正确。8、The mount point error
现象:
mount: mount-point /DS9 does not exist.
原因:
该挂接点在客户机上不存在,注意检查命令行或/etc/vfstab文件中相关条目的拼写。9、The no such file error
现象:
No such file or directory.
原因:
该挂接点在服务器上不存在,注意检查命令行或/etc/vfstab文件中相关条目的拼写。10、No route to host
错误现象:
# mount 10.10.11.211:/opt/data/xmldb /c2c-web1/data/xmldb -t nfs -o rw
mount: mount to NFS server ’10.10.11.211′ failed: System Error: No route to host.原因:
防火墙被打开,关闭防火墙。
这个原因很多人都忽视了,如果开启了防火墙(包括iptables和硬件防火墙),NFS默认使用111端口,我们先要检测是否打开了这个端口,还要检查TCP_Wrappers的设定。11、Not owner
现象:
# mount -F nfs -o rw 10.10.2.3:/mnt/c2c/data/resinfo2 /data/data/resinfo2
nfs mount: mount: /data/data/resinfo2: Not owner原因:
这是Solaris 10版本挂载较低版本nfs时报的错误。解决:
需要用-o vers=3参数示例:
# mount -F nfs -o vers=3 10.10.2.3:/mnt/c2c/data/resinfo2 /data/data/resinfo212、RPC: Program not registered & retrying
现象:
nfs mount: 10.10.2.3: : RPC: Program not registered
nfs mount: retrying: /data/data/resinfo2原因:
没有启动NFS共享端服务。解决:需要重新启动share端的NFS服务,
Linux:
mount: RPC: Program not registered
# /etc/init.d/nfs restartSolaris:
mount: RPC: Program not registered
# /etc/rc.d/init.d/nfs restart13、can’t contact portmapper: RPC: Remote system error – Connection refused
现象:
# exportfs -a
can’t contact portmapper: RPC: Remote system error – Connection refused原因:
出现这个错误信息是由于server端的portmap没有启动。解决:
# /etc/init.d/portmap start