我的错误是:
mount.nfs4: access denied by server while mounting fileserver:/export/path/one
我的问题是:
详细的日志信息在服务器上的哪里(在systemd下)?
更多信息:
我问了一个类似的问题从 AskUbuntu 上的 Ubuntu 客户端角度来看。我这个问题的重点是 Arch Linux 服务器。特别是,我正在服务器上查找日志以帮助我理解问题。
这是背景:
我们的小型 LAN 正在运行 Arch Linux NFS v4 文件服务器。我们有几个运行 Ubuntu 15.10 和 16.04 的客户端。我们有一个运行 Ubuntu 14.04 的客户端。 14.04客户端将无法连接到文件服务器。其他都连接正常。所有客户端上的设置均相同。所有客户端都列在服务器上的 /etc/exports 中。
我需要在Arch linux服务器上找到更详细的错误信息。但是,journalctl 不显示与 nfs 相关的任何内容,也不包含与 nfs 访问被拒绝错误相关的任何条目。
14.04 客户端可以 ping 文件服务器并通过 SSH 登录。用户名/ID 以及组匹配。 (我在客户端和服务器上使用相同的用户帐户/uid。它是 uid 1000。)
更多信息:
$ sudo mount -a (on client)
mount.nfs4: access denied by server while mounting fileserver:/export/path/one
mount.nfs4: access denied by server while mounting fileserver:/export/path/two
客户端可以 ping 文件服务器(反之亦然):
$ ping fileserver
PING fileserver (192.168.1.1) 56(84) bytes of data.
64 bytes from fileserver (192.168.1.1): icmp_seq=1 ttl=64 time=0.310 ms
客户端成功登录基于 LAN 的文件服务器:
$ ssh fileserver
Last login: Tue Aug 16 14:38:26 2016 from 192.168.1.2
[me@fileserver ~]$
文件服务器的挂载导出并rpcinfo
暴露给客户端:
$ showmount -e fileserver # on client
Export list for fileserver:
/export/path/one/ 192.168.1.2
/export/path/two/ 192.168.1.2,192.168.1.3
$ rpcinfo -p fileserver (on client)
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 58344 status
100024 1 tcp 58561 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 4 tcp 2049 nfs
100003 4 udp 2049 nfs
这是直接挂载export时的错误:
$ sudo mount -vvv -t nfs4 fileserver:/export/path/one /path/one/
mount: fstab path: "/etc/fstab"
mount: mtab path: "/etc/mtab"
mount: lock path: "/etc/mtab~"
mount: temp path: "/etc/mtab.tmp"
mount: UID: 0
mount: eUID: 0
mount: spec: "fileserver:/export/path/one"
mount: node: "/path/one/"
mount: types: "nfs4"
mount: opts: "(null)"
mount: external mount: argv[0] = "/sbin/mount.nfs4"
mount: external mount: argv[1] = "fileserver:/export/path/one"
mount: external mount: argv[2] = "/path/one/"
mount: external mount: argv[3] = "-v"
mount: external mount: argv[4] = "-o"
mount: external mount: argv[5] = "rw"
mount.nfs4: timeout set for Tue Aug 16 16:10:43 2016
mount.nfs4: trying text-based options 'addr=192.168.1.1,clientaddr=192.168.1.2'
mount.nfs4: mount(2): Permission denied
mount.nfs4: access denied by server while mounting fileserver:/export/path/one
答案1
看起来根本问题已由 @pgoetz 解决,但为了后代,我将解决有关如何捕获 NFS 日志的原始问题(我遇到了类似的问题,但也找不到有关日志记录的答案!)。
NFS 服务器及其客户端的详细日志记录可以使用 获得rpcdebug
,这将生成内核日志(因此它们将显示在,例如/var/log/messages
,/var/log/syslog
等中,具体取决于您的发行版)。
一般形式是rpcdebug -m [module] -s [flags]
:
-m [module]
:这指定要记录的模块。这可以是nfs
,nfsd
,rpc
, 或nlm
-- 对于服务器上的一般 NFS 日志,请使用nfsd
;对于客户端上的常规 NFS 日志,请使用nfs
-s [flags]
:这会设置您希望内核记录的调试标志。可用的标志取决于模块
(请参阅man rpcdebug
获取更多信息)
因此,开始记录所有标志的示例命令可以是:
- NFS 服务器:
rpcdebug -m nfsd -s all
- NFS 客户端:
rpcdebug -m nfs -s all
注意:这将是非常冗长。可以调整标志以获得正确的日志记录级别,但从all
标志开始可以帮助缩小问题范围。
对于较少的日志条目,请清除该all
标志,然后设置要跟踪的特定标志,例如:
$ rpcdebug -m nfsd -c all # clear all flags to stop logging them
$ rpcdebug -m nfsd -s auth proc # set the auth and proc flags instead of logging all flags
答案2
我在客户端和服务器 Arch linux 上都遇到了完全相同的问题。解决方案是使用主机名/etc/exports
而不是 IP 地址。我改变了这个:
/srv/nfs 192.168.10(rw,fsid=root,no_subtree_check)
/srv/nfs/media 192.168.10(rw,no_subtree_check)
/srv/nfs/share 192.168.10(rw,no_subtree_check)
对此:
/srv/nfs iguana(rw,fsid=root,no_subtree_check)
/srv/nfs/media iguana(rw,no_subtree_check)
/srv/nfs/share iguana(rw,no_subtree_check)
这导致了一个稍微不同的问题:
[root@iguana data]# mount -t nfs4 frog:/srv/nfs/media /data/media
mount.nfs4: Protocol not supported
我对 NFS4 没有太多经验;显然您不应该在 mount 命令中包含 NFS 根路径。这最终起作用并安装了卷:
[root@iguana data]# mount -t nfs4 frog:/media /data/media