NFS-NetworkFileSystem的缩写,NFS是由Sun开发并发展起来的一项用于在不同机器,不同操作系统之间通过网络互相分享各自的文件。NFS server也可以看作是一个FILE SERVER,它可以让你的PC通过网络将远端得NFS SERVER共享出来的档案MOUNT到自己的系统中,在CLIENT看来使用NFS的远端文件就象是在使用本地文件一样。
1.1 系统环境
操作系统:
CentOS 7.2 1511
软件版本:
samba-4.2.3-10.el7.x86_64.rpm;rpcbind-0.2.0-32.el7.x86_64
Samba Server IP:
192.168.192.91
防火墙已关闭/iptables:
Firewall is notrunning.
SELINUX=disabled
1.2 软件安装
在可以联网的机器上使用yum工具安装,如果未联网,则挂载系统光盘进行安装。
[root@node2 ~]# yum install nfs-util rpcbind
有依赖关系的包将自动安装上去。
若未配置yum源,直接将安装光盘解压,从Packages目录下获取nfs-util和rpcbind安装包,在安装过程中,缺少哪个rpm包,则查找并安装之(相关的rpm包均在Packages目录下)。
1.3 服务管理
1.3.1 NFS服务
NFS服务可用通过systemctl来管理。
1. 服务启动
[root@node1 ~]# systemctl start nfs-server
[root@node1 ~]#
2. 服务停止
[root@node1 ~]# systemctl stop nfs-server
[root@node1 ~]#
3. 服务重启
[root@node1 ~]# systemctl restart nfs-server
[root@node1 ~]#
4.查看服务状态
[root@node1 ~]# systemctl status nfs-server
● nfs-server.service - NFS server and services
Loaded:loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset:disabled)
Active:inactive (dead)
[root@node1 ~]#
5. 设置服务开机启动
[root@node1 ~]# systemctl enable nfs-server
[root@node1 ~]#
6. 取消服务开机启动
[root@node1 ~]# systemctl disable nfs-server
[root@node1 ~]#
如何验证rpc是否支持NFS
[root@node1 ~]# rpcinfo -u localhost nfs
rpcinfo: RPC: Program not registered
program 100003 is not available
[root@node1 ~]# systemctl start nfs
[root@node1 ~]# rpcinfo -u localhost nfs
program 100003 version 3 ready and waiting
program 100003 version 4 ready and waiting
[root@node1 ~]#
1.4 配置文件
NFS服务的配置文件为/etc/export
1.4.1 参数解析
NFS主要有3类选项:
1.4.1.1 访问权限选项
设置输出目录只读:ro
设置输出目录读写:rw
1.4.1.2 用户映射选项
all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
no_all_squash:与all_squash取反(默认设置);
root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置);
no_root_squash:与rootsquash取反;
anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);
1.4.1.3 其它选项
secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
no_wdelay:若有写操作则立即执行,应与sync配合使用;
subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;
1.4.2 配置文件
配置文件正确性检查:
[root@node1 ~]# cat /etc/exports
/mnt/mypceph *(rw,sync,no_root_squash,fsid=2)
…
1.5 客户段命令与参数解析
客户端为192.168.192.92,node2
1.5.1 客查询命令showmount
showmout命令对于NFS的操作和查错有很大的帮助,showmount的用法 :
[root@node0 ~]# showmount -h
Usage: showmount [-adehv]
[--all] [--directories] [--exports]
[--no-headers] [--help] [--version] [host]
[root@node0 ~]#
-a :这个参数是一般在NFSSERVER上使用,是用来显示已经mount上本机nfs目录的cline机器。
-e :显示指定的NFSSERVER上export出来的目录。
例如:
[root@node2 ~]# showmount -e 192.168.192.91
Export list for 192.168.192.91:
/mnt/test *
[root@node2 ~]#
1.5.2 挂载NFS共享目录
挂载命令格式为:
mount -t nfs [-o<参数>] <hostname/IP>:/export_dir_path /mountpoint
实例:
[root@node2 ~]# mount -t nfs -o nolock 192.168.192.91:/mnt/nfsshare/mnt/test/
mount nfs的其它可选参数:
hard: NFS CLIENT会不断的尝试与SERVER的连接(在后台,不会给出任何提示信息,在LINUX下有的版本仍然会给出一些提示),直到mount上。
soft:会在前台尝试与SERVER的连接,是默认的连接方式。当收到错误信息后终止mount尝试,并给出相关信息。 例如:
[root@node2 ~]# mount -t nfs -o nolock,hard192.168.192.91:/mnt/nfsshare /mnt/test/
对于到底是使用hard还是soft的问题,这主要取决于你访问什么信息有关。例如你是想通过NFS来运行X PROGRAM的话,你绝对不会希望由于一些意外的情况(如网络速度一下子变的很慢,插拔了一下网卡插头等)而使系统输出大量的错误信息,如果此时你用的是HARD方式的话,系统就会等待,直到能够重新与NFS SERVER建立连接传输信息。另外如果是非关键数据的话也可以使用SOFT方式,如FTP数据等,这样在远程机器暂时连接不上或关闭时就不会挂起你的会话过程。
rsize/wsize: 文件传输尺寸设定:V3没有限定传输尺寸,V2最多只能设定为8k,可以使用-rsize and -wsize 来进行设定。这两个参数的设定对于NFS的执行效能有较大的影响
bg:在执行mount时如果无法顺利mount上时,系统会将mount的操作转移到后台并继续尝试mount,直到mount成功为止。(通常在设定/etc/fstab文件时都应该使用bg,以避免可能的mount不上而影响启动速度)
fg:和bg正好相反,是默认的参数
nfsvers=n:设定要使用的NFS版本,默认是使用2,这个选项的设定还要取决于server端是否支持NFS VER3
mountport:设定mount的端口
port:根据server端export出的端口设定,例如如果server使用5555端口输出NFS,那客户端就需要使用这个参数进行同样的设定
timeo=n:设置超时时间,当数据传输遇到问题时,会根据这个参数尝试进行重新传输。默认值是7/10妙(0.7秒)。如果网络连接不是很稳定的话就要加大这个数值,并且推荐使用HARD MOUNT方式,同时最好也加上INTR参数,这样你就可以终止任何挂起的文件访问。
intr : 允许通知中断一个NFS调用。当服务器没有应答需要放弃的时候有用处。
udp:使用udp作为nfs的传输协议(NFS V2只支持UDP)
tcp:使用tcp作为nfs的传输协议
namlen=n:设定远程服务器所允许的最长文件名。这个值的默认是255
acregmin=n:设定最小的在文件更新之前cache时间,默认是3
acregmax=n:设定最大的在文件更新之前cache时间,默认是60
acdirmin=n:设定最小的在目录更新之前cache时间,默认是30
acdirmax=n:设定最大的在目录更新之前cache时间,默认是60
actimeo=n:将acregmin、acregmax、acdirmin、acdirmax设定为同一个数值,默认是没有启用。
retry=n:设定当网络传输出现故障的时候,尝试重新连接多少时间后不再尝试。默认的数值是10000 minutes
noac:关闭cache机制。
同时使用多个参数的方法:mount -t nfs -o timeo=3,udp,hard 192.168.0.30:/tmp /nfs