情况是nfs4服务器和客户端使用rpc.idmapd映射ids。 id映射在客户机上处理从服务器提供的现有文件。
在服务器上:
[root@server ~]# id user1 uid=500(user1) gid=502(user1) groups=502(user1) [root@server ~]# ls -l /mnt/san/temp total 0 -rw-r--r-- 1 user1 user1 0 Aug 27 11:46 test1 [root@server ~]# ls -ln /mnt/san/temp total 0 -rw-r--r-- 1 500 502 0 Aug 27 11:46 test1
在客户端:
[user1@client ~]$ id user1 uid=504(user1) gid=506(user1) groups=506(user1) [user1@client ~]$ ls -l /mnt/san/temp total 0 -rw-r--r-- 1 user1 user1 0 Aug 27 11:46 test1 [user1@client ~]$ ls -ln /mnt/san/temp total 0 -rw-r--r-- 1 504 506 0 Aug 27 11:46 test1
所以没关系
但是从客户端创build一个文件:
[user1@client ~]$ touch /mnt/san/temp/test2 [user1@client ~]$ ls -l /mnt/san/temp total 0 -rw-r--r-- 1 user1 user1 0 Aug 27 11:46 test1 -rw-rw-r-- 1 user2 user2 0 Aug 27 11:49 test2 [user1@client ~]$ ls -ln /mnt/san/temp total 0 -rw-r--r-- 1 504 506 0 Aug 27 11:46 test1 -rw-rw-r-- 1 505 507 0 Aug 27 11:49 test2
在这一点上,似乎没有在客户端执行id-> name映射。
这两个系统都是CentOS 5.x. 顺便说一句,文件/proc/net/rpc/nfs4.nametoid/content和/proc/net/rpc/nfs4.idtoname/content在客户端是空的,但在服务器上有条目。
我打开了客户端上的rpc.idmapd日志logging,并且/ var / log / messages显示它正在用于名称到id映射,例如:8月27日11:49:27 fw01 rpc.idmapd [11773]:客户端23 :(用户)名称“user2 @ localdomain” – > id“505”我期待相应的id->名称查找发生在一个文件创build客户端。
同步ID和使用nfsv3的简单解决scheme不是一个真正的select(如在不简单!)。
编辑:
对困惑感到抱歉:
[user1@client ~]$ getent passwd 504 505 user1:x:504:506::... user2:x:505:507::... [user1@client ~]$ getent group 506 507 user1:x:506: user2:x:507: [root@server ~]# getent passwd 504 505 user2:x:504:506::... [root@server ~]# getent group 506 507 user2:x:506:
即似乎正在发生的事情是在客户端上创build文件,因为user1(uid 504 / gid 506)在服务器上创build之前不会被转换。 它在服务器上创build为504/506。 这在服务器上是user2 / user2,所以它在那之后返回给客户端。
我也有同样的问题,花了一些时间研究答案。 看起来似乎rpc.idmapd不支持ID到名称映射,可以让您更改文件系统。 不过,我已经看到,如果你使用Kerberos身份validation( http://permalink.gmane.org/gmane.linux.nfsv4/11363 )进行装载,这可能会起作用。 我还没有尝试过,因为Kerberos似乎有点痛苦。 在这一点上,我将简单地同步UID。