我有一台 Ubuntu 12.04 服务器,它通过 NFS 导出几个文件系统。
server$ cat /etc/exports
/home 192.168.42.0/255.255.255.0(rw,anonuid=65534,anongid=65534,async,no_subtree_check)
/stuff 192.168.42.0/255.255.255.0(rw,anonuid=65534,anongid=65534,async,no_subtree_check)
/stuff 192.168.99.0/255.255.255.0(ro,anonuid=65534,anongid=65534,async,no_subtree_check)
我还有一个安装它们的客户端:
client$ cat /etc/fstab
...
server:/home /home nfs hard,intr,rsize=8192,wsize=8192,_netdev 0 0
server:/stuff /server/stuff nfs hard,intr,rsize=8192,wsize=8192,_netdev 0 0
客户端的 IP 在 192.168.42.x 范围内。直到昨天它还在运行 Ubuntu 10.04。NFS 或多或少运行良好(有时它不会在启动时自动挂载,但我有一个 cron 脚本来检测并修复它)。
我昨天将客户端升级到 Ubuntu 12.04 并重新启动。NFS 继续正常工作。
我今天将客户端升级到 Ubuntu 14.04 并重新启动。现在 NFS 已挂载,但所有文件所有权信息都映射到 nobody:4294967294:
client$ ls -ld /home/weblate
drwxr-xr-x 5 nobody 4294967294 4096 Jan 29 2014 weblate
这是为什么?我需要做什么才能使文件所有权再次发挥作用?
答案1
重要线索出现在/var/log/syslog
:
Sep 16 13:11:07 client nfsidmap[7340]: nss_getpwnam: name 'www-data@lan' does not map into domain 'localdomain'
结合这段摘录NFSv4操作方法
如果所有目录列表都只显示“nobody”和“nogroup”,而不是真实的用户名和组名,那么您可能需要检查 /etc/idmapd.conf 中的域参数设置。NFSv4 客户端和服务器应该位于同一个域中。
以及以下评论/etc/idmap.conf
:
# set your own domain here, if id differs from FQDN minus hostname
# Domain = localdomain
事实证明我的服务器认为它的域名是lan
:
server$ hostname -f
server.lan
server$ grep server /etc/hosts
127.0.1.1 server.lan server
而我的客户没有域名:
client$ hostname -f
client
client$ grep client /etc/hosts
127.0.1.1 client
修复:/etc/hosts
在客户端编辑以阅读
127.0.1.1 client.lan client
然后重新启动。
答案2
我通过这个方法解决了我的问题。打开文件/etc/nfsmount.conf
并找到Nfsvers=
。
取消注释该行并写入服务器支持的 NFS 版本。我的是 3,所以我写道:
Nfsvers=3
我重新启动了 NFS 服务器。