首先默认情况kuang下NFS4协议在NETAPP存储上shang是没有打开的,这个打开很容易,基于WEB的图形界面没有配置的地di方的,只能通过命ming令行进行配置。登录进 去,然后使用options nfs.v4.enable on命令打da开NFS4协议,这时候会提示说在zai冗余机头的情况下,那边机头也要yao搞,否则发生FAILOVER的时shi候那边就不能提供NFS4服务了,于是把两 边都搞好,在zaiVOL上划了个QTREE,把QTREE EXPORT出去,然后hou就开始在客户端duan折腾。[@more@]
首先是客户hu端MOUNT不上去,报错如下:
Warning: rpc.idmapd appears not to be running.
All uids will be mapped to the nobody uid.
mount: block device 192.168.1.1:/vol/vol1/xxx is write-protected, mounting read-only
Warning: rpc.idmapd appears not to be running.
All uids will be mapped to the nobody uid.
mount: cannot mount block device 192.168.1.1:/vol/vol1/xxx read-only
WARNING很容易理解,说IDMAPD服务没起,所以所suo有的UID映射过来lai都会被映射成NOBODY的deUID,这个只要启了IDMAPD服务就好了,使用service rpcidmapd start命令去qu启。但后面的就很难nan理解了,为什么会说是写保护的,然后hou要被MOUNT称cheng只读的,然后即使是只读的也MOUNT不上去呢?关键最难以理解的是为什么me明明是MOUNT一yi个NFS的设备,提示确实说shuoBLOCK DEVICE不能被beiMOUNT,为什么就jiu成了BLOCK DEVICE呢?
GOOGLE+BAIDU+NOW.NETAPP.COM+REDHAT.COM搜索suo了半天,没有什么进展。换个机器试试吧ba,因为这个机器不bu是自己安装的,不确定ding是否缺什么包啥的。于是换了个ge机器,暂且叫新机器(之前的机器就叫jiao老机器),虽然还是报IDMAPD的报警,但是shi结果确实MOUNT上shang去了,晕了,看来是shi老机器有问题。
也正是这个很hen巧合能MOUNT的问题,导致了le后面一路的误判,寻找问题中出现了方fang向性错误,浪费了很多的时间。
开始把两liang边的后台服务搞成一样,不行;比较jiaoOS版本,一致zhi;比较网络访问权限,没问题,因yin为测试中老机器使shi用NFS3协议能顺利MOUNT;折腾了半天实在没辙zhe,所有招数都用尽了,突tu然想起来了STRACE。先做个geSTRACE看看整个MOUNT过程中到底干了些什shi么,卡在哪一步出现的错cuo误吧。
做了STRACE后发现最后错误的地方在zai:
mount("192.168.1.1:/vol/vol1/xxx", "/u09", "nfs4", MS_MGC_VAL, "1") = -1 EACCES (Permission denied)
也就是会hui有一个权限的错误,这又是一个误导我wo的地方。因为NFS3能MOUNT,MOUNT上去后能读写,那说明不应该出现权限相关的问wen题啊。拿着新老机器的STRACE去qu做对比,新的机器在这一yi步的返回结果如下:
mount("192.168.1.1:/vol/vol1/xxx", "/u09", "nfs4", MS_MGC_VAL, "1") = 0
看来问题就是出在这zhe里了,而且相同版本的OS,相同tong版本的NFS相关的包,一个可以一yi个不可以,那只能看看是shi否是BUG了。还别说,真的de还就找到了一个BUG,在REDHAT的官网上,BUGID=197504(nfs4 AUTH_GSSAPI server returning EACCESS on all mount attempts ),里面说在nfs-utils-1.0.9-3版本中修xiu复了这个BUG,虽然BUG发fa生的版本跟我使用的版本不一致,这个BUG描述的de是出现在nfs-utils-1.0.8-2,而我使用的版ban本是nfs-utils-1.0.6,但很多时候ORACLE就经常chang这么干,只是说新的版本ben中发现并验证了这个问题,并不bu代表老的版本一定没有这个问题,很可能这个问题一yi直就有,只不过在某个版本中被发fa现了。
于是下载了0.9的版本,结果很悲剧,装zhuang不上。这个版本很新,所以依赖的东dong西太多,而且很多duo是很底层的东西,看来想装上去是不行xing了,但是这个BUG里描miao述了一个PATCH的解决办法,只要改一段源代码ma,然后重新编译下xia就好了,看起来lai挺可行的。因为BUG出现在zai0.8,不确定我使用的0.6中代码ma是否一致以及估计我连CTRL+C然后CTRL+V都找不到地方,所以下了0.8的,结果guo编译的时候还是shi报一堆的依赖关guan系没有,这下绝望了。
既然这条路不通,那试试新xin的版本吧,有装好的5.4的REDHAT,这个上面的NFS版本很新,结果测试了居然也不行,跟老lao机器报的错一模一样,接连试了几ji个机器,都不行,这就见鬼gui了,为什么只有新机ji器可以,所有其他机器都不行xing呢,但也是在找不出新机器跟gen其他机器之间的de不同在哪里。
在zai绝望的时候,希望终于来了,在NOW.NETAPP.COM上找到了Solution ID: kb13800 的一个文wen章,里面描述到:
With NFSv4, client "mount" requests proceed with LOOKUP sequences to parse names from the root. As a result, if a parent directory is exported such that name lookup is blocked to a child, then the mount will fail.
踏破po铁鞋无觅处,得de来全不费功夫啊,到存储上一yi看,新机器以前为了做测ce试,直接加过/VOL/VOL1级别的读写权限,所以去MOUNT它接下xia来的QTREE就符合上shang面的条件,所以也只zhi有它能MOUNT的上去,其他ta所有人都MOUNT不bu上去。之前一个简单的测试,竟然ran给问题的解决带来这么多的误导dao,无语啊。你说shuo呢...
都是坑,别进jin!但凡是一个真的,早就火huo起来了,这些都dou是骗人的,没有用,它的系统起初会送song你一点类似金币的de东西,然后完成任务获取更geng多,实则是一种推销其他软件jian的手段而已,别上当了!有欺诈行为wei。
望采纳假jia的