澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

澳门新浦京娱乐场网站设置配备nfs,NFS基本使用

1.1 概述

相仿ext亲族、xfs格式的本土文件系统,它们都以经过单个文件名称空间(name space)来含有众多文本,并提供基本的公文管理和空中分配作用。而文件是寄存在文件系统中(上述名称空间内)的单个命名对象,每一种文件都带有了文件实际多少和属性数据。然而,那些项指标文件系统和其内文件都以存放在该地主机上的。

事实上,还恐怕有互联网文件系统。看名就能够猜到其意义,就是跨互联网的文件系统,将远程主机上的文件系统(或目录)寄存在地面主机上,有如它自身正是地面文件系统相近。在Windows情形下有cifs合同贯彻的互连网文件系统,在Unix情况下,最著名是由NFS左券落实的NFS文件系统。

NFS即network file system的缩写,nfs是归属用起来极其轻松,研究起来拾壹分难的事物。相信,使用过它或学过它的人都不会感觉它的使用有别的困难,只需将远程主机上要分享给顾客端的目录导出(export),然后在客户端上挂载就可以像当麻芋果件系统同样。到前段时间结束,nfs已经有5个版本,NFSv1是未发表出来的版本,v2和v3版本脚下来讲基本已经淘汰,v4版本是时下选取最多的本子,nfsv4.1是现阶段最新的本子。


CentOS 6.7 安装配置nfs 服务

NFS是Network File System的缩写,即网络文件系统。它效果与利益是经过互联网让分裂的机械、分裂的操作系统能够互为分享各自的多少,让应用程序在客商端通过互联网访谈位于服务器磁盘中的数据。

NFS在文书传送或新闻传送过程中依赖于RPC商业事务。RPC:远程进程调用(Remote Procedure Call)是能使客商端推行其它系统中等射程序的生龙活虎种机制。NFS本人是未曾提供音讯传输的协商和意义的,但NFS却能让大家由此网络开展材料的分享,那是因为NFS使用了一些别的的传输合同。而这么些传输公约用到这几个RPC功能的。能够说NFS自个儿就是选择RPC的三个程序。可能说NFS也是多少个RPC SE福睿斯VE君越。所以假设利用NFS的地方都要运转RPC服务,无论是NFS SEWranglerVE途达或许NFS CLIENT。那样SELX570VE宝马X3和CLIENT工夫由此RPC来得以达成PROGRAM PORT的对应。能够如此清楚RPC和NFS的关系:NFS是叁个文件系统,而RPC是承当消息的传输。

就此,我们须求设置四个软件包:nfs-utils和rpcbind,在centOS 第55中学rpcbind叫portmap,作用都以黄金年代律的,名字不一致而已。

设置情势:yum安装

nfs服务端:balichvm(192.168.171.51)

客户端:balichos(192.168.171.50)

安装步骤:

1)、在balichvm上安装nfs-utils和rpcbind,使用yum安装,如下:

[[email protected] ~]# yum install –y nfs-utilsrpcbind

2卡塔尔、在balichvm创设须要分享的目录和编写制定配置文件/etc/exports(那几个文件暗中认可未有卡塔 尔(英语:State of Qatar)

[[email protected] ~]# mkdir –p /data/nfsdata

[[email protected] ~]#vim /etc/exports

/data/nfsdata/ 192.168.171.0/24 (rw,sync,root_squash)

此地的铺排是共享目录/data/nfsdata/;网段192.168.171.0的主机能够有读写权限、限定root权限、同步到磁盘卡塔尔

/etc/exports配置文件的格式和抉择有:

格式:分享的目录分享给那些网段的主机分享的权位

选料:(分享的权力卡塔尔

ro:——只读;

rw:——读写;

sync:——同步形式,内部存款和储蓄器中数量任何时候写入磁盘;

async:——不一同,把内部存款和储蓄器中数据按时写入磁盘中;

no_root_squash:——加上那几个选项后,root顾客就能对分享的目录具有至高的权力决定,就如对本机的目录操作相近。不安全,不建议使用;

root_squash:——和方面包车型大巴抉择对应,root客户对分享目录的权柄不高,独有普通客商的权能,即节制了root;

all_squash:——不管选用NFS的客户是什么人,他的身份都会被限制成为贰个点名的普通顾客身份;

anonuid/anongid:——要和root_squash以及all_squash一起使用,用于钦点使用NFS的顾客节制后的uid和gid,前提是本机的/etc/passwd中留存那个uid和gid。

3卡塔尔国、在balichvm配置防火墙法则,编辑/etc/sysconfig/nfs,固定服务的端口,暗中认可是注释的,须要开发。

# Port rpc.mountd should listen on.

MOUNTD_PORT=892 #把前边的#号去掉

# Port rquotad should listen on.

RQUOTAD_PORT=875 #把前边的#号去掉

# TCP port rpc.lockd should listen on.

LOCKD_TCPPORT=32803 #把前边的#号去掉

# UDP port rpc.lockd should listen on.

LOCKD_UDPPORT=32769 #把前边的#号去掉

那么些端口是布局文件暗中认可的,是足以自行改过扩大内需的端口号,然后保留配置文件。

下一场运维rpdbind和nfs服务:

/etc/init.d/rpcbind restart

/etc/init.d/nfs restart

劳动运行后,使用rpcinfo –p查看启用的端口。

[[email protected] ~]# rpcinfo -p

program vers proto port service

100000 4 tcp111 portmapper

100000 3 tcp111 portmapper

100000 2 tcp111 portmapper

100000 4 udp111 portmapper

100000 3 udp111 portmapper

100000 2 udp111 portmapper

100005 1 udp892 mountd

100005 1 tcp892 mountd

100005 2 udp892 mountd

100005 2 tcp892 mountd

100005 3 udp892 mountd

100005 3 tcp892 mountd

100003 2 tcp2049 nfs

100003 3 tcp2049 nfs

100003 4 tcp2049 nfs

100227 2tcp 2049 nfs_acl

100227 3 tcp2049 nfs_acl

100003 2 udp2049 nfs

100003 3 udp2049 nfs

100003 4 udp2049 nfs

100227 2 udp2049 nfs_acl

100227 3 udp2049 nfs_acl

100021 1 udp32769 nlockmgr

100021 3 udp32769 nlockmgr

100021 4 udp32769 nlockmgr

100021 1 tcp32803 nlockmgr

100021 3 tcp32803 nlockmgr

100021 4 tcp32803 nlockmgr

[[email protected] ~]#

将这几个启用的端口(tcp和udp卡塔 尔(阿拉伯语:قطر‎写到iptables防火墙里面(vim /etc/sysconfig/iptables卡塔 尔(英语:State of Qatar),允许通过,如下:

-A INPUT -m state --state NEW -m tcp -p tcp--dport 111 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp--dport 892 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp--dport 2049 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp--dport 32769 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp--dport 32803 -j ACCEPT

-A INPUT -m state --state NEW -m udp -p udp--dport 111 -j ACCEPT

-A INPUT -m state --state NEW -m udp -p udp--dport 892 -j ACCEPT

-A INPUT -m state --state NEW -m udp -p udp--dport 2049 -j ACCEPT

-A INPUT -m state --state NEW -m udp -p udp--dport 32769 -j ACCEPT

-A INPUT -m state --state NEW -m udp -p udp--dport 32803 -j ACCEPT

接下来重启iptables服务:/etc/init.d/iptables restart

4卡塔尔国、在客商端balichos上,安装nfs-utils,并且挂载balichvm分享的nfsdata目录,查看某台主机共享的nfs使用命令showmount–e ip(主机名)。

[[email protected] ~]# yum install –y nfs-utils

[[email protected] ~]# showmount -e192.168.171.51 ##查阅分享的nfs

Export list for 192.168.171.51:

/data/nfsdata 192.168.171.0/24

[[email protected] ~]#

[[email protected] ~]# mount -t nfs192.168.171.51:/data/nfsdata/ /mnt/

[[email protected] ~]# df -h

Filesystem Size Used Avail Use% Mountedon

/dev/sda3 18G 5.9G 11G 36% /

tmpfs 495M 0 495M 0% /dev/shm

/dev/sda1 190M 36M 145M 20% /boot

192.168.171.51:/data/nfsdata/ 18G 3.8G 13G 24% /mnt

前天就早就挂载了一个文件系统,可是出于在balichvm上/data/nfsdata的权位是755,其余顾客不有所写的权限,而在nfs配置文件/etc/exports上又限制了root顾客权限,暗中同意是行使别的的客商的记名,全部不能写入数据,只有读取的权能。

比如急需有写入的权力,能够校订权限。

6.7 安装配置nfs 服务 NFS是Network File System的缩写,即网络文件系统。它效果与利益是因此互连网让不一致的机器、差异的操作系统能够互相分享各...

#NFS介绍 ##NFS ``` Network File System 互联网文件系统,基于内核的文件系统。 Sun 公司开荒,通过接收NFS,顾客和顺序能够像访问当三步跳件豆蔻梢头律访谈远端系统上的文书,重假如依赖RPC (RemoteProcedure Call Protocol 远程进度调用卡塔尔国实现。 NFS服务运维时最少需求五个daemons,一个管理顾客端是还是不是能够登陆的标题,一个拘系顾客端能够获得的权能。 ``` ##RPC ``` 采取C/S 格局。 RPC通过函数调用大器晚成部分功能由本地程序实现,另风华正茂有的功效由长途主机上的函数完结,两个协同完毕财富的分享。 顾客机需要程序调用进程发送三个有进程参数的调用音讯到服务过程,然后等待回复消息。 在劳动器端,进度保持睡觉意况直到调用消息达到甘休,当一个调用消息到达,服务器获得进度参数,总结结果,发送答复消息,然后等待下叁个调用音信,最终,顾客端调用经过选取答复音讯,拿到进度结果,然后调用实施后续拓宽。 RPC最首要的效劳就是在钦点每一个NFS成效所对应的端口号,並且将端口反馈给客户端,让顾客端能够连接到科学的端口上去。 当服务器在运营NFS时会随机取用数个端口,并积极的向RPC注册,由此RPC能够领略种种端口对应的NFS成效,然后RPC又是定点使用端口111来监听顾客端的急需并向客商端反馈对应的端口,由此NFS的开发银行必得在PRC相关劳务之后,不然NFS的起步是会报错的。 ``` ##NFS 优势 ``` 节省本地存款和储蓄空间,将常用的数码如:home 目录,寄存在风流浪漫台NFS 服务器上且能够通过互联网访问,那么地点终端将得以收缩自己存款和储蓄空间的行使 ``` ##NFS服务介绍 ``` 软件包:nfs-utils 相关软件包:rpcbind (必得卡塔尔国,tcp_wrappers Kernel扶植:nfs.ko 端口:2049(nfsd),别的端口由portmap(111)分配 配置文件:/etc/exports,/etc/exports.d/*.exports 日志:/var/lib/nfs/ CentOS7 不匡助同一目录同期用nfs 和samba 分享,因为使用锁机制不一致 CentOS6 起先portmap 进度由rpcbind 替代 NFS 服务重大进程: rpc.nfsd 最根本的NFS 进度,处理顾客端是否可记名 rpc.mountd 挂载和卸载NFS 文件系统,包蕴权力管理 rpc.lockd 非需求,管理文件锁,防止同时写出错 rpc.statd 非供给,检查文件风华正茂致性,可修补文件 要在客商端向NFS服务器端的文件系统写入操作是,须要持有: NFS服务器有开放可写入(w卡塔 尔(阿拉伯语:قطر‎的权杖(与/etc/exports设置有关卡塔尔实际的文件权限具备可写入(w卡塔 尔(阿拉伯语:قطر‎的权柄 ``` #NFS配置 ##NFS的软件包nfs-utils以至相关文书 ``` rpm -ql nfs-utils(centos7) /etc/exports.d /etc/gssproxy/24-nfs-server.conf /etc/modprobe.d/lockd.conf /etc/nfs.conf /etc/nfsmount.conf /etc/request-key.d/id_resolver.conf /etc/sysconfig/nfs /sbin/mount.nfs /sbin/mount.nfs4 /sbin/osd_login /sbin/rpc.statd /sbin/umount.nfs /sbin/umount.nfs4 /usr/sbin/blkmapd /usr/sbin/exportfs /usr/sbin/mountstats /usr/sbin/nfsdcltrack /usr/sbin/nfsidmap /usr/sbin/nfsiostat /usr/sbin/nfsstat /usr/sbin/rpc.gssd /usr/sbin/rpc.idmapd /usr/sbin/rpc.mountd /usr/sbin/rpc.nfsd /usr/sbin/rpcdebug /usr/sbin/showmount /usr/sbin/sm-notify /usr/sbin/start-statd /usr/share/doc/nfs-utils-1.3.0/ /var/lib/nfs /var/lib/nfs/etab /var/lib/nfs/rmtab /var/lib/nfs/rpc_pipefs /var/lib/nfs/statd /var/lib/nfs/statd/sm /var/lib/nfs/statd/sm.bak /var/lib/nfs/state /var/lib/nfs/v4recovery /var/lib/nfs/xtab rpm -ql nfs-utils(centos6) /etc/nfsmount.conf /etc/rc.d/init.d/nfs /etc/rc.d/init.d/nfslock /etc/rc.d/init.d/rpcgssd /etc/rc.d/init.d/rpcidmapd /etc/rc.d/init.d/rpcsvcgssd /etc/request-key.d/id_resolver.conf /etc/sysconfig/nfs /sbin/mount.nfs /sbin/mount.nfs4 /sbin/nfs_cache_getent /sbin/rpc.statd /sbin/umount.nfs /sbin/umount.nfs4 /usr/sbin/exportfs /usr/sbin/mountstats /usr/sbin/nfsidmap /usr/sbin/nfsiostat /usr/sbin/nfsstat /usr/sbin/rpc.gssd /usr/sbin/rpc.idmapd /usr/sbin/rpc.mountd /usr/sbin/rpc.nfsd /usr/sbin/rpc.svcgssd /usr/sbin/rpcdebug /usr/sbin/showmount /usr/sbin/sm-notify /usr/sbin/start-statd /var/lib/nfs /var/lib/nfs/etab /var/lib/nfs/rmtab /var/lib/nfs/rpc_pipefs /var/lib/nfs/statd /var/lib/nfs/statd/sm /var/lib/nfs/statd/sm.bak /var/lib/nfs/state /var/lib/nfs/v4recovery /var/lib/nfs/xtab 端口: 2049(nfsd),此外端口由portmap(111)分配 配置文件: /etc/exports /etc/exports.d/*.exports 日志: /var/lib/nfs/ ``` ##布局防火墙 ``` 配置防火墙,开放NFS 服务 配置NFS 使用一定端口 vim /etc/sysconfig/nfs CR-VQUOTAD_PORT=875 LOCKD_TCPPORT=32803 LOCKD_UDPPORT=32769 MOUNTD_PORT=892 STATD_PORT=662 STATD_OUTGOING_PORT=2020 防火墙除开放上述端口,还需开放TCP 和UDP 的111 和2049共4个端口 ``` ##NFS配置文件 ``` /etc/exports导出的文件系统的格式: /dir 主机1(opt1,opt2) 主机2(opt1,opt2)... 以#始发的为注释 主机格式: 单个主机: ipv4 ,ipv6 ,FQDN, IP networks: 二种掩码格式均帮忙172.18.0.0/255.255.0.0 172.18.0.0/16 wildcards : 主机名通配,举个例子*.magedu.com ,IP 不得以 netgroups : NIS 域的主机组,@group_name anonymous : 表示使用*通配全数客商端 种种条目款项钦定目录导出到的怎么样主机,及有关的权限和选择暗中同意选项:(ro,sync,root_squash,no_all_squash) ro,rw 只读和读写 async 异步,数据变动后不马上写磁盘,质量高 sync (1.0.0 后为私下认可卡塔尔同步,数据在伸手时立时写入分享 no_all_squash (私下认可卡塔 尔(英语:State of Qatar)保留分享文件的UID 和GID all_squash 全省长途客商( 包蕴root) 都产生nfsnobody root_squash (暗许卡塔尔 远程root 映射为nfsnobody,UID为65534,前期版本是4294967294 (nfsnobody) no_root_squash 远程root 映射成root 客商 anonuid 和anongid 指明无名氏客商映射为一定顾客UID 和组GID ,而非nfsnobody, 可合作all_squash ``` ##NFS配置示例 ``` 在/etc/exports 文件中定义导出目录 /myshare server.example.com /myshare *.example.com /myshare server?.example.com /myshare server[0-20].example.com /myshare 172.25.11.10 /myshare 172.25.0.0/16 /myshare 2000:472:18:b51:c32:a21 /myshare 2000:472:18:b51::/64 /myshare *.example.com 172.25.0.0/16 /myshare desktop.example.com(ro) /myshare desktop.example.com(ro) server[0-20].example.com(rw) /myshare diskless.example.com(rw,no_root_squash) ``` ##启动NFS ``` NFS服务信赖于RPC,所以要先运营RPC服务,然后再开发银行NFS服务 service rpcbind start service nfs start ``` ##客户端NFS挂载 ``` 基于平安着想,建议使用nosuid,nodev,noexec 挂载选项 NFS 相关的挂载选项: fg (暗中同意卡塔 尔(英语:State of Qatar) 前台挂载,bg 后台挂载 hard (暗中认可卡塔 尔(英语:State of Qatar) 持续诉求,soft 非持续乞求 intr 和hard 协作 央求可间歇 rsize 和wsize 二回读和写多少最大字节数,rsize=32768 _netdev 无互连网不挂载 示例: mount -o rw,nosuid,fg,hard,intr 172.16.0.1:/testdir /mnt/nfs/ 开机挂载:/etc/fstab 172.16.0.1:/public /mnt/nfs nfs defaults 0 0 ``` ##电动挂载 ``` 可接受autofs 按须求挂载NFS分享,在悠然时自动卸载 由autofs 包提供 系统微电脑钦命由/etc/auto.master 自动挂载器守护进度序调控制的挂载点 自动挂载监视器访谈那一个目录并按需求挂载文件系统 文件系统在失活的钦点间距5 分钟后会自动卸载 为全体导出到网络中的NFS配启用特殊相称 -host 至 "browse" 参看扶持:man 5 autofs 扶植含通配符的目录名 * server:/export/& ``` ##直白相称 ``` 直接相称包含相对路线名称 不会耳熟能详本地目录构造 示例: /etc/auto.master: /- /etc/auto.direct /etc/auto.direct: /foo server1:/export/foo /user/local/ server1:/usr/local ``` ##实现NFS服务 ``` systemctl start nfs-server systemctl enable nfs-server mkdir /nfsshare chown nfsnobody /nfsshare vi /etc/exports /nfsshare desktop-ip(rw) exporfs –r mkdir /mnt/nfsshare mount server-ip:/nfsshare /mnt/nfsshare(临时) vim /etc/fstab nfsserver:/nfsshare /mnt/nfsshare nfs defaults 0 0 mount -a ``` ##实现NFS伪根 ``` 配置NFS 服务器 vi /etc/fstab /data/read /exports/read none bind 0 0 /data2/write /exports/write none bind 0 0 vi /etc/exports /exports *(fsid=o,rw,crossmnt) /exports/read 192.168.0.0/24(ro) /exports/write 192.168.0.0/24(rw) 配置NFS 客户端 mount nfsserver:/ /mnt/nfs vi /etc/fstab nfsserver:/ /mnt/ nfs4 ro 0 0 ``` ##NFS相关SELinux 设置 ``` CentOS7 暗中同意SELinux 的布尔值 nfs_export_all_ro 和 nfs_export_all_rw 都启用。那允许NFS 服务能够读写大肆文件,基于安全构思可关闭. 对于只读的NFS 目录SELinux 安全上下文件应设为 public_content_t 或 nfs_t . 对于读写的NFS 目录SELinux 安全上下文件应设为 public_content_rw_t 或 nfs_t context ,并且布尔值nfsd_anon_write Boolean 必需启用,以允许写操作. 扶植参照他事他说加以调查nfsd_selinux(8)(selinux-policy-devel包)nfs(5), mount(8), mount.nfs(8), exportfs(8), exports(5), nfsd_selinux(8) ``` ##NFS工具 ``` rpcinfo rpcinfo — report RPC information rpcinfo makes an RPC call to an RPC server and reports what it finds. rpcinfo [-m | -s] [host] rpcinfo -p [host] rpcinfo -T netid host prognum [versnum] rpcinfo -l host prognum versnum rpcinfo [-n portnum] -u | -t host prognum [versnum] rpcinfo -a serv_address -T netid prognum [version] rpcinfo -b prognum versnum rpcinfo -d [-T netid] prognum versnum 例子: rpcinfo -p hostname rpcinfo –s hostname 查看RPC注册程序 exportfs exportfs - maintain table of exported NFS file systems exportfs [-aruv] [host:/path –v 查看本机全部NFS 分享 –r 重读配置文件,并共享目录 –a 输出本机全体分享 –au 截至本机全数分享showmount showmount - show mount information for an NFS server showmount [options] [host] -a or --all 在主机中列出顾客端主机名或IP地址和已装载目录:dir格式 -d or --directories 仅列出一些客商端安装的目录 -e or --exports 突显NFS服务的导出文件 --no-headers 禁止输出中的描述性标题 例子 showmount -e hostname mount,mount.nfs 挂载工具 NFSv4 补助通过挂载NFS 服务器的分享“根”,进而浏览NFS 服务器上的共享目录列表 mount nfsserver:/ /mnt/nfs ```

1.2 RPC不可不知的法则

要介绍NFS,必然要先介绍RPC。RPC是remote procedure call的简写,人们都将其译为"远程进度调用",它是大器晚成种框架,这种框架在巨型集团使用超级多。而NFS正是当中生机勃勃种,别的NIS、hadoop也是利用rpc框架落到实处的。

正文目录:

1.2.1 RPC原理

所谓的remote procedure call,便是在本地调用远程主机上的procedure。以本土实践"cat -n ~/abc.txt"命令为例,在该地推行cat命令时,会倡导某个系统调用(如open()、read()、close()等),并将cat的拈轻怕重和参数字传送递给这么些函数,于是最后促成了文件的查阅功效。在RPC层面上了然,上面发起的体系调用便是procedure,每一个procedure对应三个或多少个职能。而rpc的全名remote procedure call所代表的就是落实远程procedure调用,让远道主机去调用对应的procedure。

地方的cat命令只是本地试行的通令,怎样促成长途cat,以至其余中长途命令?平时常有二种或者达成的章程:

(1).使用ssh类的工具,将在推行的授命传递到长途主机上并推行。但ssh不能直接调用远程主机上cat所提倡的这几个系统调用(如open()、read()、close()等)。

(2).使用互联网socket的形式,告诉远程服务进程要调用的函数。但这样的主机间进度通讯格局日常都是daemon类服务,daemon类的客商端(即服务的开销方)每调用一个劳动的功力,都亟待编写制定一群达成网络通讯相关的代码。不仅仅轻便出错,还相比复杂。

而rpc是最棒的缓慢解决格局。rpc是大器晚成种框架,在那框架中风流洒脱度合并了互连网通讯代码和封包、解包方式(编码、解码)。以下是rpc整个进程,以cat NFS文件系统中的a.sh文件为例。

 澳门新浦京娱乐场网站 1   澳门新浦京娱乐场网站 2

nfs顾客端试行cat a.sh,由于a.sh是NFS文件系统内的文书,所以cat会发起一些procedure调用(如open/read/close),这么些procedure和对应的参数会发送给rpc client(也许是单个procedure,也恐怕是八个procedure组合在协同一回性发送给rpc client,在NFSv4上是继承者),rpc client会将那一个数据进行编码封装(封装和解封装功效由stub代码完成),然后将包装后的多少通过互联网发送给rpc server,rpc server会对包裹的多寡开展解封,于是就收获了要调用的procedures和相应的参数,然后将它们交给NFS服务进度,最后进展procedure的调用。NFS服务发起procedure调用后,会拿到数码(只怕是数据小编,或然是情状消息等),于是交给rpc server,rpc server会将这么些数量封装并由此网络发送给rpc client,rpc client解封于是拿到最后的回来结果。

从上边的历程能够掌握,rpc的效能是数码封装,rpc client封装待调用的procedure及其参数,rpc server封装再次来到的数码。

所以小心,rpc的长间距procedure调用的定义不是在本地向远程主机发起procedure的调用,而是就要推行的procedure包装后经过rpc发送出去,让远道主机上的附和程序本人去实践procedure并回到数据。也正是说rpc的功能是包裹和发送,并不是号令调用。

举个更简约的例子,使用google寻觅时,完毕寻觅作用的procedure和要物色的内容就是rpc client封装的对象,也是rpc server要解封的目的,找寻的结果则是rpc server封装的靶子,也是rpc client要解封的靶子。解封后的最终结果即为google找出的结果。

1.1 概述

1.2.2 RPC工具介绍

在CentOS 6/7上,rpc server由rpcbind程序达成,该程序由rpcbind包提供。

[root@xuexi ~]# yum -y install rpcbind

[root@xuexi ~]# rpm -ql rpcbind | grep bin/
/usr/sbin/rpcbind
/usr/sbin/rpcinfo

里面rpcbind是rpc主程序,在rpc服务端该程序必得处于已运行处境,其暗中同意监听在111端口。rpcinfo是rpc相关音讯查询工具。

对于rpc来讲,其所一贯管理的是programs,programs由二个或多个procedure组成。这个program称为RPC program或RPC service。

正如图,个中NFS、NIS、hadoop等誉为互联网服务,它们由四个经过或程序(program)组成。举个例子NFS包涵rpc.nfsd、rpc.mountd、rpc.statd和rpc.idmapd等programs,当中各类program都包含了一个或四个procedure,举例rpc.nfsd这些顺序包含了如OPEN、CLOSE、READ、COMPOUND、GETATTEnclave等procedure,rpc.mountd也首要有MNT和UMNT四个procedure。

澳门新浦京娱乐场网站 3

对此RPC来讲,它是不晓得NFS/NIS/hadoop那朝气蓬勃层的,它向来拘押programs。每一种program运转时都亟需找111端口的rpc服务登记注册,然后RPC服务会为该program映射一个program number以致分配一个端口号。在那之中各种program都有二个唯风流倜傥与之对应的program number,它们的映照关系定义在/etc/rpc文件中。未来rpc server将接受program number来判定要调用的是哪些program中的procedure并将解包后的数目传递给该program。

比方说只运转rpcbind时。

[root@xuexi ~]# systemctl start rpcbind.service

[root@xuexi ~]# rpcinfo -p localhost
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper

中间第一列便是program number,第二列vers表示对应program的本子号,最终一名列RPC管理的RPC service名,其实便是各program对应的名字为。

当客商端获取到rpc所管理的service的端口后,就足以与该端口进行通讯了。但注意,尽管客商端已经赢得了端口号,客户端仍会依靠rpc做为中间人开展通讯。也正是说,不论哪天,客商端和rpc所管理的劳动的通讯都必得通过rpc来成功。之所以这么,是因为唯有rpc技术封装和解封装数据。

既然顾客端不可能一向拿着端口号和rpc service通讯,那还提供端口号干嘛?这几个端口号是为rpc server提供的,rpc server解包数据后,会将数据经过此端口交给对应的rpc service。

1.2 RPC不可不知的法则

1.3 启动NFS

NFS自身是很复杂的,它由众多进度组成。那个进度的运行程序由nfs-utils包提供。由于nfs是利用RPC框架得以完结的,所以需求先安装好rpcbind。不过安装nfs-utils时会自动安装rpcbind。

[root@xuexi ~]# yum -y install nfs-utils

[root@xuexi ~]# rpm -ql nfs-utils | grep /usr/sbin
/usr/sbin/blkmapd
/usr/sbin/exportfs
/usr/sbin/mountstats
/usr/sbin/nfsdcltrack
/usr/sbin/nfsidmap
/usr/sbin/nfsiostat
/usr/sbin/nfsstat
/usr/sbin/rpc.gssd
/usr/sbin/rpc.idmapd
/usr/sbin/rpc.mountd
/usr/sbin/rpc.nfsd
/usr/sbin/rpc.svcgssd
/usr/sbin/rpcdebug
/usr/sbin/showmount
/usr/sbin/sm-notify
/usr/sbin/start-statd

中间以"rpc."初步的次第都以rpc service,分别实现不一样的法力,运行它们时每一种都亟待向rpcbind举办登记注册。

[root@xuexi ~]# systemctl start nfs.service

[root@xuexi ~]# rpcinfo -p localhost
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  56229  status
    100024    1   tcp  57226  status
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  48609  nlockmgr
    100021    3   udp  48609  nlockmgr
    100021    4   udp  48609  nlockmgr
    100021    1   tcp  50915  nlockmgr
    100021    3   tcp  50915  nlockmgr
    100021    4   tcp  50915  nlockmgr

能够看出,各个program都启动了区别版本的功力。在这之中nfs program为rpc.nfsd对应的program,为nfs服务的主进度,端口号为2049。mountd对应的program为rpc.mountd,它为顾客端的mount和umount命令提供服务,即挂载和卸载NFS文件系统时会联系mountd服务,由mountd维护相关挂载新闻。nlockmgr对应的program为rpc.statd,用于尊崇文件锁和文书委托有关职能,在NFSv4在此之前,称之为NSM(network status manager)。nfs_acl和status,简单来讲是访问调整列表和景色音信维护的program。

再看看运行的相干进度音讯。

[root@xuexi ~]# ps aux | grep -E "[n]fs|[r]pc"
root        748  0.0  0.0      0     0 ?        S<   Jul26   0:00 [rpciod]
rpc        6127  0.0  0.0  64908  1448 ?        Ss   Jul26   0:00 /sbin/rpcbind -w
rpcuser    6128  0.0  0.0  46608  1836 ?        Ss   Jul26   0:00 /usr/sbin/rpc.statd --no-notify
root       6242  0.0  0.0      0     0 ?        S<   Jul26   0:00 [nfsiod]
root       6248  0.0  0.0      0     0 ?        S    Jul26   0:00 [nfsv4.0-svc]
root      17128  0.0  0.0  44860   976 ?        Ss   02:49   0:00 /usr/sbin/rpc.mountd
root      17129  0.0  0.0  21372   420 ?        Ss   02:49   0:00 /usr/sbin/rpc.idmapd
root      17134  0.0  0.0      0     0 ?        S<   02:49   0:00 [nfsd4]
root      17135  0.0  0.0      0     0 ?        S<   02:49   0:00 [nfsd4_callbacks]
root      17141  0.0  0.0      0     0 ?        S    02:49   0:00 [nfsd]
root      17142  0.0  0.0      0     0 ?        S    02:49   0:00 [nfsd]
root      17143  0.0  0.0      0     0 ?        S    02:49   0:00 [nfsd]
root      17144  0.0  0.0      0     0 ?        S    02:49   0:00 [nfsd]
root      17145  0.0  0.0      0     0 ?        S    02:49   0:00 [nfsd]
root      17146  0.0  0.0      0     0 ?        S    02:49   0:00 [nfsd]
root      17147  0.0  0.0      0     0 ?        S    02:49   0:00 [nfsd]
root      17148  0.0  0.0      0     0 ?        S    02:49   0:00 [nfsd]

其间有生龙活虎项/usr/sbin/rpc.idmapd进程,该进度是提供服务端的uid/gid <==> username/groupname的投射翻译服务。顾客端的uid/gid <==> username/groupname的映射翻译服务则由"nfsidmap"工具完毕,详细表达见下文。

1.2.1 RPC原理

1.4 配置导出目录和挂载使用

1.2.2 RCP工具介绍

1.4.1 配置nfs导出目录

在将服务端的目录分享(share)可能说导出(export)给顾客端早先,须求先配备好要导出的目录。譬喻什么人可访问该目录,该目录是或不是可写,以什么人身份拜候导出目录等。

配备导出目录的配备文件为/etc/exports或/etc/exports.d/*.exports文件,在nfs服务运行时,会自行加载那几个安排文件中的全部导出项。以下是导出示例:

/www    172.16.0.0/16(rw,async,no_root_squash)

当中/www是导出目录,即分享给客户端的目录;172.16.0.0/16是访谈调节列表ACL,唯有该网段的顾客端主机本领访谈该导出目录,即挂载该导出目录;紧跟在主机列表后的括号及括号中的内容定义的是该导出目录对该主机的导出选项,比方(rw,async,no_root_squash)表示客商端挂载/www后,该目录可读写、异步、可保留root客户的权能,具体的导出选项稍后列出。

以下是可接受的两种导出形式:

/www1    (rw,async,no_root_squash)  # 导出给所有主机,此时称为导出给world
/www2    172.16.1.1(rw,async)       # 仅导出给单台主机172.16.1.1
/www3    172.16.0.0/16(rw,async) 192.168.10.3(rw,no_root_squash)   # 导出给网段172.16.0.0/16,还导出给单台
                                                                   # 主机192.168.10.3,且它们的导出选项不同
/www4    www.a.com(rw,async)        # 导出给单台主机www.a.com主机,但要求能解析该主机名
/www     *.b.com(rw,async)          # 导出给b.com下的所有主机,要求能解析对应主机名

以下是常用的风姿洒脱对导出选项表达,越来越多的导出选项见man exports:平淡无奇的暗中认可项是:ro,sync,root_squash,no_all_squash,wdelay。

导出选项

(加粗标红为默认)

选项说明

rw、ro

导出目录可读写还是只读(read-only)。

sync、async

同步共享还是异步共享。异步时,客户端提交要写入的数据到服务端,服务端接收数据后直接响应客户端,但此时数据并不一定已经写入磁盘中,而同步则是必须等待服务端已将数据写入磁盘后才响应客户端。也就是说,给定异步导出选项时,虽然能提升一些性能,但在服务端突然故障或重启时有丢失一部分数据的风险。

当然,对于只读(ro)的导出目录,设置sync或async是没有任何差别的。

anonuid

anongid

此为匿名用户(anonymous)的uid和gid值,默认都为65534,在/etc/passwd和/etc/shadow中它们对应的用户名为nfsnobody。该选项指定的值用于身份映射被压缩时。

root_squash

no_root_squash

是否将发起请求(即客户端进行访问时)的uid/gid=0的root用户映射为anonymous用户。即是否压缩root用户的权限。

all_squash

no_all_squash

是否将发起请求(即客户端进行访问时)的所有用户都映射为anonymous用户,即是否压缩所有用户的权限。

对于root用户,将取(no_)root_squash和(no_)all_squash的交集。例如,no_root_squash和all_squash同期安装时,root仍被减削,root_squash和no_all_squash同不时候设置时,root也被减去。

稍许导出选项须求合营其余装置。举个例子,导出选项设置为rw,但假如目录本身未有w权限,或许mount时钦赐了ro挂载选项,则等同不容许写操作。

有关其余导出选项,基本无需去关注。

在配置文件写好要导出的目录后,直接重启nfs服务就可以,它会读取这几个布署文件。随后就能够在顾客端推行mount命令举办挂载。

诸如,exports文件内容如下:

/vol/vol0       *(rw,no_root_squash)
/vol/vol2       *(rw,no_root_squash)
/backup/archive *(rw,no_root_squash)

1.3 启动NFS

1.4.2 挂载nfs文件系统

然后去顾客端上挂载它们。

[root@xuexi ~]# mount -t nfs 172.16.10.5:/vol/vol0 /mp1
[root@xuexi ~]# mount 172.16.10.5:/vol/vol2 /mp2
[root@xuexi ~]# mount 172.16.10.5:/backup/archive /mp3

挂载时"-t nfs"能够省略,因为对此mount而言,只有挂载nfs文件系统才会写成host:/path格式。当然,除了mount命令,nfs-utils包还提供了独自的mount.nfs命令,它实质上和"mount -t nfs"命令是风流洒脱致的。

mount挂载时得以钦定挂载选项,在那之中囊括mount通用挂载选项,如rw/ro,atime/noatime,async/sync,auto/noauto等,也满含针对nfs文件系统的挂载选项。以下列出几个周边的,越来越多的内容查看man nfs和man mount。

选项

参数意义

默认值

suid

nosuid

如果挂载的文件系统上有设置了suid的二进制程序,

使用nosuid可以取消它的suid

suid

rw

ro

尽管服务端提供了rw权限,但是挂载时设定ro,则还是ro权限

权限取交集

rw

exec/noexec

是否可执行挂载的文件系统里的二进制文件

exec

user

nouser

是否运行普通用户进行档案的挂载和卸载

nouser

auto

noauto

auto等价于mount -a,意思是将/etc/fstab里设定的全部重挂一遍

auto

sync

nosync

同步挂载还是异步挂载

async

atime

noatime

是否修改atime,对于nfs而言,该选项是无效的,理由见下文

 

diratime

nodiratime

是否修改目录atime,对于nfs而言,该挂载选项是无效的,理由见下文

 

remount

重新挂载

 

以下是针对性nfs文件系统的挂载选项。当中并未有交给关于缓存选项(ac/noac、cto/nocto、lookupcache)的求证,它们得以一直运用暗中同意值,如果想要通晓缓存相关内容,能够查阅man nfs。

选项

功能

默认值

fg/bg

挂载失败后mount命令的行为。默认为fg,表示挂载失败时将直接报错退出,如果是bg,

挂载失败后会创建一个子进程不断在后台挂载,而父进程mount自身则立即退出并返回0状态码。

fg

timeo

NFS客户端等待下一次重发NFS请求的时间间隔,单位为十分之一秒。

基于TCP的NFS的默认timeo的值为600(60秒)。

 

hard/soft

决定NFS客户端当NFS请求超时时的恢复行为方式。如果是hard,将无限重新发送NFS请求。

例如在客户端使用df -h查看文件系统时就会不断等待。

设置soft,当retrans次数耗尽时,NFS客户端将认为NFS请求失败,从而使得NFS客户端

返回一个错误给调用它的程序。

hard

retrans

NFS客户端最多发送的请求次数,次数耗尽后将报错表示连接失败。如果hard挂载选项生效,

则会进一步尝试恢复连接。

3

rsize

wsize

一次读出(rsize)和写入(wsize)的区块大小。如果网络带宽大,这两个值设置大一点能提升传

输能力。最好设置到带宽的临界值。

单位为字节,大小只能为1024的倍数,且最大只能设置为1M。

 

小心三点:

(1).所谓的soft在特定的条件下超时后会招致静态数据中断。由此,仅当顾客端响应速度比数据完整性更关键时才使用soft选项。动用基于TCP的NFS(除非呈现钦点使用UDP,不然现在一而再再而三私下认可使用TCP)或追加retrans重试次数能够下跌利用soft选项带给的危害。

(2).由于nfs的顾客端挂载后会缓存文件的性质新闻,此中囊括各样文件时间戳,所以mount指按期间相关的挂载选项是从未意思的,它们不会有别的效能,富含atime/noatime,diratime/nodiratime,relatime/norelatime以致strictatime/nostrictatime等。具体可以预知man nfs中"DATA AND METADATA COHERENCE"段的"File timestamp maintainence"表明,可能见本文末尾的翻译。

(3).假使是要开机挂载NFS文件系统,情势自然是写入到/etc/fstab文件或将mount命令归入rc.local文件中。如果是将/etc/fstab中,那么在系统景况最初化(exec /etc/rc.d/rc.sysinit)的时候会加载fstab中的内容,假如挂载fstab中的文件系统出错,则会引致系统景况初叶化退步,结果是系统开机失败。所以,要开机挂载nfs文件系统,则须要在/etc/fstab中加入叁个挂载选项"_rnetdev"或"_netdev"(centos 7中已经远非"_rnetdev"),防止不或许调换nfs服务端时导致开机运转战败。比如:

172.16.10.5:/www    /mnt    nfs    defaults,_rnetdev    0    0

当导出目录后,将要/var/lib/nfs/etab文件中写入一条对应的导出记录,那是nfs维护的导出表,该表的剧情会付给rpc.mountd进度,并在须求的时候(mountd选择到顾客端的mount诉求时),将此导出表中的内容加载到基本中,内核也单独维护一张艺谋(Zhang Yimou)出表。

1.4 配置导出目录和挂载使用

1.4.3 nfs伪文件系统

服务端导出/vol/vol0、/vol/vol2和/backup/archive后,个中vol0和vol1是连在二个索引下的,但它们和archive目录未有连在一同,nfs接纳伪文件系统的方法来桥接那几个不总是的导出目录。桥接的办法是创制那些未导出的总是目录,如伪vol目录,伪backup目录以至一流的伪根,如下图所示。

澳门新浦京娱乐场网站 4

当客商端挂载后,每一次访谈导出目录时,其实都是透过找到伪文件系统(文件系统都有id,在nfs上伪文件系统的id称为fsid)并固定到导出目录的。

1.4.1 配置NFS导出目录

1.5 showmount命令

利用showmount命令能够查阅某风华正茂台主机的导出目录情状。因为关乎到rpc须求,所以假若rpc出标题,showmount相近会傻傻地等待。

主要有3个选项。

showmount [ -ade]  host
-a:以host:dir格式列出客户端名称/IP以及所挂载的目录。但注意该选项是读取NFS服务端/var/lib/nfs/rmtab文件,
  :而该文件很多时候并不准确,所以showmount -a的输出信息很可能并非准确无误的
-e:显示NFS服务端所有导出列表。
-d:仅列出已被客户端挂载的导出目录。

别的showmount的结果是排序过的,所以和实际的导出目录顺序恐怕并不相像。

例如:

[root@xuexi ~]# showmount -e 172.16.10.5
Export list for 172.16.10.5:
/backup/archive *
/vol/vol2       *
/vol/vol0       *
/www            172.16.10.4

[root@xuexi ~]# showmount -d 172.16.10.5
Directories on 172.16.10.5:
/backup/archive
/vol/vol0
/vol/vol2

1.4.2 挂载NFS文件系统

1.6 nfs身份映射

NFS的目标是导出目录给各顾客端,因而导出目录中的文件在服务端和顾客端上肯定有两套属性、权限集。

比方说,服务端导出目录中某a文件的主人和所属组都为A,但在顾客端上空中楼阁A,那么在客户端上什么呈现a文件的持有者等品质。再举例,在顾客端上,以客商B在导出目录中开创了三个文件b,假诺服务端上向来不管一二客B,在服务端上该如何支配文件b的主人等天性。

就此,NFS采取uid/gid <==> username/groupname映射的方法解决顾客端和服务端两套属性难点。由于服务端只可以调节它自身大器晚成端的身份映射,所以顾客端也如出大器晚成辙需求身份映射组件。也便是说,服务端和客商端两端都亟待对导出的具备文件的主人和所属组举办映射。

但要注意,服务端之处映射组件为rpc.idmapd,它以守护进度格局职业。而客商端接收nfsidmap工具实行身份映射。

服务端映射时以uid/gid为尺度,表示顾客端以身份B(若是对应uid=Xb,gid=Yb)成立的文件或涂改了文本的持有者属性时,在服务端将从/etc/passwd(此处不思谋别的顾客验证办法)文件中寻觅uid=Xb,gid=Yb的客户,假设能招来到,则设置该文件的持有者和所属组为此uid/gid对应的username/groupname,倘诺寻找不到,则文件全部者和所属组直接展现为uid/gid的值。

客商端映射时以username/groupname为尺度,意味着服务端上文件全数者为A时,则在顾客端上寻觅A客户名,假如寻觅到,则文件全部者呈现为A,不然都将体现为nobody。注意,顾客端不涉及任何uid/gid转变翻译进程,尽管客户端上A顾客的uid和服务端上A客户的uid分化,也仍展现为客户A。也便是说,客商端上文件全部者唯有三种结果,要么和服务端客商同名,要么展现为nobody。

就此思虑生龙活虎种新鲜意况,客户端上以客商B(其uid=B1)制造文件,假诺服务端上未有uid=B1的客商,那么创设文件时交由给服务端后,在服务端上该文件全部者将显示为B1(注意它是一个数值)。再回到到客户端上看,客商端映射时只简单映射username,不关乎uid的转变,因而它认为该文件的全数者为B1(不是uid,而是username),但顾客端上必定将未有客商名称叫B1的用户(固然有uid=B1对应的客商B),因此在顾客端,此文件全数者将奇怪地将体现为nobody,其诡异之处在于,客商端上以身份B创制的文件,结果在顾客端上却显得为nobody。

综上考虑,刚毅建议客商端和服务端的顾客身份要联合,且尽量让各uid、gid能对应上。

1.4.3 NFS伪文件系统

1.7 使用exportfs命令导出目录

除了这些之外运行nfs服务加载配置文件/etc/exports来导出目录,使用exportfs命令也得以直接导出目录,它无需加载配置文件/etc/exports,当然exportfs也足以加载/etc/exports文件来导出目录。实际上,nfs服务运营脚本中便是使用exportfs命令来导出/etc/exports中剧情的。

举个例子说,CentOS 6上/etc/init.d/nfs文件中,导出和卸载导出目录的下令为:

[root@xuexi ~]# grep exportfs /etc/init.d/nfs  
        [ -x /usr/sbin/exportfs ] || exit 5
        action $"Starting NFS services: " /usr/sbin/exportfs -r
        cnt=`/usr/sbin/exportfs -v | /usr/bin/wc -l`
                action $"Shutting down NFS services: " /usr/sbin/exportfs -au
        /usr/sbin/exportfs -r

在CentOS 7上则如下:

[root@xuexi ~]# grep exportfs /usr/lib/systemd/system/nfs.service      
ExecStartPre=-/usr/sbin/exportfs -r
ExecStopPost=/usr/sbin/exportfs -au
ExecStopPost=/usr/sbin/exportfs -f
ExecReload=-/usr/sbin/exportfs -r

理所必然,无论怎么着,nfsd等医生和护师进程是必需已经运营好的。

以下是CentOS 7上exportfs命令的用法。注意, CentOS 7比CentOS 6多局部精选。

-a     导出或卸载所有目录。
-o options,...
       指定一系列导出选项(如rw,async,root_squash),这些导出选项在exports(5)的man文档中有记录。
-i     忽略/etc/exports和/etc/exports.d目录下文件。此时只有命令行中给定选项和默认选项会生效。
-r     重新导出所有目录,并同步修改/var/lib/nfs/etab文件中关于/etc/exports和/etc/exports.d/
       *.exports的信息(即还会重新导出/etc/exports和/etc/exports.d/*等导出配置文件中的项)。该
       选项会移除/var/lib/nfs/etab中已经被删除和无效的导出项。
-u     卸载(即不再导出)一个或多个导出目录。
-f     如果/prof/fs/nfsd或/proc/fs/nfs已被挂载,即工作在新模式下,该选项将清空内核中导出表中
       的所有导出项。客户端下一次请求挂载导出项时会通过rpc.mountd将其添加到内核的导出表中。
-v     输出详细信息。
-s     显示适用于/etc/exports的当前导出目录列表。

例如:

(1).导出/www目录给顾客端172.16.10.6。

exportfs 172.16.10.6:/www

(2).导出/www目录给全体人,并点名导出选项。

exportfs :/www -o rw,no_root_squash

(3).导出exports文件中的内容。

exportfs -a

(4).重新导出全部已导出的目录。包括exports文件大壮exportfs单独导出的目录。

exportfs -ar

(5).卸载全体已导出的目录,富含exports文件中的内容和exportfs单独导出的开始和结果。即其本质为清空内核维护的导出表。

exportfs -au

(6).只卸载某叁个导出目录。

exportfs -u 172.16.10.6:/www

1.5 showmount命令

1.8 RPC的调节和测量检验工具rpcdebug

在广大时候NFS客商端或许服务端现身卓殊,比如连接不上、锁状态错过、连接一点也不快等等难题,都得以对NFS进行调整来开采标题出在哪个环节。NFS有许多历程都能够一贯扶持调节和测量检验选项,但最直接的调度情势是调和rpc,因为NFS的每一种须求和响应都会透过RPC去封装。但刚强,调节和测量检验RPC比间接调节和测验NFS时更难解析出难点所在。以下只介绍如何调治RPC。

rpc单独提供一个调节和测验工具rpcdebug。

[root@xuexi ~]# rpcdebug -vh
usage: rpcdebug [-v] [-h] [-m module] [-s flags...|-c flags...]
       set or cancel debug flags.

Module     Valid flags
rpc        xprt call debug nfs auth bind sched trans svcsock svcdsp misc cache all
nfs        vfs dircache lookupcache pagecache proc xdr file root callback client mount fscache pnfs pnfs_ld state all
nfsd       sock fh export svc proc fileop auth repcache xdr lockd all
nlm        svc client clntlock svclock monitor clntsubs svcsubs hostcache xdr all

其中:

-v:显示更详细信息
-h:显示帮助信息
-m:指定调试模块,有rpc/nfs/nfsd/nlm共4个模块可调试。
  :顾名思义,调试rpc模块就是直接调试rpc的问题,将记录rpc相关的日志信息;
  :调试nfs是调试nfs客户端的问题,将记录nfs客户端随之产生的日志信息;
  :nfsd是调试nfs服务端问题,将记录nfsd随之产生的日志信息;
  :nlm是调试nfs锁管理器相关问题,将只记录锁相关信息
-s:指定调试的修饰符,每个模块都有不同的修饰符,见上面的usage中"Valid flags"列的信息
-c:清除或清空已设置的调试flage

例如说设置调试nfs顾客端的新闻。

rpcdebug -m nfs -s all

当有新闻现身时,将记录到syslog中。比如以下是顾客端挂载nfs导出目录产生的新闻,寄存在/var/log/messages中,很多,所以排除和解决难点时需求有耐性。

Jul 29 11:24:04 xuexi kernel: NFS: nfs mount opts='vers=4,addr=172.16.10.9,clientaddr=172.16.10.3'
Jul 29 11:24:04 xuexi kernel: NFS:   parsing nfs mount option 'vers=4'
Jul 29 11:24:04 xuexi kernel: NFS:   parsing nfs mount option 'addr=172.16.10.9'
Jul 29 11:24:04 xuexi kernel: NFS:   parsing nfs mount option 'clientaddr=172.16.10.3'
Jul 29 11:24:04 xuexi kernel: NFS: MNTPATH: '/tmp/testdir'
Jul 29 11:24:04 xuexi kernel: --> nfs4_try_mount()
Jul 29 11:24:04 xuexi kernel: --> nfs4_create_server()
Jul 29 11:24:04 xuexi kernel: --> nfs4_init_server()
Jul 29 11:24:04 xuexi kernel: --> nfs4_set_client()
Jul 29 11:24:04 xuexi kernel: --> nfs_get_client(172.16.10.9,v4)
Jul 29 11:24:04 xuexi kernel: NFS: get client cookie (0xffff88004c561800/0xffff8800364cd2c0)
Jul 29 11:24:04 xuexi kernel: nfs_create_rpc_client: cannot create RPC client. Error = -22
Jul 29 11:24:04 xuexi kernel: --> nfs4_realloc_slot_table: max_reqs=1024, tbl->max_slots 0
Jul 29 11:24:04 xuexi kernel: nfs4_realloc_slot_table: tbl=ffff88004b715c00 slots=ffff880063f32280 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_realloc_slot_table: return 0
Jul 29 11:24:04 xuexi kernel: NFS: nfs4_discover_server_trunking: testing '172.16.10.9'
Jul 29 11:24:04 xuexi kernel: NFS call  setclientid auth=UNIX, 'Linux NFSv4.0 172.16.10.3/172.16.10.9 tcp'
Jul 29 11:24:04 xuexi kernel: NFS reply setclientid: 0
Jul 29 11:24:04 xuexi kernel: NFS call  setclientid_confirm auth=UNIX, (client ID 578d865901000000)
Jul 29 11:24:04 xuexi kernel: NFS reply setclientid_confirm: 0
Jul 29 11:24:04 xuexi kernel: NFS: <-- nfs40_walk_client_list using nfs_client = ffff88004c561800 ({2})
Jul 29 11:24:04 xuexi kernel: NFS: <-- nfs40_walk_client_list status = 0
Jul 29 11:24:04 xuexi kernel: nfs4_schedule_state_renewal: requeueing work. Lease period = 5
Jul 29 11:24:04 xuexi kernel: NFS: nfs4_discover_server_trunking: status = 0
Jul 29 11:24:04 xuexi kernel: --> nfs_put_client({2})
Jul 29 11:24:04 xuexi kernel: <-- nfs4_set_client() = 0 [new ffff88004c561800]
Jul 29 11:24:04 xuexi kernel: <-- nfs4_init_server() = 0
Jul 29 11:24:04 xuexi kernel: --> nfs4_get_rootfh()
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_type: type=040000
Jul 29 11:24:04 xuexi kernel: decode_attr_change: change attribute=4651240235397459983
Jul 29 11:24:04 xuexi kernel: decode_attr_size: file size=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_fsid: fsid=(0x0/0x0)
Jul 29 11:24:04 xuexi kernel: decode_attr_fileid: fileid=2
Jul 29 11:24:04 xuexi kernel: decode_attr_fs_locations: fs_locations done, error = 0
Jul 29 11:24:04 xuexi kernel: decode_attr_mode: file mode=0555
Jul 29 11:24:04 xuexi kernel: decode_attr_nlink: nlink=23
Jul 29 11:24:04 xuexi kernel: decode_attr_owner: uid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_group: gid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_rdev: rdev=(0x0:0x0)
Jul 29 11:24:04 xuexi kernel: decode_attr_space_used: space used=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_time_access: atime=1501990255
Jul 29 11:24:04 xuexi kernel: decode_attr_time_metadata: ctime=1501989952
Jul 29 11:24:04 xuexi kernel: decode_attr_time_modify: mtime=1501989952
Jul 29 11:24:04 xuexi kernel: decode_attr_mounted_on_fileid: fileid=1
Jul 29 11:24:04 xuexi kernel: decode_getfattr_attrs: xdr returned 0
Jul 29 11:24:04 xuexi kernel: decode_getfattr_generic: xdr returned 0
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_supported: bitmask=fdffbfff:00f9be3e:00000000
Jul 29 11:24:04 xuexi kernel: decode_attr_fh_expire_type: expire type=0x0
Jul 29 11:24:04 xuexi kernel: decode_attr_link_support: link support=true
Jul 29 11:24:04 xuexi kernel: decode_attr_symlink_support: symlink support=true
Jul 29 11:24:04 xuexi kernel: decode_attr_aclsupport: ACLs supported=3
Jul 29 11:24:04 xuexi kernel: decode_server_caps: xdr returned 0!
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_lease_time: file size=90
Jul 29 11:24:04 xuexi kernel: decode_attr_maxfilesize: maxfilesize=18446744073709551615
Jul 29 11:24:04 xuexi kernel: decode_attr_maxread: maxread=131072
Jul 29 11:24:04 xuexi kernel: decode_attr_maxwrite: maxwrite=131072
Jul 29 11:24:04 xuexi kernel: decode_attr_time_delta: time_delta=1 0
Jul 29 11:24:04 xuexi kernel: decode_attr_pnfstype: bitmap is 0
Jul 29 11:24:04 xuexi kernel: decode_attr_layout_blksize: bitmap is 0
Jul 29 11:24:04 xuexi kernel: decode_fsinfo: xdr returned 0!
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: <-- nfs4_get_rootfh() = 0
Jul 29 11:24:04 xuexi kernel: Server FSID: 0:0
Jul 29 11:24:04 xuexi kernel: Pseudo-fs root FH at ffff880064c4ad80 is 8 bytes, crc: 0x62d40c52:
Jul 29 11:24:04 xuexi kernel: 01000100 00000000
Jul 29 11:24:04 xuexi kernel: --> nfs_probe_fsinfo()
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_supported: bitmask=fdffbfff:00f9be3e:00000000
Jul 29 11:24:04 xuexi kernel: decode_attr_fh_expire_type: expire type=0x0
Jul 29 11:24:04 xuexi kernel: decode_attr_link_support: link support=true
Jul 29 11:24:04 xuexi kernel: decode_attr_symlink_support: symlink support=true
Jul 29 11:24:04 xuexi kernel: decode_attr_aclsupport: ACLs supported=3
Jul 29 11:24:04 xuexi kernel: decode_server_caps: xdr returned 0!
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_lease_time: file size=90
Jul 29 11:24:04 xuexi kernel: decode_attr_maxfilesize: maxfilesize=18446744073709551615
Jul 29 11:24:04 xuexi kernel: decode_attr_maxread: maxread=131072
Jul 29 11:24:04 xuexi kernel: decode_attr_maxwrite: maxwrite=131072
Jul 29 11:24:04 xuexi kernel: decode_attr_time_delta: time_delta=1 0
Jul 29 11:24:04 xuexi kernel: decode_attr_pnfstype: bitmap is 0
Jul 29 11:24:04 xuexi kernel: decode_attr_layout_blksize: bitmap is 0
Jul 29 11:24:04 xuexi kernel: decode_fsinfo: xdr returned 0!
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: set_pnfs_layoutdriver: Using NFSv4 I/O
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_maxlink: maxlink=255
Jul 29 11:24:04 xuexi kernel: decode_attr_maxname: maxname=255
Jul 29 11:24:04 xuexi kernel: decode_pathconf: xdr returned 0!
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: <-- nfs_probe_fsinfo() = 0
Jul 29 11:24:04 xuexi kernel: <-- nfs4_create_server() = ffff88007746a800
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_supported: bitmask=fdffbfff:00f9be3e:00000000
Jul 29 11:24:04 xuexi kernel: decode_attr_fh_expire_type: expire type=0x0
Jul 29 11:24:04 xuexi kernel: decode_attr_link_support: link support=true
Jul 29 11:24:04 xuexi kernel: decode_attr_symlink_support: symlink support=true
Jul 29 11:24:04 xuexi kernel: decode_attr_aclsupport: ACLs supported=3
Jul 29 11:24:04 xuexi kernel: decode_server_caps: xdr returned 0!
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_type: type=040000
Jul 29 11:24:04 xuexi kernel: decode_attr_change: change attribute=4651240235397459983
Jul 29 11:24:04 xuexi kernel: decode_attr_size: file size=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_fsid: fsid=(0x0/0x0)
Jul 29 11:24:04 xuexi kernel: decode_attr_fileid: fileid=2
Jul 29 11:24:04 xuexi kernel: decode_attr_fs_locations: fs_locations done, error = 0
Jul 29 11:24:04 xuexi kernel: decode_attr_mode: file mode=0555
Jul 29 11:24:04 xuexi kernel: decode_attr_nlink: nlink=23
Jul 29 11:24:04 xuexi kernel: decode_attr_owner: uid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_group: gid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_rdev: rdev=(0x0:0x0)
Jul 29 11:24:04 xuexi kernel: decode_attr_space_used: space used=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_time_access: atime=1501990255
Jul 29 11:24:04 xuexi kernel: decode_attr_time_metadata: ctime=1501989952
Jul 29 11:24:04 xuexi kernel: decode_attr_time_modify: mtime=1501989952
Jul 29 11:24:04 xuexi kernel: decode_attr_mounted_on_fileid: fileid=1
Jul 29 11:24:04 xuexi kernel: decode_getfattr_attrs: xdr returned 0
Jul 29 11:24:04 xuexi kernel: decode_getfattr_generic: xdr returned 0
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: NFS: nfs_fhget(0:38/2 fh_crc=0x62d40c52 ct=1)
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_type: type=00
Jul 29 11:24:04 xuexi kernel: decode_attr_change: change attribute=4651240235397459983
Jul 29 11:24:04 xuexi kernel: decode_attr_size: file size=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_fsid: fsid=(0x0/0x0)
Jul 29 11:24:04 xuexi kernel: decode_attr_fileid: fileid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_fs_locations: fs_locations done, error = 0
Jul 29 11:24:04 xuexi kernel: decode_attr_mode: file mode=00
Jul 29 11:24:04 xuexi kernel: decode_attr_nlink: nlink=1
Jul 29 11:24:04 xuexi kernel: decode_attr_owner: uid=-2
Jul 29 11:24:04 xuexi kernel: decode_attr_group: gid=-2
Jul 29 11:24:04 xuexi kernel: decode_attr_rdev: rdev=(0x0:0x0)
Jul 29 11:24:04 xuexi kernel: decode_attr_space_used: space used=0
Jul 29 11:24:04 xuexi kernel: decode_attr_time_access: atime=0
Jul 29 11:24:04 xuexi kernel: decode_attr_time_metadata: ctime=1501989952
Jul 29 11:24:04 xuexi kernel: decode_attr_time_modify: mtime=1501989952
Jul 29 11:24:04 xuexi kernel: decode_attr_mounted_on_fileid: fileid=0
Jul 29 11:24:04 xuexi kernel: decode_getfattr_attrs: xdr returned 0
Jul 29 11:24:04 xuexi kernel: decode_getfattr_generic: xdr returned 0
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: NFS: nfs_update_inode(0:38/2 fh_crc=0x62d40c52 ct=2 info=0x26040)
Jul 29 11:24:04 xuexi kernel: NFS: permission(0:38/2), mask=0x1, res=0
Jul 29 11:24:04 xuexi kernel: NFS: permission(0:38/2), mask=0x81, res=0
Jul 29 11:24:04 xuexi kernel: NFS: lookup(/tmp)
Jul 29 11:24:04 xuexi kernel: NFS call  lookup tmp
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_type: type=040000
Jul 29 11:24:04 xuexi kernel: decode_attr_change: change attribute=16540743250786234113
Jul 29 11:24:04 xuexi kernel: decode_attr_size: file size=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_fsid: fsid=(0xf199fcb4fb064bf5/0xa1b7a15af0f7cb47)
Jul 29 11:24:04 xuexi kernel: decode_attr_fileid: fileid=391681
Jul 29 11:24:04 xuexi kernel: decode_attr_fs_locations: fs_locations done, error = 0
Jul 29 11:24:04 xuexi kernel: decode_attr_mode: file mode=01777
Jul 29 11:24:04 xuexi kernel: decode_attr_nlink: nlink=5
Jul 29 11:24:04 xuexi kernel: decode_attr_owner: uid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_group: gid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_rdev: rdev=(0x0:0x0)
Jul 29 11:24:04 xuexi kernel: decode_attr_space_used: space used=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_time_access: atime=1501990260
Jul 29 11:24:04 xuexi kernel: decode_attr_time_metadata: ctime=1501990117
Jul 29 11:24:04 xuexi kernel: decode_attr_time_modify: mtime=1501990117
Jul 29 11:24:04 xuexi kernel: decode_attr_mounted_on_fileid: fileid=391681
Jul 29 11:24:04 xuexi kernel: decode_getfattr_attrs: xdr returned 0
Jul 29 11:24:04 xuexi kernel: decode_getfattr_generic: xdr returned 0
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: NFS reply lookup: 0
Jul 29 11:24:04 xuexi kernel: NFS: nfs_fhget(0:38/391681 fh_crc=0xb4775a3f ct=1)
Jul 29 11:24:04 xuexi kernel: --> nfs_d_automount()
Jul 29 11:24:04 xuexi kernel: nfs_d_automount: enter
Jul 29 11:24:04 xuexi kernel: NFS call  lookup tmp
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_type: type=040000
Jul 29 11:24:04 xuexi kernel: decode_attr_change: change attribute=16540743250786234113
Jul 29 11:24:04 xuexi kernel: decode_attr_size: file size=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_fsid: fsid=(0xf199fcb4fb064bf5/0xa1b7a15af0f7cb47)
Jul 29 11:24:04 xuexi kernel: decode_attr_fileid: fileid=391681
Jul 29 11:24:04 xuexi kernel: decode_attr_fs_locations: fs_locations done, error = 0
Jul 29 11:24:04 xuexi kernel: decode_attr_mode: file mode=01777
Jul 29 11:24:04 xuexi kernel: decode_attr_nlink: nlink=5
Jul 29 11:24:04 xuexi kernel: decode_attr_owner: uid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_group: gid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_rdev: rdev=(0x0:0x0)
Jul 29 11:24:04 xuexi kernel: decode_attr_space_used: space used=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_time_access: atime=1501990260
Jul 29 11:24:04 xuexi kernel: decode_attr_time_metadata: ctime=1501990117
Jul 29 11:24:04 xuexi kernel: decode_attr_time_modify: mtime=1501990117
Jul 29 11:24:04 xuexi kernel: decode_attr_mounted_on_fileid: fileid=391681
Jul 29 11:24:04 xuexi kernel: decode_getfattr_attrs: xdr returned 0
Jul 29 11:24:04 xuexi kernel: decode_getfattr_generic: xdr returned 0
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: NFS reply lookup: 0
Jul 29 11:24:04 xuexi kernel: --> nfs_do_submount()
Jul 29 11:24:04 xuexi kernel: nfs_do_submount: submounting on /tmp
Jul 29 11:24:04 xuexi kernel: --> nfs_xdev_mount()
Jul 29 11:24:04 xuexi kernel: --> nfs_clone_server(,f199fcb4fb064bf5:a1b7a15af0f7cb47,)
Jul 29 11:24:04 xuexi kernel: --> nfs_probe_fsinfo()
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_supported: bitmask=fdffbfff:00f9be3e:00000000
Jul 29 11:24:04 xuexi kernel: decode_attr_fh_expire_type: expire type=0x0
Jul 29 11:24:04 xuexi kernel: decode_attr_link_support: link support=true
Jul 29 11:24:04 xuexi kernel: decode_attr_symlink_support: symlink support=true
Jul 29 11:24:04 xuexi kernel: decode_attr_aclsupport: ACLs supported=3
Jul 29 11:24:04 xuexi kernel: decode_server_caps: xdr returned 0!
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_lease_time: file size=90
Jul 29 11:24:04 xuexi kernel: decode_attr_maxfilesize: maxfilesize=18446744073709551615
Jul 29 11:24:04 xuexi kernel: decode_attr_maxread: maxread=131072
Jul 29 11:24:04 xuexi kernel: decode_attr_maxwrite: maxwrite=131072
Jul 29 11:24:04 xuexi kernel: decode_attr_time_delta: time_delta=1 0
Jul 29 11:24:04 xuexi kernel: decode_attr_pnfstype: bitmap is 0
Jul 29 11:24:04 xuexi kernel: decode_attr_layout_blksize: bitmap is 0
Jul 29 11:24:04 xuexi kernel: decode_fsinfo: xdr returned 0!
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: set_pnfs_layoutdriver: Using NFSv4 I/O
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_maxlink: maxlink=255
Jul 29 11:24:04 xuexi kernel: decode_attr_maxname: maxname=255
Jul 29 11:24:04 xuexi kernel: decode_pathconf: xdr returned 0!
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: <-- nfs_probe_fsinfo() = 0
Jul 29 11:24:04 xuexi kernel: Cloned FSID: f199fcb4fb064bf5:a1b7a15af0f7cb47
Jul 29 11:24:04 xuexi kernel: <-- nfs_clone_server() = ffff88006f407000
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_supported: bitmask=fdffbfff:00f9be3e:00000000
Jul 29 11:24:04 xuexi kernel: decode_attr_fh_expire_type: expire type=0x0
Jul 29 11:24:04 xuexi kernel: decode_attr_link_support: link support=true
Jul 29 11:24:04 xuexi kernel: decode_attr_symlink_support: symlink support=true
Jul 29 11:24:04 xuexi kernel: decode_attr_aclsupport: ACLs supported=3
Jul 29 11:24:04 xuexi kernel: decode_server_caps: xdr returned 0!
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_type: type=040000
Jul 29 11:24:04 xuexi kernel: decode_attr_change: change attribute=16540743250786234113
Jul 29 11:24:04 xuexi kernel: decode_attr_size: file size=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_fsid: fsid=(0xf199fcb4fb064bf5/0xa1b7a15af0f7cb47)
Jul 29 11:24:04 xuexi kernel: decode_attr_fileid: fileid=391681
Jul 29 11:24:04 xuexi kernel: decode_attr_fs_locations: fs_locations done, error = 0
Jul 29 11:24:04 xuexi kernel: decode_attr_mode: file mode=01777
Jul 29 11:24:04 xuexi kernel: decode_attr_nlink: nlink=5
Jul 29 11:24:04 xuexi kernel: decode_attr_owner: uid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_group: gid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_rdev: rdev=(0x0:0x0)
Jul 29 11:24:04 xuexi kernel: decode_attr_space_used: space used=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_time_access: atime=1501990260
Jul 29 11:24:04 xuexi kernel: decode_attr_time_metadata: ctime=1501990117
Jul 29 11:24:04 xuexi kernel: decode_attr_time_modify: mtime=1501990117
Jul 29 11:24:04 xuexi kernel: decode_attr_mounted_on_fileid: fileid=391681
Jul 29 11:24:04 xuexi kernel: decode_getfattr_attrs: xdr returned 0
Jul 29 11:24:04 xuexi kernel: decode_getfattr_generic: xdr returned 0
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: NFS: nfs_fhget(0:40/391681 fh_crc=0xb4775a3f ct=1)
Jul 29 11:24:04 xuexi kernel: <-- nfs_xdev_mount() = 0
Jul 29 11:24:04 xuexi kernel: nfs_do_submount: done
Jul 29 11:24:04 xuexi kernel: <-- nfs_do_submount() = ffff880064fdfb20
Jul 29 11:24:04 xuexi kernel: nfs_d_automount: done, success
Jul 29 11:24:04 xuexi kernel: <-- nfs_d_automount() = ffff880064fdfb20
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_type: type=00
Jul 29 11:24:04 xuexi kernel: decode_attr_change: change attribute=16540743250786234113
Jul 29 11:24:04 xuexi kernel: decode_attr_size: file size=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_fsid: fsid=(0x0/0x0)
Jul 29 11:24:04 xuexi kernel: decode_attr_fileid: fileid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_fs_locations: fs_locations done, error = 0
Jul 29 11:24:04 xuexi kernel: decode_attr_mode: file mode=00
Jul 29 11:24:04 xuexi kernel: decode_attr_nlink: nlink=1
Jul 29 11:24:04 xuexi kernel: decode_attr_owner: uid=-2
Jul 29 11:24:04 xuexi kernel: decode_attr_group: gid=-2
Jul 29 11:24:04 xuexi kernel: decode_attr_rdev: rdev=(0x0:0x0)
Jul 29 11:24:04 xuexi kernel: decode_attr_space_used: space used=0
Jul 29 11:24:04 xuexi kernel: decode_attr_time_access: atime=0
Jul 29 11:24:04 xuexi kernel: decode_attr_time_metadata: ctime=1501990117
Jul 29 11:24:04 xuexi kernel: decode_attr_time_modify: mtime=1501990117
Jul 29 11:24:04 xuexi kernel: decode_attr_mounted_on_fileid: fileid=0
Jul 29 11:24:04 xuexi kernel: decode_getfattr_attrs: xdr returned 0
Jul 29 11:24:04 xuexi kernel: decode_getfattr_generic: xdr returned 0
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: NFS: nfs_update_inode(0:40/391681 fh_crc=0xb4775a3f ct=2 info=0x26040)
Jul 29 11:24:04 xuexi kernel: NFS: permission(0:40/391681), mask=0x1, res=0
Jul 29 11:24:04 xuexi kernel: NFS: lookup(/testdir)
Jul 29 11:24:04 xuexi kernel: NFS call  lookup testdir
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_type: type=040000
Jul 29 11:24:04 xuexi kernel: decode_attr_change: change attribute=7393570666420598027
Jul 29 11:24:04 xuexi kernel: decode_attr_size: file size=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_fsid: fsid=(0xf199fcb4fb064bf5/0xa1b7a15af0f7cb47)
Jul 29 11:24:04 xuexi kernel: decode_attr_fileid: fileid=391682
Jul 29 11:24:04 xuexi kernel: decode_attr_fs_locations: fs_locations done, error = 0
Jul 29 11:24:04 xuexi kernel: decode_attr_mode: file mode=0754
Jul 29 11:24:04 xuexi kernel: decode_attr_nlink: nlink=3
Jul 29 11:24:04 xuexi kernel: decode_attr_owner: uid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_group: gid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_rdev: rdev=(0x0:0x0)
Jul 29 11:24:04 xuexi kernel: decode_attr_space_used: space used=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_time_access: atime=1501990266
Jul 29 11:24:04 xuexi kernel: decode_attr_time_metadata: ctime=1497209702
Jul 29 11:24:04 xuexi kernel: decode_attr_time_modify: mtime=1496802409
Jul 29 11:24:04 xuexi kernel: decode_attr_mounted_on_fileid: fileid=391682
Jul 29 11:24:04 xuexi kernel: decode_getfattr_attrs: xdr returned 0
Jul 29 11:24:04 xuexi kernel: decode_getfattr_generic: xdr returned 0
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: NFS reply lookup: 0
Jul 29 11:24:04 xuexi kernel: NFS: nfs_fhget(0:40/391682 fh_crc=0xec69f317 ct=1)
Jul 29 11:24:04 xuexi kernel: NFS: dentry_delete(/tmp, 202008c)
Jul 29 11:24:04 xuexi kernel: NFS: clear cookie (0xffff88005eaf4620/0x          (null))
Jul 29 11:24:04 xuexi kernel: NFS: clear cookie (0xffff88005eaf4a40/0x          (null))
Jul 29 11:24:04 xuexi kernel: NFS: releasing superblock cookie (0xffff88007746a800/0x          (null))
Jul 29 11:24:04 xuexi kernel: --> nfs_free_server()
Jul 29 11:24:04 xuexi kernel: --> nfs_put_client({2})
Jul 29 11:24:04 xuexi kernel: <-- nfs_free_server()
Jul 29 11:24:04 xuexi kernel: <-- nfs4_try_mount() = 0

1.6 NFS身份映射

1.9 深入NFS的方向

正文仅简单介绍了有的NFS的为主使用形式,但NFS自己其实是很复杂的,想深刻亦非黄金年代件轻巧的事。比方,以下列出了多少个NFS在促成上应该要消释的主题材料。

(1).多台湾游客户端挂载同贰个导出的目录后,要同期编写制定当中同二个文书时,应该什么管理?那是分享文件更新难点,通用的缓解办法是接受文件锁。

(2).顾客端上对文本内容做出修改后是不是要立时联合到服务端上?那是分享文件的多少缓慰问题,显示的主意是文件数量是或不是要在各顾客端上保险大器晚成致性。和第二个问题结合起来,就是遍布式(集群)文件数量黄金时代致性难点。

(3).客商端或服务端举办了重启,可能它们现身了故障,亦恐怕它们中间的网络现身故障后,它们的对端如何驾驭它早就面世了故障?这是故障文告或重启公告难点。

(4).现身故障后,符合规律重启成功了,那么什么样回复到故障前境况?那是故障恢复生机难题。

(5).如若服务端故障后直接不恐怕苏醒,客户端是或不是能自行故障转移到另风流倜傥台符合规律干活的NFS服务节点?那是高可用难点。(NFS版本4(后文将简写为NFSv4)能够从本身完成故障转移,当然使用高可用工具如heartbeat也如出一辙能促成)

小结起来就多少个至关心保护要词:锁、缓存、数据和缓存生龙活虎致性、文告和故障恢复生机。从这么些重大字中,很当然地会联想到了集群和布满式文件系统,其实NFS也是意气风发种轻易的分布式文件系统,但并未像集群或布满式文件系统那样达成大致全盘的锁、缓存黄金时代致性等功用。并且NFSv4为了显示其特色和质量,在有个别通用问题上接纳了与集群、布满式文件系统不相同的情势,如选拔了文本委托(服务端将文件委托给顾客端,由此实现近似锁的效用)、锁或委托的租约等(就疑似DHCP的IP租约同样,在租约期内,锁和嘱托以至缓存是可行的,租约过期后那几个内容都不行)。

因而知,深远NFS其实正是在深切布满式文件系统,由于互连网对NFS浓厚介绍的篇章大概从未,所以想深切它并不是生机勃勃件轻易的事。要是有深刻学习的主见,能够翻阅NFSv4的RFC3530文档的前9章。以下是本人的片段man文书档案翻译。

 

翻译:man rpcbind(rpcbind中文手册)
翻译:man nfsd(rpc.nfsd中文手册)
翻译:man mountd(rpc.mountd中文手册)
翻译:man statd(rpc.statd中文手册)
翻译:man sm-notify(sm-notify命令中文手册)
翻译:man exportfs(exportfs命令中文手册)

以下是man nfs中关于传输方法和缓存相关内容的翻译。

TRANSPORT METHODS
       NFS客户端是通过RPC向NFS服务端发送请求的。RPC客户端会自动发现远程服务端点,处理每请求(per-request)的
       身份验证,调整当客户端和服务端之间出现不同字节字节序(byte endianness)时的请求参数,并且当请求在网络
       上丢失或被服务端丢弃时重传请求。rpc请求和响应数据包是通过网络传输的。

       在大多数情形下,mount(8)命令、NFS客户端和NFS服务端可以为挂载点自动协商合适的传输方式以及数据传输时
       的大小。但在某些情况下,需要使用mount选项显式指定这些设置。

       对于的传统NFS,NFS客户端只使用UDP传输请求给服务端。尽管实现方式很简单,但基于UDP的NFS有许多限制,在
       一些通用部署环境下,这些限制项会限制平滑运行的能力,还会限制性能。即使是UDP丢包率极小的情况,也将
       导致整个NFS请求丢失;因此,重传的超时时间一般都是亚秒级的,这样可以让客户端从请求丢失中快速恢复,但
       即使如此,这可能会导致无关的网络阻塞以及服务端负载加重。

       但是在专门设置了网络MTU值是相对于NFS的输出传输大小时(例如在网络环境下启用了巨型以太网帧)(注:相对的
       意思,例如它们成比例关系),UDP是非常高效的。在这种环境下,建议修剪rsize和wsize,以便让每个NFS的读或
       写请求都能容纳在几个网络帧(甚至单个帧)中。这会降低由于单个MTU大小的网络帧丢失而导致整个读或写请求丢
       失的概率。

       (译者注:UDP是NFSv2和NFSv3所支持的,NFSv4使用TCP,所以以上两段不用考虑)

       现代NFS都默认采用TCP传输协议。在几乎所有可想到的网络环境下,TCP都表现良好,且提供了非常好的保证,防
       止因为网络不可靠而引起数据损坏。但使用TCP传输协议,基本上都会考虑设置相关防火墙。

       在正常环境下,网络丢包的频率比NFS服务丢包的频率要高的多。因此,没有必要为基于TCP的NFS设置极短的重传
       超时时间。一般基于TCP的NFS的超时时间设置在1分钟和10分钟之间。当客户端耗尽了重传次数(选项retrans的值),
       它将假定发生了网络分裂,并尝试以新的套接字重新连接服务端。由于TCP自身使得网络传输的数据是可靠的,所
       以,可以安全地使用处在默认值和客户端服务端同时支持的最大值之间的rszie和wsize,而不再依赖于网络MTU大小。

DATA AND METADATA COHERENCE
       现在有些集群文件系统为客户端之间提供了非常完美的缓存一致性功能,但对于NFS客户端来说,实现完美的缓
       存一致性是非常昂贵的,特别是大型局域网络环境。因此,NFS提供了稍微薄弱一点的缓存一致性功能,以满足
       大多数文件共享需求。

   Close-to-open cache consistency
       一般情况下,文件共享是完全序列化的。首先客户端A打开一个文件,写入一些数据,然后关闭文件然后客户端B
       打开同一个文件,并读取到这些修改后的数据。

       当应用程序打开一个存储在NFSv3服务端上的文件时,NFS客户端检查文件在服务端上是否存在,并通过是否发送
       GETATTR或ACCESS请求判断文件是否允许被打开。NFS客户端发送这些请求时,不会考虑已缓存文件属性是否是新
       鲜有效的。

       当应用程序关闭文件,NFS客户端立即将已做的修改写入到文件中,以便下一个打开者可以看到所做的改变。这
       也给了NFS客户端一个机会,使得它可以通过文件关闭时的返回状态码向应用程序报告错误。

       在打开文件时以及关闭文件刷入数据时的检查行为被称为close-to-open缓存一致性,或简称为CTO。可以通过使
       用nocto选项来禁用整个挂载点的CTO。

       (译者注:NFS关闭文件时,客户端会将所做的修改刷入到文件中,然后发送GETATTR请求以确保该文件的属性缓存
       已被更新。之后其他的打开者打开文件时会发送GETATTR请求,根据文件的属性缓存可以判断文件是否被打开并做
       了修改。这可以避免缓存无效)

   Weak cache consistency
       客户端的数据缓存仍有几乎包含过期数据。NFSv3协议引入了"weak cache consistency"(WCC),它提供了一种在单
       个文件被请求之前和之后有效地检查文件属性的方式。这有助于客户端识别出由其他客户端对此文件做出的改变。

       当某客户端使用了并发操作,使得同一文件在同一时间做出了多次更新(例如,后台异步写入),它仍将难以判断
       是该客户端的更新操作修改了此文件还是其他客户端的更新操作修改了文件。

   Attribute caching
       使用noac挂载选项可以让多客户端之间实现属性缓存一致性。几乎每个文件系统的操作都会检查文件的属性信息。
       客户端自身会保留属性缓存一段时间以减少网络和服务端的负载。当noac生效时,客户端的文件属性缓存就会被
       禁用,因此每个会检查文件属性的操作都被强制返回到服务端上来操作文件,这表示客户端以牺牲网络资源为代
       价来快速查看文件发生的变化。

       不要混淆noac选项和"no data caching"。noac挂载选项阻止客户端缓存文件的元数据,但仍然可能会缓存非元数
       据的其他数据。

       NFS协议设计的目的不是为了支持真正完美的集群文件系统缓存一致性。如果要达到客户端之间缓存数据的绝对
       一致,那么应该使用文件锁的方式。

   File timestamp maintainence
       NFS服务端负责管理文件和目录的时间戳(atime,ctime,mtime)。当服务端文件被访问或被更新,文件的时间戳也会
       像本地文件系统那样改变。

       NFS客户端缓存的文件属性中包括了时间戳属性。当NFS客户端检索NFS服务端文件属性时,客户端文件的时间戳会
       更新。因此,在NFS服务端的时间戳更新后显示在NFS客户端之前可能会有一些延迟。

       为了遵守POSIX文件系统标准,Linux NFS客户端需要依赖于NFS服务端来保持文件的mtime和ctime时间戳最新状态。
       实现方式是先让客户端将改变的数据刷入到服务端,然后再输出文件的mtime。

       然而,Linux客户端可以很轻松地处理atime的更新。NFS客户端可以通过缓存数据来保持良好的性能,但这意味着
       客户端应用程序读取文件(会更新atime)时,不会反映到服务端,但实际上服务端的atime已经修改了。

       由于文件属性缓存行为,Linux NFS客户端mount时不支持一般的atime相关的挂载选项。

       特别是mount时指定了atime/noatime,diratime/nodiratime,relatime/norelatime以及strictatime/nostrictatime
       挂载选项,实际上它们没有任何效果。

   Directory entry caching
       Linux NFS客户端缓存所有NFS LOOKUP请求的结果。如果所请求目录项在服务端上存在,则查询的结果称为正查询
       结果。如果请求的目录在服务端上不存在(服务端将返回ENOENT),则查询的结果称为负查询结果。

       为了探测目录项是否添加到NFS服务端或从其上移除了,Linux NFS客户端会监控目录的mtime。如果客户端监测到
       目录的mtime发生了改变,客户端将丢弃该目录相关的所有LOOKUP缓存结果。由于目录的mtime是一种缓存属性,因
       此服务端目录mtime发生改变后,客户端可能需要等一段时间才能监测到它的改变。

       缓存目录提高了不与其他客户端上的应用程序共享文件的应用程序的性能。但使用目录缓存可能会干扰在多个客户
       端上同时运行的应用程序,并且需要快速检测文件的创建或删除。lookupcache挂载选项允许对目录缓存行为进行一
       些调整。

       如果客户端禁用目录缓存,则每次LOOKUP操作都需要与服务端进行验证,那么该客户端可以立即探测到其他客户端
       创建或删除的目录。可以使用lookupcache=none来禁用目录缓存。如果禁用了目录缓存,由于需要额外的NFS请求,
       这会损失一些性能,但禁用目录缓存比使用noac损失的性能要少,且对NFS客户端缓存文件属性没有任何影响。

   The sync mount option
       NFS客户端对待sync挂载选项的方式和挂载其他文件系统不同。如果即不指定sync也不指定async,则默认为async。
       async表示异步写入,除了发生下面几种特殊情况,NFS客户端会延迟发送写操作到服务端:

              ● 内存压力迫使回收系统内存资源。
              ● 客户端应用程序显式使用了sync类的系统调用,如sync(2),msync(2)或fsync(3)。
              ● 关闭文件时。
              ● 文件被锁/解锁。

       换句话说,在正常环境下,应用程序写的数据不会立即保存到服务端。(当然,关闭文件时是立即同步的)

       如果在挂载点上指定sync选项,任何将数据写入挂载点上文件的系统调用都会先把数据刷到服务端上,然后系统调
       用才把控制权返回给用户空间。这提供了客户端之间更好的数据缓存一致性,但消耗了大量性能。

       在未使用sync挂载选项时,应用程序可以使用O_SYNC修饰符强制立即把单个文件的数据刷入到服务端。

   Using file locks with NFS
       网络锁管理器(Network Lock Manager,NLM)协议是一个独立的协议,用于管理NFSv2和NFSv3的文件锁。为了让客户端
       或服务端在重启后能恢复锁,需要使用另一个网络状态管理器(Network Status Manager,NSM)协议。在NFSv4中,NFS
       直协议自身接支持文件锁相关功能,所以NLM和NSM就不再使用了。

       在大多数情况下,NLM和NSM服务是自动启动的,并且不需要额外的任何配置。但需要配置NFS客户端使用的是fqdn名
       称,以保证NFS服务端可以找到客户端并通知它们服务端的重启动作。

       NLS仅支持advisory文件锁。要锁定NFS文件,可以使用待F_GETLK和F_SETLK的fcntl(2)命令。NFS客户端会转换通过
       flock(2)获取到的锁为advisory文件锁。

       当服务端不支持NLM协议,或者当NFS服务端是通过防火墙但阻塞了NLM服务端口时,则需要指定nolock挂载选项。
       当客户端挂载导出的/var目录时,必须使用nolock禁用NLM锁,因为/var目录中包含了NLM锁相关的信息。
       (注,因为NLM仅在nfsv2和nfsv3中支持,所以NFSv4不支持nolock选项)

       当仅有一个客户端时,使用nolock选项可以提高一定的性能。

   NFS version 4 caching features
       NFSv4上的数据和元数据缓存行为和之前的版本相似。但是NFSv4添加了两种特性来提升缓存行为:change attributes
       以及delegation。(注:nfsv4中取消了weak cache consistency)

       change attribute是一种新的被跟踪的文件/目录元数据信息。它替代了使用文件mtime和ctime作为客户端验证缓存内
       容的方式。但注意,change attributes和客户端/服务端文件的时间戳的改变无关。

       文件委托(file delegation)是NFSv4的客户端和NFSv4服务端之前的一种合约,它允许客户端临时处理文件,就像没有
       其他客户端正在访问该文件一样。当有其他客户端尝试访问被委托文件时,服务端一定会通知服务端(通过callback请
       求)。一旦文件被委托给某客户端,客户端可以尽可能大地缓存该文件的数据和元数据,而不需要联系服务端。

       文件委托有两种方式:read和write。读委托意味着当其他客户端尝试向委托文件写入数据时,服务端通知客户端。而
       写委托意味着其他客户端无论是尝试读还是写,服务端都会通知客户端。

       NFSv4上当文件被打开的时候,服务端会授权文件委托,并且当其他客户端想要访问该文件但和已授权的委托冲突时,
       服务端可以在任意时间点重调(recall)委托关系。不支持对目录的委托。
       (译者注:只有读委托和读委托不会冲突)

       为了支持委托回调(delegation callback),在客户端初始联系服务端时,服务端会检查网络并返回路径给客户端。如果
       和客户端的联系无法建立,服务端将不会授权任何委托给客户端。

1.7 使用exportfs命令导出目录

1.8 RPC的调整工具rpcdebug

1.9 深入NFS的方向


1.1 概述

相似ext亲族、xfs格式的当半夏件系统,它们都以因而单个文件名称空间(name space)来含有众多文本,并提供基本的文书处理和空间分配效能。而文件是存放在文件系统中(上述名称空间内)的单个命名对象,种种文件都饱含了文件实际数目和属性数据。可是,那几个项指标文件系统和其内文件都以置放在地头主机上的。

其实,还会有网络文件系统。从名称想到所满含的意义,就是跨网络的文件系统,将远程主机上的文件系统(或目录)寄放在本土主机上,就如它自个儿就是本土文件系统相近。在Windows情状下有cifs协议落到实处的互连网文件系统,在Unix境遇下,最有名是由NFS合同贯彻的NFS文件系统。

NFS即network file system的缩写,nfs是归属用起来超级轻松,研商起来非常难的事物。相信,使用过它或学过它的人都不会感到它的利用有别的困难,只需将远程主机上要分享给客商端的目录导出(export),然后在顾客端上挂载即可像当麻芋果件系统相似。到近日截至,nfs已经有5个本子,NFSv1是未宣布出来的版本,v2和v3版本脚下来讲基本已经淘汰,v4版本是日前应用最多的版本,nfsv4.1是当前流行的本子。

1.2 RPC不可不知的原理

要介绍NFS,必然要先介绍RPC。RPC是remote procedure call的简写,大家都将其译为"远程进度调用",它是风度翩翩种框架,这种框架在巨型集团选取超多。而NFS便是此中生龙活虎种,别的NIS、hadoop也是利用rpc框架完结的。

1.2.1 RPC原理

所谓的remote procedure call,正是在本地调用远程主机上的procedure。以本土试行"cat -n ~/abc.txt"命令为例,在当地试行cat命令时,会倡导有个别系统调用(如open()、read()、close()等),并将cat的采纳和参数字传送递给这个函数,于是最终促成了文本的查看作用。在RPC层面上通晓,下面发起的种类调用正是procedure,每一种procedure对应叁个或四个职能。而rpc的全名remote procedure call所代表的正是兑现长途procedure调用,让远道主机去调用对应的procedure。

地点的cat命令只是本地实施的下令,怎样落实远程cat,甚至其余中长途命令?平常常有二种大概完结的秘技:

(1).使用ssh类的工具,将在推行的命令传递到长途主机上并执行。但ssh不只怕直接调用远程主机上cat所提倡的那几个系统调用(如open()、read()、close()等)。

(2).使用互联网socket的格局,告诉远程服务进度要调用的函数。但这么的主机间进度通讯情势相通都以daemon类服务,daemon类的顾客端(即服务的花费方)每调用七个劳动的成效,都须求编写制定一批完成互连网通讯相关的代码。不止轻巧失误,还比较复杂。

而rpc是最棒的减轻方法。rpc是意气风发种框架,在这里框架中后生可畏度合併了网络通讯代码和封包、解包格局(编码、解码)。以下是rpc整个经过,以cat NFS文件系统中的a.sh文件为例。

 澳门新浦京娱乐场网站 5   澳门新浦京娱乐场网站 6

nfs客商端推行cat a.sh,由于a.sh是NFS文件系统内的文本,所以cat会发起一些procedure调用(如open/read/close),这么些procedure和对应的参数会发送给rpc client(只怕是单个procedure,也或者是八个procedure组合在一块儿二回性发送给rpc client,在NFSv4上是后面一个),rpc client会将这一个数量开展编码封装(封装和平解决封装成效由stub代码达成),然后将打包后的数额经过互联网发送给rpc server,rpc server会对包裹的多少实行解封,于是就收获了要调用的procedures和相应的参数,然后将它们交给NFS服务进程,最后进展procedure的调用。NFS服务发起procedure调用后,会得到数码(或然是数量我,可能是意况音讯等),于是交给rpc server,rpc server会将那几个多少封装并经过网络发送给rpc client,rpc client解封于是获得末了的回到结果。

从下边的长河能够清楚,rpc的机能是数额封装,rpc client封装待调用的procedure及其参数,rpc server封装重回的数码。

所以瞩目,rpc的长途procedure调用的定义不是在本地向远程主机发起procedure的调用,而是将在实行的procedure包装后透过rpc发送出去,让远道主机上的应和程序自己去实行procedure并赶回数据。也正是说rpc的成效是包裹和发送,实际不是发起调用。

举个更简便易行的例证,使用google找出时,实现寻找成效的procedure和要寻找的剧情就是rpc client封装的指标,也是rpc server要解封的靶子,找寻的结果则是rpc server封装的对象,也是rpc client要解封的对象。解封后的终极结果即为google寻觅的结果。

1.2.2 RPC工具介绍

在CentOS 6/7上,rpc server由rpcbind程序完成,该程序由rpcbind包提供。

[root@xuexi ~]# yum -y install rpcbind

[root@xuexi ~]# rpm -ql rpcbind | grep bin/
/usr/sbin/rpcbind
/usr/sbin/rpcinfo

里面rpcbind是rpc主程序,在rpc服务端该程序必需处于已运行情形,其默许监听在111端口。rpcinfo是rpc相关音讯查询工具。

对此rpc来说,其所一贯保管的是programs,programs由二个或多少个procedure组成。这几个program称为RPC program或RPC service。

平日来讲图,此中NFS、NIS、hadoop等誉为网络服务,它们由多个进度或程序(program)组成。举个例子NFS包含rpc.nfsd、rpc.mountd、rpc.statd和rpc.idmapd等programs,在那之中每一种program都包含了叁个或七个procedure,比方rpc.nfsd那么些顺序富含了如OPEN、CLOSE、READ、COMPOUND、GETATT凯雷德等procedure,rpc.mountd也至关心珍惜要有MNT和UMNT七个procedure。

澳门新浦京娱乐场网站 7

对于RPC来说,它是不知晓NFS/NIS/hadoop那后生可畏层的,它一直管理programs。每一种program运行时都供给找111端口的rpc服务登记注册,然后RPC服务会为该program映射贰个program number以至分配叁个端口号。当中每一个program都有二个唯风姿罗曼蒂克与之对应的program number,它们的映射关系定义在/etc/rpc文件中。以后rpc server将使用program number来推断要调用的是哪位program中的procedure并将解包后的数目传递给该program。

诸如只运维rpcbind时。

[root@xuexi ~]# systemctl start rpcbind.service

[root@xuexi ~]# rpcinfo -p localhost
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper

其间第一列正是program number,第二列vers表示对应program的本子号,最后一列为RPC管理的RPC service名,其实便是各program对应的名字为。

当顾客端获取到rpc所管理的service的端口后,就能够与该端口举行通信了。但只顾,尽管客商端已经获得了端口号,客商端仍会依据rpc做为中间人张开通信。也正是说,无论几时,客商端和rpc所管理的服务的通讯都必须要透过rpc来形成。之所以如此,是因为唯有rpc才具封装和解封装数据。

既然如此顾客端不可能向来拿着端口号和rpc service通讯,那还提供端口号干嘛?那一个端口号是为rpc server提供的,rpc server解包数据后,会将数据通过此端口交给对应的rpc service。

1.3 启动NFS

NFS本人是很复杂的,它由众多进度组成。这几个过程的运转程序由nfs-utils包提供。由于nfs是使用RPC框架贯彻的,所以必要先安装好rpcbind。不过安装nfs-utils时会自动安装rpcbind。

[root@xuexi ~]# yum -y install nfs-utils

[root@xuexi ~]# rpm -ql nfs-utils | grep /usr/sbin
/usr/sbin/blkmapd
/usr/sbin/exportfs
/usr/sbin/mountstats
/usr/sbin/nfsdcltrack
/usr/sbin/nfsidmap
/usr/sbin/nfsiostat
/usr/sbin/nfsstat
/usr/sbin/rpc.gssd
/usr/sbin/rpc.idmapd
/usr/sbin/rpc.mountd
/usr/sbin/rpc.nfsd
/usr/sbin/rpc.svcgssd
/usr/sbin/rpcdebug
/usr/sbin/showmount
/usr/sbin/sm-notify
/usr/sbin/start-statd

当中以"rpc."开端的前后相继都以rpc service,分别达成分歧的信守,运维它们时每种都亟需向rpcbind进行登记注册。

[root@xuexi ~]# systemctl start nfs.service

[root@xuexi ~]# rpcinfo -p localhost
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  56229  status
    100024    1   tcp  57226  status
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  48609  nlockmgr
    100021    3   udp  48609  nlockmgr
    100021    4   udp  48609  nlockmgr
    100021    1   tcp  50915  nlockmgr
    100021    3   tcp  50915  nlockmgr
    100021    4   tcp  50915  nlockmgr

能够看见,每种program都运营了差别版本的功效。个中nfs program为rpc.nfsd对应的program,为nfs服务的主进度,端口号为2049。mountd对应的program为rpc.mountd,它为客商端的mount和umount命令提供服务,即挂载和卸载NFS文件系统时会联系mountd服务,由mountd维护相关挂载音信。nlockmgr对应的program为rpc.statd,用于爱慕文件锁和文书委托有关职能,在NFSv4从前,称之为NSM(network status manager)。nfs_acl和status,由此可以看到是采访调控列表和景色新闻维护的program。

再看看运维的连锁进度音信。

[root@xuexi ~]# ps aux | grep -E "[n]fs|[r]pc"
root        748  0.0  0.0      0     0 ?        S<   Jul26   0:00 [rpciod]
rpc        6127  0.0  0.0  64908  1448 ?        Ss   Jul26   0:00 /sbin/rpcbind -w
rpcuser    6128  0.0  0.0  46608  1836 ?        Ss   Jul26   0:00 /usr/sbin/rpc.statd --no-notify
root       6242  0.0  0.0      0     0 ?        S<   Jul26   0:00 [nfsiod]
root       6248  0.0  0.0      0     0 ?        S    Jul26   0:00 [nfsv4.0-svc]
root      17128  0.0  0.0  44860   976 ?        Ss   02:49   0:00 /usr/sbin/rpc.mountd
root      17129  0.0  0.0  21372   420 ?        Ss   02:49   0:00 /usr/sbin/rpc.idmapd
root      17134  0.0  0.0      0     0 ?        S<   02:49   0:00 [nfsd4]
root      17135  0.0  0.0      0     0 ?        S<   02:49   0:00 [nfsd4_callbacks]
root      17141  0.0  0.0      0     0 ?        S    02:49   0:00 [nfsd]
root      17142  0.0  0.0      0     0 ?        S    02:49   0:00 [nfsd]
root      17143  0.0  0.0      0     0 ?        S    02:49   0:00 [nfsd]
root      17144  0.0  0.0      0     0 ?        S    02:49   0:00 [nfsd]
root      17145  0.0  0.0      0     0 ?        S    02:49   0:00 [nfsd]
root      17146  0.0  0.0      0     0 ?        S    02:49   0:00 [nfsd]
root      17147  0.0  0.0      0     0 ?        S    02:49   0:00 [nfsd]
root      17148  0.0  0.0      0     0 ?        S    02:49   0:00 [nfsd]

澳门新浦京娱乐场网站设置配备nfs,NFS基本使用。里面有生龙活虎项/usr/sbin/rpc.idmapd进度,该进程是提供服务端的uid/gid <==> username/groupname的投射翻译服务。客商端的uid/gid <==> username/groupname的映射翻译服务则由"nfsidmap"工具达成,详细表明见下文。

1.4 配置导出目录和挂载使用

1.4.1 配置nfs导出目录

在将服务端的目录分享(share)或许说导出(export)给顾客端以前,需求先布署好要导出的目录。比方何人可访谈该目录,该目录是或不是可写,以哪个人身份拜谒导出目录等。

安插导出目录的布置文件为/etc/exports或/etc/exports.d/*.exports文件,在nfs服务运行时,会自动加载那些配置文件中的全体导出项。以下是导出示例:

/www    172.16.0.0/16(rw,async,no_root_squash)

个中/www是导出目录,即分享给顾客端的目录;172.16.0.0/16是访问调节列表ACL,独有该网段的客商端主机技术访谈该导出目录,即挂载该导出目录;紧跟在主机列表后的括号及括号中的内容定义的是该导出目录对该主机的导出选项,比方(rw,async,no_root_squash)表示顾客端挂载/www后,该目录可读写、异步、可保留root顾客的权力,具体的导出选项稍后列出。

以下是可吸纳的三种导出方式:

/www1    (rw,async,no_root_squash)  # 导出给所有主机,此时称为导出给world
/www2    172.16.1.1(rw,async)       # 仅导出给单台主机172.16.1.1
/www3    172.16.0.0/16(rw,async) 192.168.10.3(rw,no_root_squash)   # 导出给网段172.16.0.0/16,还导出给单台
                                                                   # 主机192.168.10.3,且它们的导出选项不同
/www4    www.a.com(rw,async)        # 导出给单台主机www.a.com主机,但要求能解析该主机名
/www     *.b.com(rw,async)          # 导出给b.com下的所有主机,要求能解析对应主机名

以下是常用的部分导出选项表明,越来越多的导出选项见man exports:粗衣粝食的暗中认可项是:ro,sync,root_squash,no_all_squash,wdelay。

导出选项

(加粗标红为默认)

选项说明

rw、ro

导出目录可读写还是只读(read-only)。

sync、async

同步共享还是异步共享。异步时,客户端提交要写入的数据到服务端,服务端接收数据后直接响应客户端,但此时数据并不一定已经写入磁盘中,而同步则是必须等待服务端已将数据写入磁盘后才响应客户端。也就是说,给定异步导出选项时,虽然能提升一些性能,但在服务端突然故障或重启时有丢失一部分数据的风险。

当然,对于只读(ro)的导出目录,设置sync或async是没有任何差别的。

anonuid

anongid

此为匿名用户(anonymous)的uid和gid值,默认都为65534,在/etc/passwd和/etc/shadow中它们对应的用户名为nfsnobody。该选项指定的值用于身份映射被压缩时。

root_squash

no_root_squash

是否将发起请求(即客户端进行访问时)的uid/gid=0的root用户映射为anonymous用户。即是否压缩root用户的权限。

all_squash

no_all_squash

是否将发起请求(即客户端进行访问时)的所有用户都映射为anonymous用户,即是否压缩所有用户的权限。

对于root用户,将取(no_)root_squash和(no_)all_squash的交集。例如,no_root_squash和all_squash同一时候安装时,root仍被减削,root_squash和no_all_squash同偶尔间设置时,root也被收缩。

些微导出选项需求特别其余装置。举个例子,导出选项设置为rw,但借使目录本身并未有w权限,恐怕mount时钦点了ro挂载选项,则如出生龙活虎辙分裂意写操作。

至于其余导出选项,基本不需求去关怀。

在布署文件写好要导出的目录后,直接重启nfs服务就可以,它会读取那一个安顿文件。随后就足以在顾客端执行mount命令实行挂载。

举例,exports文件内容如下:

/vol/vol0       *(rw,no_root_squash)
/vol/vol2       *(rw,no_root_squash)
/backup/archive *(rw,no_root_squash)

1.4.2 挂载nfs文件系统

然后去顾客端上挂载它们。

[root@xuexi ~]# mount -t nfs 172.16.10.5:/vol/vol0 /mp1
[root@xuexi ~]# mount 172.16.10.5:/vol/vol2 /mp2
[root@xuexi ~]# mount 172.16.10.5:/backup/archive /mp3

挂载时"-t nfs"能够省略,因为对于mount来讲,唯有挂载nfs文件系统才会写成host:/path格式。当然,除了mount命令,nfs-utils包还提供了单独的mount.nfs命令,它实在和"mount -t nfs"命令是同豆蔻年华的。

mount挂载时得以钦点挂载选项,当中囊括mount通用挂载选项,如rw/ro,atime/noatime,async/sync,auto/noauto等,也囊括针对nfs文件系统的挂载选项。以下列出多少个科普的,更加多的源委查看man nfs和man mount。

选项

参数意义

默认值

suid

nosuid

如果挂载的文件系统上有设置了suid的二进制程序,

使用nosuid可以取消它的suid

suid

rw

ro

尽管服务端提供了rw权限,但是挂载时设定ro,则还是ro权限

权限取交集

rw

exec/noexec

是否可执行挂载的文件系统里的二进制文件

exec

user

nouser

是否运行普通用户进行档案的挂载和卸载

nouser

auto

noauto

auto等价于mount -a,意思是将/etc/fstab里设定的全部重挂一遍

auto

sync

nosync

同步挂载还是异步挂载

async

atime

noatime

是否修改atime,对于nfs而言,该选项是无效的,理由见下文

 

diratime

nodiratime

是否修改目录atime,对于nfs而言,该挂载选项是无效的,理由见下文

 

remount

重新挂载

 

以下是指向nfs文件系统的挂载选项。在那之中并未有交给关于缓存选项(ac/noac、cto/nocto、lookupcache)的验证,它们能够直接利用默许值,借使想要了然缓存相关内容,能够查阅man nfs。

选项

功能

默认值

fg/bg

挂载失败后mount命令的行为。默认为fg,表示挂载失败时将直接报错退出,如果是bg,

挂载失败后会创建一个子进程不断在后台挂载,而父进程mount自身则立即退出并返回0状态码。

fg

timeo

NFS客户端等待下一次重发NFS请求的时间间隔,单位为十分之一秒。

基于TCP的NFS的默认timeo的值为600(60秒)。

 

hard/soft

决定NFS客户端当NFS请求超时时的恢复行为方式。如果是hard,将无限重新发送NFS请求。

例如在客户端使用df -h查看文件系统时就会不断等待。

设置soft,当retrans次数耗尽时,NFS客户端将认为NFS请求失败,从而使得NFS客户端

返回一个错误给调用它的程序。

hard

retrans

NFS客户端最多发送的请求次数,次数耗尽后将报错表示连接失败。如果hard挂载选项生效,

则会进一步尝试恢复连接。

3

rsize

wsize

一次读出(rsize)和写入(wsize)的区块大小。如果网络带宽大,这两个值设置大一点能提升传

输能力。最好设置到带宽的临界值。

单位为字节,大小只能为1024的倍数,且最大只能设置为1M。

 

只顾三点:

(1).所谓的soft在特定的情况下超时后会引致静态数据中断。因而,仅当顾客端响应速度比数据完整性更关键时才使用soft选项。利用基于TCP的NFS(除非呈现钦点使用UDP,不然未来连连暗中认可使用TCP)或扩张retrans重试次数能够减少利用soft选项带给的高危机。

(2).由于nfs的顾客端挂载后会缓存文件的性质新闻,当中包蕴各个文件时间戳,所以mount钦赐期间相关的挂载选项是一贯不意思的,它们不会有其余功能,包罗atime/noatime,diratime/nodiratime,relatime/norelatime以至strictatime/nostrictatime等。具体可以知道man nfs中"DATA AND METADATA COHERENCE"段的"File timestamp maintainence"表达,也许见本文末尾的翻译。

(3).假如是要开机挂载NFS文件系统,格局自然是写入到/etc/fstab文件或将mount命令纳入rc.local文件中。如若是将/etc/fstab中,那么在系统情形初步化(exec /etc/rc.d/rc.sysinit)的时候会加载fstab中的内容,假如挂载fstab中的文件系统出错,则会引致系统情况开头化战败,结果是系统开机失败。所以,要开机挂载nfs文件系统,则必要在/etc/fstab中投入叁个挂载选项"_rnetdev",幸免无法交流nfs服务端时导致开机运维失利。比如:

172.16.10.5:/www    /mnt    nfs    defaults,_rnetdev    0    0

当导出目录后,将要/var/lib/nfs/etab文件中写入一条对应的导出记录,那是nfs维护的导出表,该表的剧情会提交rpc.mountd进程,并在必要的时候(mountd选取到顾客端的mount央浼时),将此导出表中的内容加载到基本中,内核也单独维护一张艺谋(Zhang Yimou)出表。

1.4.3 nfs伪文件系统

服务端导出/vol/vol0、/vol/vol2和/backup/archive后,个中vol0和vol1是连在三个目录下的,但它们和archive目录未有连在一同,nfs选拔伪文件系统的方式来桥接那几个不三番五次的导出目录。桥接的法子是创办那叁个未导出的接连目录,如伪vol目录,伪backup目录以至一级的伪根,如下图所示。

澳门新浦京娱乐场网站 8

当顾客端挂载后,每趟访谈导出目录时,其实都以由此找到伪文件系统(文件系统都有id,在nfs上伪文件系统的id称为fsid)并一贯到导出目录的。

1.5 showmount命令

行使showmount命令能够查看某后生可畏台主机的导出目录意况。因为涉嫌到rpc需要,所以只要rpc出难题,showmount相像会傻傻地等候。

主要有3个选项。

showmount [ -ade]  host
-a:以host:dir格式列出客户端名称/IP以及所挂载的目录。但注意该选项是读取NFS服务端/var/lib/nfs/rmtab文件,
  :而该文件很多时候并不准确,所以showmount -a的输出信息很可能并非准确无误的
-e:显示NFS服务端所有导出列表。
-d:仅列出已被客户端挂载的导出目录。

其它showmount的结果是排序过的,所以和实际的导出目录顺序恐怕并不一样等。

例如:

[root@xuexi ~]# showmount -e 172.16.10.5
Export list for 172.16.10.5:
/backup/archive *
/vol/vol2       *
/vol/vol0       *
/www            172.16.10.4

[root@xuexi ~]# showmount -d 172.16.10.5
Directories on 172.16.10.5:
/backup/archive
/vol/vol0
/vol/vol2

1.6 nfs身份映射

NFS的指标是导出目录给各顾客端,因而导出目录中的文件在服务端和顾客端上必定将有两套属性、权限集。

举例说,服务端导出目录中某a文件的持有者和所属组都为A,但在客商端上海市蜃楼A,那么在顾客端上怎么显示a文件的全部者等属性。再例如,在顾客端上,以客商B在导出目录中成立了叁个文件b,要是服务端上未有顾客B,在服务端上该怎么调控文件b的持有者等品质。

进而,NFS采纳uid/gid <==> username/groupname映射的章程消除客商端和服务端两套属性难点。由于服务端只可以调控它本人风流倜傥端的身份映射,所以客商端也风姿洒脱律须要身份映射组件。也便是说,服务端和顾客端两端都必要对导出的富有文件的持有者和所属组进行映射。

但要注意,服务端的身价映射组件为rpc.idmapd,它以守护进程方式行事。而客商端应用nfsidmap工具举行身份映射。

劳动端映射时以uid/gid为尺度,意味着顾客端以身份B(假诺对应uid=Xb,gid=Yb)创制的文书或修改了文件的全数者属性时,在服务端将从/etc/passwd(此处不思考别的客户验证方式)文件中搜索uid=Xb,gid=Yb的顾客,假使能寻觅到,则设置该公文的全部者和所属组为此uid/gid对应的username/groupname,要是搜索不到,则文件全部者和所属组直接显示为uid/gid的值。

客商端映射时以username/groupname为标准,代表服务端上文件全数者为A时,则在客户端上搜索A客商名,假诺寻觅到,则文件全部者显示为A,不然都将显得为nobody。注意,顾客端不关乎任何uid/gid调换翻译进度,固然客商端上A客商的uid和服务端上A客商的uid分化,也仍显得为顾客A。也正是说,客商端上文件全部者只有二种结果,要么和服务端客户同名,要么显示为nobody。

进而考虑生机勃勃种特有情状,客商端上以客户B(其uid=B1)创设文件,假设服务端上未曾uid=B1的客商,那么创设文件时提交给服务端后,在服务端上该文件全体者将显示为B1(注意它是八个数值)。再重返到客商端上看,客商端映射时只简简单单映射username,不关乎uid的调换,因而它感觉该公文的主人为B1(不是uid,而是username),但客商端上自然未有客商名称叫B1的客户(就算有uid=B1对应的客商B),由此在客商端,此文件全数者将奇异地将显得为nobody,其古怪之处在于,顾客端上以身份B成立的文件,结果在客商端上却显得为nobody。

综上思考,刚强提议顾客端和服务端的客商身份要统豆蔻年华,且尽量让各uid、gid能对应上。

1.7 使用exportfs命令导出目录

除此之外运转nfs服务加载配置文件/etc/exports来导出目录,使用exportfs命令也得以一贯导出目录,它没有必要加载配置文件/etc/exports,当然exportfs也足以加在/etc/exports文件来导出目录。实际上,nfs服务运营脚本中正是使用exportfs命令来导出/etc/exports中内容的。

举例,CentOS 6上/etc/init.d/nfs文件中,导出和卸载导出目录的指令为:

[root@xuexi ~]# grep exportfs /etc/init.d/nfs  
        [ -x /usr/sbin/exportfs ] || exit 5
        action $"Starting NFS services: " /usr/sbin/exportfs -r
        cnt=`/usr/sbin/exportfs -v | /usr/bin/wc -l`
                action $"Shutting down NFS services: " /usr/sbin/exportfs -au
        /usr/sbin/exportfs -r

在CentOS 7上则如下:

[root@xuexi ~]# grep exportfs /usr/lib/systemd/system/nfs.service      
ExecStartPre=-/usr/sbin/exportfs -r
ExecStopPost=/usr/sbin/exportfs -au
ExecStopPost=/usr/sbin/exportfs -f
ExecReload=-/usr/sbin/exportfs -r

本来,不论怎么着,nfsd等医护进度是必须已经运转好的。

以下是CentOS 7上exportfs命令的用法。注意, CentOS 7比CentOS 6多部分筛选。

-a     导出或卸载所有目录。
-o options,...
       指定一系列导出选项(如rw,async,root_squash),这些导出选项在exports(5)的man文档中有记录。
-i     忽略/etc/exports和/etc/exports.d目录下文件。此时只有命令行中给定选项和默认选项会生效。
-r     重新导出所有目录,并同步修改/var/lib/nfs/etab文件中关于/etc/exports和/etc/exports.d/
       *.exports的信息(即还会重新导出/etc/exports和/etc/exports.d/*等导出配置文件中的项)。该
       选项会移除/var/lib/nfs/etab中已经被删除和无效的导出项。
-u     卸载(即不再导出)一个或多个导出目录。
-f     如果/prof/fs/nfsd或/proc/fs/nfs已被挂载,即工作在新模式下,该选项将清空内核中导出表中
       的所有导出项。客户端下一次请求挂载导出项时会通过rpc.mountd将其添加到内核的导出表中。
-v     输出详细信息。
-s     显示适用于/etc/exports的当前导出目录列表。

例如:

(1).导出/www目录给顾客端172.16.10.6。

exportfs 172.16.10.6:/www

(2).导出/www目录给全部人,并点名导出选项。

exportfs :/www -o rw,no_root_squash

(3).导出exports文件中的内容。

exportfs -a

(4).重新导出装有已导出的目录。包含exports文件一月exportfs单独导出的目录。

exportfs -ar

(5).卸载所有已导出的目录,富含exports文件中的内容和exportfs单独导出的剧情。即其本质为清空内核维护的导出表。

exportfs -au

(6).只卸载某一个导出目录。

exportfs -u 172.16.10.6:/www

1.8 RPC的调试工具rpcdebug

在比超多时候NFS客商端或许服务端现身十分,譬喻连接不上、锁状态遗失、连接相当慢等等难点,都得以对NFS进行调整来发掘标题出在哪些环节。NFS有广大进程都能够直接援救调节和测验选项,但最直白的调治格局是调度rpc,因为NFS的种种乞请和响应都会经过RPC去封装。但显然,调节和测量检验RPC比直接调节和测量检验NFS时更难剖析出难点所在。以下只介绍怎么样调解RPC。

rpc单独提供三个调度工具rpcdebug。

[root@xuexi ~]# rpcdebug -vh
usage: rpcdebug [-v] [-h] [-m module] [-s flags...|-c flags...]
       set or cancel debug flags.

Module     Valid flags
rpc        xprt call debug nfs auth bind sched trans svcsock svcdsp misc cache all
nfs        vfs dircache lookupcache pagecache proc xdr file root callback client mount fscache pnfs pnfs_ld state all
nfsd       sock fh export svc proc fileop auth repcache xdr lockd all
nlm        svc client clntlock svclock monitor clntsubs svcsubs hostcache xdr all

其中:

-v:显示更详细信息
-h:显示帮助信息
-m:指定调试模块,有rpc/nfs/nfsd/nlm共4个模块可调试。
  :顾名思义,调试rpc模块就是直接调试rpc的问题,将记录rpc相关的日志信息;
  :调试nfs是调试nfs客户端的问题,将记录nfs客户端随之产生的日志信息;
  :nfsd是调试nfs服务端问题,将记录nfsd随之产生的日志信息;
  :nlm是调试nfs锁管理器相关问题,将只记录锁相关信息
-s:指定调试的修饰符,每个模块都有不同的修饰符,见上面的usage中"Valid flags"列的信息
-c:清除或清空已设置的调试flage

比方设置调节和测量试验nfs客户端的新闻。

rpcdebug -m nfs -s all

当有消息现身时,将记录到syslog中。比方以下是客商端挂载nfs导出目录发生的消息,寄存在/var/log/messages中,超级多,所以排除和解决难点时索要有意志力。

Jul 29 11:24:04 xuexi kernel: NFS: nfs mount opts='vers=4,addr=172.16.10.9,clientaddr=172.16.10.3'
Jul 29 11:24:04 xuexi kernel: NFS:   parsing nfs mount option 'vers=4'
Jul 29 11:24:04 xuexi kernel: NFS:   parsing nfs mount option 'addr=172.16.10.9'
Jul 29 11:24:04 xuexi kernel: NFS:   parsing nfs mount option 'clientaddr=172.16.10.3'
Jul 29 11:24:04 xuexi kernel: NFS: MNTPATH: '/tmp/testdir'
Jul 29 11:24:04 xuexi kernel: --> nfs4_try_mount()
Jul 29 11:24:04 xuexi kernel: --> nfs4_create_server()
Jul 29 11:24:04 xuexi kernel: --> nfs4_init_server()
Jul 29 11:24:04 xuexi kernel: --> nfs4_set_client()
Jul 29 11:24:04 xuexi kernel: --> nfs_get_client(172.16.10.9,v4)
Jul 29 11:24:04 xuexi kernel: NFS: get client cookie (0xffff88004c561800/0xffff8800364cd2c0)
Jul 29 11:24:04 xuexi kernel: nfs_create_rpc_client: cannot create RPC client. Error = -22
Jul 29 11:24:04 xuexi kernel: --> nfs4_realloc_slot_table: max_reqs=1024, tbl->max_slots 0
Jul 29 11:24:04 xuexi kernel: nfs4_realloc_slot_table: tbl=ffff88004b715c00 slots=ffff880063f32280 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_realloc_slot_table: return 0
Jul 29 11:24:04 xuexi kernel: NFS: nfs4_discover_server_trunking: testing '172.16.10.9'
Jul 29 11:24:04 xuexi kernel: NFS call  setclientid auth=UNIX, 'Linux NFSv4.0 172.16.10.3/172.16.10.9 tcp'
Jul 29 11:24:04 xuexi kernel: NFS reply setclientid: 0
Jul 29 11:24:04 xuexi kernel: NFS call  setclientid_confirm auth=UNIX, (client ID 578d865901000000)
Jul 29 11:24:04 xuexi kernel: NFS reply setclientid_confirm: 0
Jul 29 11:24:04 xuexi kernel: NFS: <-- nfs40_walk_client_list using nfs_client = ffff88004c561800 ({2})
Jul 29 11:24:04 xuexi kernel: NFS: <-- nfs40_walk_client_list status = 0
Jul 29 11:24:04 xuexi kernel: nfs4_schedule_state_renewal: requeueing work. Lease period = 5
Jul 29 11:24:04 xuexi kernel: NFS: nfs4_discover_server_trunking: status = 0
Jul 29 11:24:04 xuexi kernel: --> nfs_put_client({2})
Jul 29 11:24:04 xuexi kernel: <-- nfs4_set_client() = 0 [new ffff88004c561800]
Jul 29 11:24:04 xuexi kernel: <-- nfs4_init_server() = 0
Jul 29 11:24:04 xuexi kernel: --> nfs4_get_rootfh()
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_type: type=040000
Jul 29 11:24:04 xuexi kernel: decode_attr_change: change attribute=4651240235397459983
Jul 29 11:24:04 xuexi kernel: decode_attr_size: file size=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_fsid: fsid=(0x0/0x0)
Jul 29 11:24:04 xuexi kernel: decode_attr_fileid: fileid=2
Jul 29 11:24:04 xuexi kernel: decode_attr_fs_locations: fs_locations done, error = 0
Jul 29 11:24:04 xuexi kernel: decode_attr_mode: file mode=0555
Jul 29 11:24:04 xuexi kernel: decode_attr_nlink: nlink=23
Jul 29 11:24:04 xuexi kernel: decode_attr_owner: uid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_group: gid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_rdev: rdev=(0x0:0x0)
Jul 29 11:24:04 xuexi kernel: decode_attr_space_used: space used=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_time_access: atime=1501990255
Jul 29 11:24:04 xuexi kernel: decode_attr_time_metadata: ctime=1501989952
Jul 29 11:24:04 xuexi kernel: decode_attr_time_modify: mtime=1501989952
Jul 29 11:24:04 xuexi kernel: decode_attr_mounted_on_fileid: fileid=1
Jul 29 11:24:04 xuexi kernel: decode_getfattr_attrs: xdr returned 0
Jul 29 11:24:04 xuexi kernel: decode_getfattr_generic: xdr returned 0
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_supported: bitmask=fdffbfff:00f9be3e:00000000
Jul 29 11:24:04 xuexi kernel: decode_attr_fh_expire_type: expire type=0x0
Jul 29 11:24:04 xuexi kernel: decode_attr_link_support: link support=true
Jul 29 11:24:04 xuexi kernel: decode_attr_symlink_support: symlink support=true
Jul 29 11:24:04 xuexi kernel: decode_attr_aclsupport: ACLs supported=3
Jul 29 11:24:04 xuexi kernel: decode_server_caps: xdr returned 0!
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_lease_time: file size=90
Jul 29 11:24:04 xuexi kernel: decode_attr_maxfilesize: maxfilesize=18446744073709551615
Jul 29 11:24:04 xuexi kernel: decode_attr_maxread: maxread=131072
Jul 29 11:24:04 xuexi kernel: decode_attr_maxwrite: maxwrite=131072
Jul 29 11:24:04 xuexi kernel: decode_attr_time_delta: time_delta=1 0
Jul 29 11:24:04 xuexi kernel: decode_attr_pnfstype: bitmap is 0
Jul 29 11:24:04 xuexi kernel: decode_attr_layout_blksize: bitmap is 0
Jul 29 11:24:04 xuexi kernel: decode_fsinfo: xdr returned 0!
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: <-- nfs4_get_rootfh() = 0
Jul 29 11:24:04 xuexi kernel: Server FSID: 0:0
Jul 29 11:24:04 xuexi kernel: Pseudo-fs root FH at ffff880064c4ad80 is 8 bytes, crc: 0x62d40c52:
Jul 29 11:24:04 xuexi kernel: 01000100 00000000
Jul 29 11:24:04 xuexi kernel: --> nfs_probe_fsinfo()
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_supported: bitmask=fdffbfff:00f9be3e:00000000
Jul 29 11:24:04 xuexi kernel: decode_attr_fh_expire_type: expire type=0x0
Jul 29 11:24:04 xuexi kernel: decode_attr_link_support: link support=true
Jul 29 11:24:04 xuexi kernel: decode_attr_symlink_support: symlink support=true
Jul 29 11:24:04 xuexi kernel: decode_attr_aclsupport: ACLs supported=3
Jul 29 11:24:04 xuexi kernel: decode_server_caps: xdr returned 0!
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_lease_time: file size=90
Jul 29 11:24:04 xuexi kernel: decode_attr_maxfilesize: maxfilesize=18446744073709551615
Jul 29 11:24:04 xuexi kernel: decode_attr_maxread: maxread=131072
Jul 29 11:24:04 xuexi kernel: decode_attr_maxwrite: maxwrite=131072
Jul 29 11:24:04 xuexi kernel: decode_attr_time_delta: time_delta=1 0
Jul 29 11:24:04 xuexi kernel: decode_attr_pnfstype: bitmap is 0
Jul 29 11:24:04 xuexi kernel: decode_attr_layout_blksize: bitmap is 0
Jul 29 11:24:04 xuexi kernel: decode_fsinfo: xdr returned 0!
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: set_pnfs_layoutdriver: Using NFSv4 I/O
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_maxlink: maxlink=255
Jul 29 11:24:04 xuexi kernel: decode_attr_maxname: maxname=255
Jul 29 11:24:04 xuexi kernel: decode_pathconf: xdr returned 0!
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: <-- nfs_probe_fsinfo() = 0
Jul 29 11:24:04 xuexi kernel: <-- nfs4_create_server() = ffff88007746a800
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_supported: bitmask=fdffbfff:00f9be3e:00000000
Jul 29 11:24:04 xuexi kernel: decode_attr_fh_expire_type: expire type=0x0
Jul 29 11:24:04 xuexi kernel: decode_attr_link_support: link support=true
Jul 29 11:24:04 xuexi kernel: decode_attr_symlink_support: symlink support=true
Jul 29 11:24:04 xuexi kernel: decode_attr_aclsupport: ACLs supported=3
Jul 29 11:24:04 xuexi kernel: decode_server_caps: xdr returned 0!
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_type: type=040000
Jul 29 11:24:04 xuexi kernel: decode_attr_change: change attribute=4651240235397459983
Jul 29 11:24:04 xuexi kernel: decode_attr_size: file size=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_fsid: fsid=(0x0/0x0)
Jul 29 11:24:04 xuexi kernel: decode_attr_fileid: fileid=2
Jul 29 11:24:04 xuexi kernel: decode_attr_fs_locations: fs_locations done, error = 0
Jul 29 11:24:04 xuexi kernel: decode_attr_mode: file mode=0555
Jul 29 11:24:04 xuexi kernel: decode_attr_nlink: nlink=23
Jul 29 11:24:04 xuexi kernel: decode_attr_owner: uid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_group: gid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_rdev: rdev=(0x0:0x0)
Jul 29 11:24:04 xuexi kernel: decode_attr_space_used: space used=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_time_access: atime=1501990255
Jul 29 11:24:04 xuexi kernel: decode_attr_time_metadata: ctime=1501989952
Jul 29 11:24:04 xuexi kernel: decode_attr_time_modify: mtime=1501989952
Jul 29 11:24:04 xuexi kernel: decode_attr_mounted_on_fileid: fileid=1
Jul 29 11:24:04 xuexi kernel: decode_getfattr_attrs: xdr returned 0
Jul 29 11:24:04 xuexi kernel: decode_getfattr_generic: xdr returned 0
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: NFS: nfs_fhget(0:38/2 fh_crc=0x62d40c52 ct=1)
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_type: type=00
Jul 29 11:24:04 xuexi kernel: decode_attr_change: change attribute=4651240235397459983
Jul 29 11:24:04 xuexi kernel: decode_attr_size: file size=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_fsid: fsid=(0x0/0x0)
Jul 29 11:24:04 xuexi kernel: decode_attr_fileid: fileid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_fs_locations: fs_locations done, error = 0
Jul 29 11:24:04 xuexi kernel: decode_attr_mode: file mode=00
Jul 29 11:24:04 xuexi kernel: decode_attr_nlink: nlink=1
Jul 29 11:24:04 xuexi kernel: decode_attr_owner: uid=-2
Jul 29 11:24:04 xuexi kernel: decode_attr_group: gid=-2
Jul 29 11:24:04 xuexi kernel: decode_attr_rdev: rdev=(0x0:0x0)
Jul 29 11:24:04 xuexi kernel: decode_attr_space_used: space used=0
Jul 29 11:24:04 xuexi kernel: decode_attr_time_access: atime=0
Jul 29 11:24:04 xuexi kernel: decode_attr_time_metadata: ctime=1501989952
Jul 29 11:24:04 xuexi kernel: decode_attr_time_modify: mtime=1501989952
Jul 29 11:24:04 xuexi kernel: decode_attr_mounted_on_fileid: fileid=0
Jul 29 11:24:04 xuexi kernel: decode_getfattr_attrs: xdr returned 0
Jul 29 11:24:04 xuexi kernel: decode_getfattr_generic: xdr returned 0
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: NFS: nfs_update_inode(0:38/2 fh_crc=0x62d40c52 ct=2 info=0x26040)
Jul 29 11:24:04 xuexi kernel: NFS: permission(0:38/2), mask=0x1, res=0
Jul 29 11:24:04 xuexi kernel: NFS: permission(0:38/2), mask=0x81, res=0
Jul 29 11:24:04 xuexi kernel: NFS: lookup(/tmp)
Jul 29 11:24:04 xuexi kernel: NFS call  lookup tmp
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_type: type=040000
Jul 29 11:24:04 xuexi kernel: decode_attr_change: change attribute=16540743250786234113
Jul 29 11:24:04 xuexi kernel: decode_attr_size: file size=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_fsid: fsid=(0xf199fcb4fb064bf5/0xa1b7a15af0f7cb47)
Jul 29 11:24:04 xuexi kernel: decode_attr_fileid: fileid=391681
Jul 29 11:24:04 xuexi kernel: decode_attr_fs_locations: fs_locations done, error = 0
Jul 29 11:24:04 xuexi kernel: decode_attr_mode: file mode=01777
Jul 29 11:24:04 xuexi kernel: decode_attr_nlink: nlink=5
Jul 29 11:24:04 xuexi kernel: decode_attr_owner: uid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_group: gid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_rdev: rdev=(0x0:0x0)
Jul 29 11:24:04 xuexi kernel: decode_attr_space_used: space used=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_time_access: atime=1501990260
Jul 29 11:24:04 xuexi kernel: decode_attr_time_metadata: ctime=1501990117
Jul 29 11:24:04 xuexi kernel: decode_attr_time_modify: mtime=1501990117
Jul 29 11:24:04 xuexi kernel: decode_attr_mounted_on_fileid: fileid=391681
Jul 29 11:24:04 xuexi kernel: decode_getfattr_attrs: xdr returned 0
Jul 29 11:24:04 xuexi kernel: decode_getfattr_generic: xdr returned 0
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: NFS reply lookup: 0
Jul 29 11:24:04 xuexi kernel: NFS: nfs_fhget(0:38/391681 fh_crc=0xb4775a3f ct=1)
Jul 29 11:24:04 xuexi kernel: --> nfs_d_automount()
Jul 29 11:24:04 xuexi kernel: nfs_d_automount: enter
Jul 29 11:24:04 xuexi kernel: NFS call  lookup tmp
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_type: type=040000
Jul 29 11:24:04 xuexi kernel: decode_attr_change: change attribute=16540743250786234113
Jul 29 11:24:04 xuexi kernel: decode_attr_size: file size=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_fsid: fsid=(0xf199fcb4fb064bf5/0xa1b7a15af0f7cb47)
Jul 29 11:24:04 xuexi kernel: decode_attr_fileid: fileid=391681
Jul 29 11:24:04 xuexi kernel: decode_attr_fs_locations: fs_locations done, error = 0
Jul 29 11:24:04 xuexi kernel: decode_attr_mode: file mode=01777
Jul 29 11:24:04 xuexi kernel: decode_attr_nlink: nlink=5
Jul 29 11:24:04 xuexi kernel: decode_attr_owner: uid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_group: gid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_rdev: rdev=(0x0:0x0)
Jul 29 11:24:04 xuexi kernel: decode_attr_space_used: space used=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_time_access: atime=1501990260
Jul 29 11:24:04 xuexi kernel: decode_attr_time_metadata: ctime=1501990117
Jul 29 11:24:04 xuexi kernel: decode_attr_time_modify: mtime=1501990117
Jul 29 11:24:04 xuexi kernel: decode_attr_mounted_on_fileid: fileid=391681
Jul 29 11:24:04 xuexi kernel: decode_getfattr_attrs: xdr returned 0
Jul 29 11:24:04 xuexi kernel: decode_getfattr_generic: xdr returned 0
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: NFS reply lookup: 0
Jul 29 11:24:04 xuexi kernel: --> nfs_do_submount()
Jul 29 11:24:04 xuexi kernel: nfs_do_submount: submounting on /tmp
Jul 29 11:24:04 xuexi kernel: --> nfs_xdev_mount()
Jul 29 11:24:04 xuexi kernel: --> nfs_clone_server(,f199fcb4fb064bf5:a1b7a15af0f7cb47,)
Jul 29 11:24:04 xuexi kernel: --> nfs_probe_fsinfo()
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_supported: bitmask=fdffbfff:00f9be3e:00000000
Jul 29 11:24:04 xuexi kernel: decode_attr_fh_expire_type: expire type=0x0
Jul 29 11:24:04 xuexi kernel: decode_attr_link_support: link support=true
Jul 29 11:24:04 xuexi kernel: decode_attr_symlink_support: symlink support=true
Jul 29 11:24:04 xuexi kernel: decode_attr_aclsupport: ACLs supported=3
Jul 29 11:24:04 xuexi kernel: decode_server_caps: xdr returned 0!
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_lease_time: file size=90
Jul 29 11:24:04 xuexi kernel: decode_attr_maxfilesize: maxfilesize=18446744073709551615
Jul 29 11:24:04 xuexi kernel: decode_attr_maxread: maxread=131072
Jul 29 11:24:04 xuexi kernel: decode_attr_maxwrite: maxwrite=131072
Jul 29 11:24:04 xuexi kernel: decode_attr_time_delta: time_delta=1 0
Jul 29 11:24:04 xuexi kernel: decode_attr_pnfstype: bitmap is 0
Jul 29 11:24:04 xuexi kernel: decode_attr_layout_blksize: bitmap is 0
Jul 29 11:24:04 xuexi kernel: decode_fsinfo: xdr returned 0!
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: set_pnfs_layoutdriver: Using NFSv4 I/O
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_maxlink: maxlink=255
Jul 29 11:24:04 xuexi kernel: decode_attr_maxname: maxname=255
Jul 29 11:24:04 xuexi kernel: decode_pathconf: xdr returned 0!
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: <-- nfs_probe_fsinfo() = 0
Jul 29 11:24:04 xuexi kernel: Cloned FSID: f199fcb4fb064bf5:a1b7a15af0f7cb47
Jul 29 11:24:04 xuexi kernel: <-- nfs_clone_server() = ffff88006f407000
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_supported: bitmask=fdffbfff:00f9be3e:00000000
Jul 29 11:24:04 xuexi kernel: decode_attr_fh_expire_type: expire type=0x0
Jul 29 11:24:04 xuexi kernel: decode_attr_link_support: link support=true
Jul 29 11:24:04 xuexi kernel: decode_attr_symlink_support: symlink support=true
Jul 29 11:24:04 xuexi kernel: decode_attr_aclsupport: ACLs supported=3
Jul 29 11:24:04 xuexi kernel: decode_server_caps: xdr returned 0!
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_type: type=040000
Jul 29 11:24:04 xuexi kernel: decode_attr_change: change attribute=16540743250786234113
Jul 29 11:24:04 xuexi kernel: decode_attr_size: file size=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_fsid: fsid=(0xf199fcb4fb064bf5/0xa1b7a15af0f7cb47)
Jul 29 11:24:04 xuexi kernel: decode_attr_fileid: fileid=391681
Jul 29 11:24:04 xuexi kernel: decode_attr_fs_locations: fs_locations done, error = 0
Jul 29 11:24:04 xuexi kernel: decode_attr_mode: file mode=01777
Jul 29 11:24:04 xuexi kernel: decode_attr_nlink: nlink=5
Jul 29 11:24:04 xuexi kernel: decode_attr_owner: uid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_group: gid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_rdev: rdev=(0x0:0x0)
Jul 29 11:24:04 xuexi kernel: decode_attr_space_used: space used=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_time_access: atime=1501990260
Jul 29 11:24:04 xuexi kernel: decode_attr_time_metadata: ctime=1501990117
Jul 29 11:24:04 xuexi kernel: decode_attr_time_modify: mtime=1501990117
Jul 29 11:24:04 xuexi kernel: decode_attr_mounted_on_fileid: fileid=391681
Jul 29 11:24:04 xuexi kernel: decode_getfattr_attrs: xdr returned 0
Jul 29 11:24:04 xuexi kernel: decode_getfattr_generic: xdr returned 0
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: NFS: nfs_fhget(0:40/391681 fh_crc=0xb4775a3f ct=1)
Jul 29 11:24:04 xuexi kernel: <-- nfs_xdev_mount() = 0
Jul 29 11:24:04 xuexi kernel: nfs_do_submount: done
Jul 29 11:24:04 xuexi kernel: <-- nfs_do_submount() = ffff880064fdfb20
Jul 29 11:24:04 xuexi kernel: nfs_d_automount: done, success
Jul 29 11:24:04 xuexi kernel: <-- nfs_d_automount() = ffff880064fdfb20
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_type: type=00
Jul 29 11:24:04 xuexi kernel: decode_attr_change: change attribute=16540743250786234113
Jul 29 11:24:04 xuexi kernel: decode_attr_size: file size=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_fsid: fsid=(0x0/0x0)
Jul 29 11:24:04 xuexi kernel: decode_attr_fileid: fileid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_fs_locations: fs_locations done, error = 0
Jul 29 11:24:04 xuexi kernel: decode_attr_mode: file mode=00
Jul 29 11:24:04 xuexi kernel: decode_attr_nlink: nlink=1
Jul 29 11:24:04 xuexi kernel: decode_attr_owner: uid=-2
Jul 29 11:24:04 xuexi kernel: decode_attr_group: gid=-2
Jul 29 11:24:04 xuexi kernel: decode_attr_rdev: rdev=(0x0:0x0)
Jul 29 11:24:04 xuexi kernel: decode_attr_space_used: space used=0
Jul 29 11:24:04 xuexi kernel: decode_attr_time_access: atime=0
Jul 29 11:24:04 xuexi kernel: decode_attr_time_metadata: ctime=1501990117
Jul 29 11:24:04 xuexi kernel: decode_attr_time_modify: mtime=1501990117
Jul 29 11:24:04 xuexi kernel: decode_attr_mounted_on_fileid: fileid=0
Jul 29 11:24:04 xuexi kernel: decode_getfattr_attrs: xdr returned 0
Jul 29 11:24:04 xuexi kernel: decode_getfattr_generic: xdr returned 0
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: NFS: nfs_update_inode(0:40/391681 fh_crc=0xb4775a3f ct=2 info=0x26040)
Jul 29 11:24:04 xuexi kernel: NFS: permission(0:40/391681), mask=0x1, res=0
Jul 29 11:24:04 xuexi kernel: NFS: lookup(/testdir)
Jul 29 11:24:04 xuexi kernel: NFS call  lookup testdir
Jul 29 11:24:04 xuexi kernel: --> nfs4_alloc_slot used_slots=0000 highest_used=4294967295 max_slots=1024
Jul 29 11:24:04 xuexi kernel: <-- nfs4_alloc_slot used_slots=0001 highest_used=0 slotid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_type: type=040000
Jul 29 11:24:04 xuexi kernel: decode_attr_change: change attribute=7393570666420598027
Jul 29 11:24:04 xuexi kernel: decode_attr_size: file size=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_fsid: fsid=(0xf199fcb4fb064bf5/0xa1b7a15af0f7cb47)
Jul 29 11:24:04 xuexi kernel: decode_attr_fileid: fileid=391682
Jul 29 11:24:04 xuexi kernel: decode_attr_fs_locations: fs_locations done, error = 0
Jul 29 11:24:04 xuexi kernel: decode_attr_mode: file mode=0754
Jul 29 11:24:04 xuexi kernel: decode_attr_nlink: nlink=3
Jul 29 11:24:04 xuexi kernel: decode_attr_owner: uid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_group: gid=0
Jul 29 11:24:04 xuexi kernel: decode_attr_rdev: rdev=(0x0:0x0)
Jul 29 11:24:04 xuexi kernel: decode_attr_space_used: space used=4096
Jul 29 11:24:04 xuexi kernel: decode_attr_time_access: atime=1501990266
Jul 29 11:24:04 xuexi kernel: decode_attr_time_metadata: ctime=1497209702
Jul 29 11:24:04 xuexi kernel: decode_attr_time_modify: mtime=1496802409
Jul 29 11:24:04 xuexi kernel: decode_attr_mounted_on_fileid: fileid=391682
Jul 29 11:24:04 xuexi kernel: decode_getfattr_attrs: xdr returned 0
Jul 29 11:24:04 xuexi kernel: decode_getfattr_generic: xdr returned 0
Jul 29 11:24:04 xuexi kernel: nfs4_free_slot: slotid 0 highest_used_slotid 4294967295
Jul 29 11:24:04 xuexi kernel: NFS reply lookup: 0
Jul 29 11:24:04 xuexi kernel: NFS: nfs_fhget(0:40/391682 fh_crc=0xec69f317 ct=1)
Jul 29 11:24:04 xuexi kernel: NFS: dentry_delete(/tmp, 202008c)
Jul 29 11:24:04 xuexi kernel: NFS: clear cookie (0xffff88005eaf4620/0x          (null))
Jul 29 11:24:04 xuexi kernel: NFS: clear cookie (0xffff88005eaf4a40/0x          (null))
Jul 29 11:24:04 xuexi kernel: NFS: releasing superblock cookie (0xffff88007746a800/0x          (null))
Jul 29 11:24:04 xuexi kernel: --> nfs_free_server()
Jul 29 11:24:04 xuexi kernel: --> nfs_put_client({2})
Jul 29 11:24:04 xuexi kernel: <-- nfs_free_server()
Jul 29 11:24:04 xuexi kernel: <-- nfs4_try_mount() = 0

1.9 深入NFS的方向

本文仅简介了有的NFS的宗旨接受方法,但NFS自己其实是很复杂的,想深远亦非朝气蓬勃件简单的事。举个例子,以下列出了多少个NFS在实现上必须求消除的标题。

(1).多台顾客端挂载同八个导出的目录后,要同不时候编写制定个中同一个文本时,应该什么管理?那是共享文件更新难题,通用的解决措施是接纳文件锁。

(2).客户端上对文件内容做出修改后是不是要马上联合到服务端上?那是分享文件的多少缓存问题,展示的章程是文本数量是不是要在各客户端上确认保障大器晚成致性。和第多个难点结合起来,正是布满式(集群)文件数量生机勃勃致性难点。

(3).客商端或服务端实行了重启,可能它们现身了故障,亦也许它们之间的互连网现身故障后,它们的对端如何掌握它曾经冒出了故障?那是故障文告或重启布告难题。

(4).现身故障后,平常重启成功了,那么怎么样回复到故障前情状?那是故障恢复难题。

(5).假如服务端故障后一向不恐怕复苏,客商端是否能自动故障转移到另生机勃勃台寻常职业的NFS服务节点?那是高可用难题。(NFS版本4(后文将简写为NFSv4)能够从笔者达成故障转移,当然使用高可用工具如heartbeat也雷同能兑现)

小结起来就多少个拥戴词:锁、缓存、数据和缓存生龙活虎致性、文告和故障苏醒澳门新浦京娱乐场网站设置配备nfs,NFS基本使用。。从这一个首要字中,很当然地会联想到了集群和分布式文件系统,其实NFS也是生机勃勃种轻松的分布式文件系统,但未有像集群或布满式文件系统那样达成差相当少总总林林的锁、缓存大器晚成致性等功效。并且NFSv4为了反映其特点和个性,在一些通用难点上利用了与集群、布满式文件系统不相同的秘诀,如应用了文本委托(服务端将文件委托给客商端,由此完成近似锁的效能)、锁或委托的租约等(如同DHCP的IP租约雷同,在租约期内,锁和嘱托以致缓存是可行的,租约过期后这几个内容都行不通)。

由此知,深入NFS其实便是在深远布满式文件系统,由于互连网对NFS深刻介绍的稿子大概向来不,所以想深远它并不是生龙活虎件简单的事。即便有永不要忘记学习的主见,能够翻阅NFSv4的RFC3530文档的前9章。以下是自己的后生可畏都部队分man文书档案翻译。

 

翻译:man rpcbind(rpcbind中文手册)
翻译:man nfsd(rpc.nfsd中文手册)
翻译:man mountd(rpc.mountd中文手册)
翻译:man statd(rpc.statd中文手册)
翻译:man sm-notify(sm-notify命令中文手册)
翻译:man exportfs(exportfs命令中文手册)

以下是man nfs中有关传输方法和缓存相关内容的翻译。

TRANSPORT METHODS
       NFS客户端是通过RPC向NFS服务端发送请求的。RPC客户端会自动发现远程服务端点,处理每请求(per-request)的
       身份验证,调整当客户端和服务端之间出现不同字节字节序(byte endianness)时的请求参数,并且当请求在网络
       上丢失或被服务端丢弃时重传请求。rpc请求和响应数据包是通过网络传输的。

       在大多数情形下,mount(8)命令、NFS客户端和NFS服务端可以为挂载点自动协商合适的传输方式以及数据传输时
       的大小。但在某些情况下,需要使用mount选项显式指定这些设置。

       对于的传统NFS,NFS客户端只使用UDP传输请求给服务端。尽管实现方式很简单,但基于UDP的NFS有许多限制,在
       一些通用部署环境下,这些限制项会限制平滑运行的能力,还会限制性能。即使是UDP丢包率极小的情况,也将
       导致整个NFS请求丢失;因此,重传的超时时间一般都是亚秒级的,这样可以让客户端从请求丢失中快速恢复,但
       即使如此,这可能会导致无关的网络阻塞以及服务端负载加重。

       但是在专门设置了网络MTU值是相对于NFS的输出传输大小时(例如在网络环境下启用了巨型以太网帧)(注:相对的
       意思,例如它们成比例关系),UDP是非常高效的。在这种环境下,建议修剪rsize和wsize,以便让每个NFS的读或
       写请求都能容纳在几个网络帧(甚至单个帧)中。这会降低由于单个MTU大小的网络帧丢失而导致整个读或写请求丢
       失的概率。

       (译者注:UDP是NFSv2和NFSv3所支持的,NFSv4使用TCP,所以以上两段不用考虑)

       现代NFS都默认采用TCP传输协议。在几乎所有可想到的网络环境下,TCP都表现良好,且提供了非常好的保证,防
       止因为网络不可靠而引起数据损坏。但使用TCP传输协议,基本上都会考虑设置相关防火墙。

       在正常环境下,网络丢包的频率比NFS服务丢包的频率要高的多。因此,没有必要为基于TCP的NFS设置极短的重传
       超时时间。一般基于TCP的NFS的超时时间设置在1分钟和10分钟之间。当客户端耗尽了重传次数(选项retrans的值),
       它将假定发生了网络分裂,并尝试以新的套接字重新连接服务端。由于TCP自身使得网络传输的数据是可靠的,所
       以,可以安全地使用处在默认值和客户端服务端同时支持的最大值之间的rszie和wsize,而不再依赖于网络MTU大小。

DATA AND METADATA COHERENCE
       现在有些集群文件系统为客户端之间提供了非常完美的缓存一致性功能,但对于NFS客户端来说,实现完美的缓
       存一致性是非常昂贵的,特别是大型局域网络环境。因此,NFS提供了稍微薄弱一点的缓存一致性功能,以满足
       大多数文件共享需求。

   Close-to-open cache consistency
       一般情况下,文件共享是完全序列化的。首先客户端A打开一个文件,写入一些数据,然后关闭文件然后客户端B
       打开同一个文件,并读取到这些修改后的数据。

       当应用程序打开一个存储在NFSv3服务端上的文件时,NFS客户端检查文件在服务端上是否存在,并通过是否发送
       GETATTR或ACCESS请求判断文件是否允许被打开。NFS客户端发送这些请求时,不会考虑已缓存文件属性是否是新
       鲜有效的。

       当应用程序关闭文件,NFS客户端立即将已做的修改写入到文件中,以便下一个打开者可以看到所做的改变。这
       也给了NFS客户端一个机会,使得它可以通过文件关闭时的返回状态码向应用程序报告错误。

       在打开文件时以及关闭文件刷入数据时的检查行为被称为close-to-open缓存一致性,或简称为CTO。可以通过使
       用nocto选项来禁用整个挂载点的CTO。

       (译者注:NFS关闭文件时,客户端会将所做的修改刷入到文件中,然后发送GETATTR请求以确保该文件的属性缓存
       已被更新。之后其他的打开者打开文件时会发送GETATTR请求,根据文件的属性缓存可以判断文件是否被打开并做
       了修改。这可以避免缓存无效)

   Weak cache consistency
       客户端的数据缓存仍有几乎包含过期数据。NFSv3协议引入了"weak cache consistency"(WCC),它提供了一种在单
       个文件被请求之前和之后有效地检查文件属性的方式。这有助于客户端识别出由其他客户端对此文件做出的改变。

       当某客户端使用了并发操作,使得同一文件在同一时间做出了多次更新(例如,后台异步写入),它仍将难以判断
       是该客户端的更新操作修改了此文件还是其他客户端的更新操作修改了文件。

   Attribute caching
       使用noac挂载选项可以让多客户端之间实现属性缓存一致性。几乎每个文件系统的操作都会检查文件的属性信息。
       客户端自身会保留属性缓存一段时间以减少网络和服务端的负载。当noac生效时,客户端的文件属性缓存就会被
       禁用,因此每个会检查文件属性的操作都被强制返回到服务端上来操作文件,这表示客户端以牺牲网络资源为代
       价来快速查看文件发生的变化。

       不要混淆noac选项和"no data caching"。noac挂载选项阻止客户端缓存文件的元数据,但仍然可能会缓存非元数
       据的其他数据。

       NFS协议设计的目的不是为了支持真正完美的集群文件系统缓存一致性。如果要达到客户端之间缓存数据的绝对
       一致,那么应该使用文件锁的方式。

   File timestamp maintainence
       NFS服务端负责管理文件和目录的时间戳(atime,ctime,mtime)。当服务端文件被访问或被更新,文件的时间戳也会
       像本地文件系统那样改变。

       NFS客户端缓存的文件属性中包括了时间戳属性。当NFS客户端检索NFS服务端文件属性时,客户端文件的时间戳会
       更新。因此,在NFS服务端的时间戳更新后显示在NFS客户端之前可能会有一些延迟。

       为了遵守POSIX文件系统标准,Linux NFS客户端需要依赖于NFS服务端来保持文件的mtime和ctime时间戳最新状态。
       实现方式是先让客户端将改变的数据刷入到服务端,然后再输出文件的mtime。

       然而,Linux客户端可以很轻松地处理atime的更新。NFS客户端可以通过缓存数据来保持良好的性能,但这意味着
       客户端应用程序读取文件(会更新atime)时,不会反映到服务端,但实际上服务端的atime已经修改了。

       由于文件属性缓存行为,Linux NFS客户端mount时不支持一般的atime相关的挂载选项。

       特别是mount时指定了atime/noatime,diratime/nodiratime,relatime/norelatime以及strictatime/nostrictatime
       挂载选项,实际上它们没有任何效果。

   Directory entry caching
       Linux NFS客户端缓存所有NFS LOOKUP请求的结果。如果所请求目录项在服务端上存在,则查询的结果称为正查询
       结果。如果请求的目录在服务端上不存在(服务端将返回ENOENT),则查询的结果称为负查询结果。

       为了探测目录项是否添加到NFS服务端或从其上移除了,Linux NFS客户端会监控目录的mtime。如果客户端监测到
       目录的mtime发生了改变,客户端将丢弃该目录相关的所有LOOKUP缓存结果。由于目录的mtime是一种缓存属性,因
       此服务端目录mtime发生改变后,客户端可能需要等一段时间才能监测到它的改变。

       缓存目录提高了不与其他客户端上的应用程序共享文件的应用程序的性能。但使用目录缓存可能会干扰在多个客户
       端上同时运行的应用程序,并且需要快速检测文件的创建或删除。lookupcache挂载选项允许对目录缓存行为进行一
       些调整。

       如果客户端禁用目录缓存,则每次LOOKUP操作都需要与服务端进行验证,那么该客户端可以立即探测到其他客户端
       创建或删除的目录。可以使用lookupcache=none来禁用目录缓存。如果禁用了目录缓存,由于需要额外的NFS请求,
       这会损失一些性能,但禁用目录缓存比使用noac损失的性能要少,且对NFS客户端缓存文件属性没有任何影响。

   The sync mount option
       NFS客户端对待sync挂载选项的方式和挂载其他文件系统不同。如果即不指定sync也不指定async,则默认为async。
       async表示异步写入,除了发生下面几种特殊情况,NFS客户端会延迟发送写操作到服务端:

              ● 内存压力迫使回收系统内存资源。
              ● 客户端应用程序显式使用了sync类的系统调用,如sync(2),msync(2)或fsync(3)。
              ● 关闭文件时。
              ● 文件被锁/解锁。

       换句话说,在正常环境下,应用程序写的数据不会立即保存到服务端。(当然,关闭文件时是立即同步的)

       如果在挂载点上指定sync选项,任何将数据写入挂载点上文件的系统调用都会先把数据刷到服务端上,然后系统调
       用才把控制权返回给用户空间。这提供了客户端之间更好的数据缓存一致性,但消耗了大量性能。

       在未使用sync挂载选项时,应用程序可以使用O_SYNC修饰符强制立即把单个文件的数据刷入到服务端。

   Using file locks with NFS
       网络锁管理器(Network Lock Manager,NLM)协议是一个独立的协议,用于管理NFSv2和NFSv3的文件锁。为了让客户端
       或服务端在重启后能恢复锁,需要使用另一个网络状态管理器(Network Status Manager,NSM)协议。在NFSv4中,NFS
       直协议自身接支持文件锁相关功能,所以NLM和NSM就不再使用了。

       在大多数情况下,NLM和NSM服务是自动启动的,并且不需要额外的任何配置。但需要配置NFS客户端使用的是fqdn名
       称,以保证NFS服务端可以找到客户端并通知它们服务端的重启动作。

       NLS仅支持advisory文件锁。要锁定NFS文件,可以使用待F_GETLK和F_SETLK的fcntl(2)命令。NFS客户端会转换通过
       flock(2)获取到的锁为advisory文件锁。

       当服务端不支持NLM协议,或者当NFS服务端是通过防火墙但阻塞了NLM服务端口时,则需要指定nolock挂载选项。
       当客户端挂载导出的/var目录时,必须使用nolock禁用NLM锁,因为/var目录中包含了NLM锁相关的信息。
       (注,因为NLM仅在nfsv2和nfsv3中支持,所以NFSv4不支持nolock选项)

       当仅有一个客户端时,使用nolock选项可以提高一定的性能。

   NFS version 4 caching features
       NFSv4上的数据和元数据缓存行为和之前的版本相似。但是NFSv4添加了两种特性来提升缓存行为:change attributes
       以及delegation。(注:nfsv4中取消了weak cache consistency)

       change attribute是一种新的被跟踪的文件/目录元数据信息。它替代了使用文件mtime和ctime作为客户端验证缓存内
       容的方式。但注意,change attributes和客户端/服务端文件的时间戳的改变无关。

       文件委托(file delegation)是NFSv4的客户端和NFSv4服务端之前的一种合约,它允许客户端临时处理文件,就像没有
       其他客户端正在访问该文件一样。当有其他客户端尝试访问被委托文件时,服务端一定会通知服务端(通过callback请
       求)。一旦文件被委托给某客户端,客户端可以尽可能大地缓存该文件的数据和元数据,而不需要联系服务端。

       文件委托有两种方式:read和write。读委托意味着当其他客户端尝试向委托文件写入数据时,服务端通知客户端。而
       写委托意味着其他客户端无论是尝试读还是写,服务端都会通知客户端。

       NFSv4上当文件被打开的时候,服务端会授权文件委托,并且当其他客户端想要访问该文件但和已授权的委托冲突时,
       服务端可以在任意时间点重调(recall)委托关系。不支持对目录的委托。
       (译者注:只有读委托和读委托不会冲突)

       为了支持委托回调(delegation callback),在客户端初始联系服务端时,服务端会检查网络并返回路径给客户端。如果
       和客户端的联系无法建立,服务端将不会授权任何委托给客户端。

 

再次来到体系小说大纲:http://www.cnblogs.com/f-ck-need-u/p/7048359.html

转发请注明出处:http://www.cnblogs.com/f-ck-need-u/p/7305755.html

注:若你认为那篇作品还行请点击下右下角的推荐介绍,有了您的扶持工夫激发笔者更加大的行文热情,非常感谢!

本文由澳门新浦京娱乐场网站发布于澳门新浦京娱乐场网站,转载请注明出处:澳门新浦京娱乐场网站设置配备nfs,NFS基本使用