NFS概念介绍
NFS是Network File System的缩写,中文意思是网络文件系统,
它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录
NFS软件只能在linux上使用,如果想让windows和linux之间实现数据共享,建议使用(FTP/samba)
socket条目是由5元组组成:协议 目标IP地址 目标端口 源IP地址 源端口
RPC服务介绍:
相当于租房中的中介
NFS服务启动会产生多个进程和多个端口,不便于客户端进行连接访问
通过RPC服务接收NFS端口信息的注册,并通过开启RPC服务生成111端口,提供客户端进行访问
部署过程(我在这里用里程碑的形式说明)
第一个里程碑:检查nfs和rpc服务软件有没有安装
rpm -qa nfs-utils rpcbind
yum install nfs-utils rpcbind -y
rpcbind软件重要信息
/etc/rc.d/init.d/rpcbind
/usr/sbin/rpcinfo
nfs-utils软件重要信息
/etc/rc.d/init.d/nfs
/usr/sbin/showmount
第二里程碑:启动网络文件系统服务
/etc/init.d/rpcbind start
rpcinfo -p 172.16.1.31
/etc/init.d/nfs start
rpcinfo -p 172.16.1.31
第三里程碑:配置nfs服务配置文件
cat >>/etc/exports<<EOF
/data 172.16.1.0/24(rw,sync)
EOF
第四里程碑:创建共享目录
mkdir /data -p
id nfsnobody
chown -R nfsnobody.nfsnobody /data
ll /data/ -d
第五里程碑:重启nfs服务
/etc/init.d/nfs reload 平滑重启
/etc/init.d/nfs restart 强硬重启
第六个里程碑:检查共享目录是否创建成功
rpcinfo -p localhost ---检查房源信息是否存在(检查nfs服务有注册端口信息)
showmount -e 172.16.1.31 ---检查共享目录列表信息
mount -t nfs 172.16.1.31:/data /mnt
至此nfs服务端配置完毕
nfs的客户端的部署过程
第一个里程碑:检查nfs和rpc服务软件有没有安装
rpm -qa nfs-utils rpcbind
yum install nfs-utils rpcbind -y
疑问:是不是可以不安装nfs-utils软件
01. 如果不安装nfs软件就没有showmount命令,无法检查共享目录信息
02. 如果不安装nfs软件就无法识别nfs文件系统类型,无法进行挂载操作
# mount -t nfs 172.16.1.31:/data
mount: wrong fs type, bad option, bad superblock on 172.16.1.31:/data,
missing codepage or helper program, or other error
(for several filesystems (e.g. nfs, cifs) you might
need a /sbin/mount.<type> helper program)
In some cases useful info is found in syslog - try
dmesg | tail or so
第二个里程碑:进行nfs共享目录挂载
mount -t nfs 172.16.1.31:/data /mnt
卸载共享目录:
01. 退出共享目录,再进行卸载
umount /mnt
02. 不退出共享目录,强制进行卸载
umount -lf /mnt
-l Lazy unmount ---懒惰的卸载
-f Force unmount ---强制的卸载
修改匿名用户信息实践
第一个里程:创建指定匿名用户
注意:服务端与客户端的匿名用户gid uid信息必须一致
useradd www -u 888
id www
uid=888(www) gid=888(www) groups=888(www)
第二个里程:修改nfs配置文件
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=888,anongid=888)
第三个里程:重新授权共享目录
chown -R www.www /data
第四个里程:重启nfs服务
/etc/init.d/nfs reload
第五个里程:客户端挂载目录,测试用户映射
mount -t nfs 172.16.1.31:/data /mnt
df -h
touch alex.txt
touch jeson.txt
ll
total 0
-rw-r--r-- 1 nobody nobody 0 2017-08-19 14:36 alex.txt
-rw-r--r-- 1 nobody nobody 0 2017-08-19 14:37 jeson.txt
说明:在服务端,用户信息已经完成了映射,都映射成了默认www的匿名用户
在客户端,用户创建数据信息,在共享目录的挂载点上,权限都变为nobody
因为当默认匿名用户变化时,服务端与客户端的匿名用户gid uid信息必须一致
如果不一致,就会出现nobody用户权限的信息
例子测试
共享不同的两个目录,分别赋予读和写权限
服务端上面要求:
nfs服务器172.16.1.31,共享下面两个目录:
/data/w要求的权限可读写,同步数据,所有用户都压缩为匿名用户
/data/r要求的权限为只读,同步数据,所有用户都压缩为匿名用户
客户端上面要求:
backup服务器把NFS服务器的/data/r 挂载到/data/r
web01服务器把NFS服务器的/data/w 挂载到/data/w
验收信息:配置信息参考
[root@nfs01 r]# vim /etc/exports
#/data 172.16.1.0/24(rw,sync,all_squash)
/data/w 172.16.1.8/32(rw,sync,all_squash)
/data/r 172.16.1.41/32(ro,sync,all_squash)
说明:在配置共享目录时,需要要注意共享目录的权限也受上一级目录权限的影响,有继承关系
nfs常见问题拍错
ls: cannot open directory .: Stale file handle
nfs共享目录权限相关因素
①. 配置文件中的权限指定
②. 共享目录本身的权限,有w权限
③. 共享目录本身的所属用户与所属组的权限指定
NFS客户端挂载排错思路
客户端排查三部曲
①. 检查服务端房源信息是否还在
rpcinfo -p 172.16.1.31
②. 检查服务端共享目录信息是否存在
showmount -e 172.16.1.31
③. 直接进行目录挂载测试
mount -t nfs 172.16.1.31:/data /mnt
服务端排查三部曲
①. 检查服务端房源信息是否还在
rpcinfo -p localhost
如果没有注册的房源信息了,会是什么情况?
①. nfs服务没有启动
②. nfs服务于rpc服务启动顺序不正确
②. 检查服务端共享目录信息是否存在
showmount -e localhost
①. nfs配置文件编写错误
③. 直接进行目录挂载测试
mount -t nfs 172.16.1.31:/data /mnt
实现nfs客户端开机自动挂载方式
①. 将挂在命令追加到/etc/rc.local开机自启动文件中
②. 编写fstab文件,并且需要配合netfs服务使用,实现开机自动挂载
nfs常见问题拍错
示例1:客户端挂载报错“No such file or directory”
[root@nfs-client ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
[root@nfs-client ~]# mount -t nfs 172.16.1.31:/data /mnt
mount.nfs: mounting 172.16.1.31:/data failed, reason given by server: No such file or directory
解答:原因是NFS服务器端没有共享目录/data,创建即可。命令如下:
[root@nfs-server ~]# mkdir /data
示例2:NFS服务器端启动失败,如下:
[root@nfs-server ~]# /etc/init.d/nfs start
Starting NFS services:[ OK ]
Starting NFS quotas: Cannot register service: RPC: Unable to receive; errno = Connection refused
rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp).
[FAILED]
Starting NFS mountd:[FAILED]
Starting NFS daemon: rpc.nfsd: writing fd to kernel failed: errno 111 (Connection refused)
rpc.nfsd: unable to set any sockets for nfsd
[FAILED]
解答:这是因为RPC服务没有在NFS前面启动,需要先启动RPC服务再启动NFS,解决方法为,按顺序启动rpcbind及NFS,命令如下:
[root@nfs-server ~]# /etc/init.d/rpcbind restart
[root@nfs-server ~]# /etc/init.d/nfs restart
示例3:注册RPC服务失败,出现failed:RPC Error:Program not registered错误。
[root@nfs-client ~]# mount -t nfs 172.16.1.31:/data /mnt
mount.nfs: requested NFS version or transport protocol is not supported
[root@nfs-client ~]# showmount -e 172.16.1.31
clnt_create: RPC: Program not registered
解答:服务器端的NFS没有启动,客户端没有收到服务器端发来的随机端口信息。
解决方法如下:
[root@nfs-server ~]# /etc/init.d/rpcbind restart
[root@nfs-server ~]# /etc/init.d/nfs restart
示例4:卸载挂载设备时显示device is busy。
[root@nfs-client mnt]# umount /mnt
umount.nfs: /mnt: device is busy
umount.nfs: /mnt: device is busy
解答:有可能是当前目录就是挂载的NFS目录(/mnt),也有可能是NFS Server挂了。对于第一种情况,解决办法为退出挂载目录/mnt,再执行umount /mnt卸载。对于第二种情况,NFS Server挂了,NFS Client就会出现问题(df -h窗口会死掉),这时只能强制卸载,方法为:
umount -lf /mnt 其中的参数-f为强制卸载,参数-l为懒惰的卸载。
示例5:CentOS 6.6客户端NFS挂载时遇到问题。
[root@nfs-client ~]# mount -t nfs 172.16.1.31:/data /mnt
mount:wrong fs type,bad option,bad option,bad superblock on 10.0.0.7:/data,
missing codepage or helper program,or other error
(for several filesystems (e.g. nfs, cifs) you might
need a /sbin/mount.<type> helper program )
In some cases useful info is found in syslog - try
meg | tail or so
排查思路:同样的机器,NFS服务器本地可以挂载,但是客户端挂载时wrong fs type,因此尝试所有客户端安装nfs-utils。CentOS6.5及以前的NFS没有遇到这个问题。
解决方法:执行yum install nfs-utils -y,客户端安装NFS软件,但不启动服务。
示例六:共享目录挂载很卡
mount -t nfs 172.16.1.31:/data /mnt
cd /mnt
time touch test.txt
原因分析:
NFS服务端重启之后。立刻进行挂载会出现此问题,因为NFS自身重启的时候,拥有无敌的时间,默认是90秒;在无敌时间内,是不能对共享目录进行更改的操作;
在系统配置中/etc/sysconfig/nfs中指定了无敌时间的配置参数
NFSD_V4_GRACE=90
NFSD_V4_LEASE=90
NLM_GRACE_PERI0D=90
find /proc -name | grep -i ” NLM_GRACE_PERIOD”
find /proc -iname ” NLM_GRACE_PERIOD”
重启NFS服务没有按照顺序进行重启,一旦NFS重启了,需要确认rpcbind服务有没有接收,即rpcinfo -p localhost;先启动rpcbind服务再启动nfs服务
示例七:ls: cannot open directory .: Stale file handle
Stale file handle
客户端报错
mount -t nfs 172.16.1.31:/data /mnt
mount.nfs: Stale file handle
服务端挂载报错
[root@nfs01 data]# mount -t nfs 172.16.1.31:/
data /mnt/
mount.nfs: access denied by server while mounting 172.16.1.31:/data
查看配置文件发现
[root@nfs01 data]# cat /etc/exports
#share /data by lidao at 20160913
/data 173.16.1.0/24(rw,sync)
原因分析:
/proc/mounts客户端挂载文件中已经存在了相应的挂载记录,没有正确卸载掉,就再次进行挂载,就会出现以上错误。
发表评论