mount.nfs:在Ubuntu机器上挂载时服务器拒绝访问?


64

我有三台机器正在生产-

machineA    10.66.136.129
machineB    10.66.138.181
machineC    10.66.138.183

所有这些机器都安装了Ubuntu 12.04,并且我具有对这三台机器的root访问权。

现在我应该在上面的机器中做下面的事情-

Create mount point /opt/exhibitor/conf
Mount the directory in all servers.
 sudo mount <NFS-SERVER>:/opt/exhibitor/conf /opt/exhibitor/conf/

/opt/exhibitor/conf如上所述,我已经在所有这三台计算机上创建了目录。

现在,我试图创建一个挂载点。所以我遵循以下过程-

在以上三台机器上安装NFS支持文件和NFS内核服务器

$ sudo apt-get install nfs-common nfs-kernel-server

在以上三台机器上创建共享目录

$ mkdir /opt/exhibitor/conf/

编辑了,/etc/exports并在上述所有三台机器中添加了这样的条目-

# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#
/opt/exhibitor/conf/     10.66.136.129(rw)
/opt/exhibitor/conf/     10.66.138.181(rw)
/opt/exhibitor/conf/     10.66.138.183(rw)

我尝试从机器B和机器C如下安装在机器A上,这给了我这个错误-

root@machineB:/# sudo mount -t nfs 10.66.136.129:/opt/exhibitor/conf /opt/exhibitor/conf/
mount.nfs: access denied by server while mounting 10.66.136.129:/opt/exhibitor/conf

root@machineC:/# sudo mount -t nfs 10.66.136.129:/opt/exhibitor/conf /opt/exhibitor/conf/
mount.nfs: access denied by server while mounting 10.66.136.129:/opt/exhibitor/conf

我的/etc/exports文件看起来好吗?我很确定,我已经弄乱了exports文件。因为我在导出文件中的所有三台机器中都有相同的内容。

知道我在这里做什么错吗?正确的/exports文件在哪里?


1
仅供参考,请仔细检查主机/客户端上的权限。如果NFS主机具有权限07500700则尝试挂载的客户端很可能会失败,并显示相同的错误消息。我将主机从更改07500755,然后错误消失了,一切都很好。
Trevor Boyd Smith,

Answers:


69

exportfs

/etc/exports服务器上创建文件时,需要确保将其导出。通常,您将需要运行以下命令:

$ exportfs -a

这将导出导出文件中的所有条目。

显示山

我经常要做的另一件事是在其他计算机上,使用showmount命令检查将NFS共享导出到网络的任何计算机。

$ showmount -e <NFS server name>

举例来说,我已经登录了。

$ showmount -e mulder
Export list for mulder:
/export/raid1/isos     192.168.1.0/24
/export/raid1/proj     192.168.1.0/24
/export/raid1/data     192.168.1.0/24
/export/raid1/home     192.168.1.0/24
/export/raid1/packages 192.168.1.0/24

fstab

要在启动时挂载这些文件,您可以将此行添加到要使用NFS挂载的客户端计算机上。

server:/shared/dir /opt/mounted/dir nfs rsize=8192,wsize=8192,timeo=14,intr

自动挂载

如果您要重新启动这些服务器,那么我强烈建议您考虑设置自动挂载(autofs)而不是将这些条目添加到中/etc/fstab。这需要更多的工作,但是值得付出努力。

这样一来,您可以更独立地重新引导服务器,并且仅在实际需要和/或使用NFS挂载时创建NFS挂载。当它空闲时,它将被卸载。

参考文献


感谢您的建议。我就是这样做的,现在可以正常工作了。exportfs -a我没有跑步,而是跑了exportfs -rv。两者之间有什么区别吗?就我而言,showmount -e 10.66.136.129我将在machineB和machineC中进行操作。对?
阿森纳

1
@TechGeeky-并非如此。exportfs -rv只是重新导出+是冗长的。在-a将出口一切。至于showmount -e是的,您可以从那些机器或服务共享的机器上运行它。
slm

好的..谢谢,现在有意义。.最后一件事。我相信这个挂载点还有另外一件事,fstab文件..对吗?现在我应该修改哪个机器的fstab文件?我应该在其中添加什么内容?任何想法?
阿森纳

@TechGeeky查看更新。您将条目添加到要使用NFS共享的客户端。
slm

1
在Ubuntu上,必须首先安装nfs-kernel-server才能使exportfs可用。资料来源:manpages.ubuntu.com/manpages/trusty/man8/exportfs.8.html
flickerfly 2015年

40

我看到了相同的错误(mount.nfs: access denied by server while mounting...),问题已通过-o v3选项解决,如下所示:

$ sudo mount -o v3 a-nfs-server:/path/to/export /path/to/mount
  • 服务器是Ubuntu 14.04 64位LTS。
  • 客户端是CentOS 6.5 64位。

2
其余的都无济于事,就我而言,这就是解决方案。
Urhixidur

1
我尝试了一个mount.nfs: Connection timed out。(客户端是64位的Ubuntu 14.04 LTS。服务器是带有QTS 4.0.2的QNAP NFS,2016
Steve

是的,当我将服务器升级到Ubuntu 16时,这就是问题所在和解决方案。
Sridhar Sarnobat '16

2
请注意这一点。NFSv3古老且过时;确实不应该再使用它了(写这篇文章时甚至是这样)。
迈克尔·汉普顿

7

就我而言,使用nfs4可以做到:

$ sudo mount -t nfs4服务器名称:/ / path / to / mount

/etc/export服务器上的文件中

/Path/to/export 192.168.1.0/24(rw,sync,fsid=0,no_root_squash,crossmnt,no_subtree_check,no_acl)

fsid=0使/Path/to/export根目录,当您安装份额。

crossmnt,因为导出的文件系统中还有其他一些我也要访问的驱动器。

no_root_squash,因为我想从客户端以root用户(su)的身份访问。我很确定自己是在本地网络中唯一可以做到这一点的人。

服务器和客户端是Ubuntu 14.04 64位。

如果您想使用nfs3,则@ fumisky-wells的答案也对我有用。


您为自己赢得了尊敬的先生。我有一个NAS,因此无法修改/ etc / export文件,但是指定完整路径可以解决问题。做得好。
MDMoore313 2014年

4

我收到了相同的错误消息,结果却是由于客户端计算机将两个网络接口连接到同一LAN而导致的。已将服务器配置为期望使用特定的IP地址,并且流量在具有dhcp IP地址的第二个接口上流出。因此,我仅将第二个接口配置为具有静态IP地址,并将第二个静态IP地址添加到服务器配置中。


伙计,我希望这更多地指向顶部,这正是我的情况
Brian Leishman

3

/etc/exports就像您声明的那样,需要在NFS 服务器计算机而不是客户端上进行编辑,因为当客户端请求访问共享时,NFS服务器会对其进行检查。

如果将以下内容/etc/exports放在NFS服务器上,它将可以正常工作:

/opt/exhibitor/conf 10.66.136.129(rw)
/opt/exhibitor/conf 10.66.138.181(rw)
/opt/exhibitor/conf 10.66.138.183(rw)

我在machineA的导出文件中已经有此文件。然后我从machineB和machineC挂载了它,但它不起作用。.是否有可能在导出文件中的所有三台机器中都添加了相同的信息,这会有问题吗?我应该只在machineA中添加?
阿森纳

1
@TechGeeky执行此操作后是否重新加载了NFS导出exportfs -a
克里斯·

我就是这样做的,现在可以正常工作了。我试图以一种更好的方式理解这件事,所以我的第一个问题是,machineA是NFS服务器,而machineB和machineC是客户端。第二个问题是,如果machineA是我的NFS服务器,那么仅在machineA的/ etc / exports文件中,我将按照您在解决方案中提到的方式添加上述三行,而我们不会碰到machineB和machineC的导出文件吗?正确?
阿森纳

@TechGeeky只要您在计算机A上安装共享,在两种情况下都是正确的。
克里斯·

谢谢。现在,我对此有了更好的了解。为什么我问这个问题,因为我在暂存环境中也有类似的东西。我在暂存环境中的那三台计算机上所做的工作,是在三台计算机的所有/ etc / exports文件中添加了相同的三行,而不是仅在machineA中添加它,但仍然可以正常工作。现在,我已经更清楚地了解了整个概念。谢谢您的帮助。
阿森纳

2

如果nfs-client试图在Linux容器中安装导出的共享,则容器应以特权模式运行。

如果是码头工人;

$ docker run -it --rm --privileged ubuntu:14.04


2

对我来说,问题是我使用的是服务器的IP地址/etc/exports/而不是客户端的IP地址。

关键是,您应该将所有授予访问权限的IP放在服务器的 /etc/exports/


1

经过数小时的相同错误消息,我的问题才变得比NFS主机上老式的老式Linux文件权限更复杂。

我尝试共享的文件夹(/home/foo/app/share)具有正确的权限,但是由于用户的主目录(/home/foo)具有0750模式,因此NFS无法遍历该文件夹以访问共享目录。

一旦将用户的主目录设置为mode 0751,NFS服务便可以遍历该目录,并且可以从客户端计算机挂载共享。


0

对我来说,问题是我的路由器更改了客户端使用的IP地址,因此/etc/exports服务器计算机上的条目仅允许访问不再使用的IP地址。


0

如果尝试使用配置为的网络适配器在Virtual Box实例上装载NFS共享,可能会发生同样的事情NAT

选择Bridged Adapter虚拟机网络设置可以解决此问题。



0

尝试安装加密路径也可能导致此错误。(例如,在主目录中,如果您选择对其进行加密)


0

对我有用的唯一解决方案是导出以开头的文件系统/srv。看来这是NFSv4的限制(至少是默认选项)。

由于我试图导出自动挂载的USB驱动器/media,因此我需要一种将其“挂载”到下面的方法/srv。要做到这一点:

sudo mkdir /srv/videos
sudo mount --bind /media/jim/wdportable/videos /srv/videos

/etc/exports

/srv/videos 192.168.0.200(ro)

当我/media/jim/wdportable/videos直接导出时,尝试在客户端上挂载始终会导致mount.nfs: access denied by server

-o v3解决方案有效,但是我不想强制使用v3。


2
我几乎可以保证,这是由于对该/media/jim文件夹的权限所致。如果您要共享的目录是(或在其中)仅具有700750模式的目录,则NFS将无法遍历该目录。如果更改/media/jim751,则可能会起作用。
戴尔·安德森

@DaleAnderson是正确的。成功之后sudo mount -o v3 192.168.0.200:"/media/pi/mydrive" /mnt/nfs-share(在Raspi 3 B +上为树莓派),我也尝试了sudo chmod 751 /media/pi。之后,我不再需要-o v3sudo mount 192.168.0.200:"/media/pi/mydrive" /mnt/nfs-share完成该工作(在卸载之后)。非常感谢@DaleAnderson。
Thomas Praxl

这可能是问题所在。我想我已经习惯了NFS服务器仅以root身份运行并盲目导出所告诉的内容的古老时代。我会测试一下。
Jim Stewart

0

应当指出,引导我进入此处的链接页面有我正确的答案,那就是您不能在导出的IP地址中使用*通配符。它可以是*(所有IP),也可以用作域名IE:*。domain.com中的通配符。

例如:这是正确的

/Path/to/export 192.168.1.0/24(flags)

这是行不通的(或者至少是不正确的),但是对于我来说已经工作了好多年,直到我尝试从Fedora VM安装出口。

/Path/to/export 192.168.1.*(flags)


我认为它失败的原因可能是NFSv4,因为我知道Fedora正在使用最新的功能,而我的旧VM工作正常,但可能使用了较旧的NFS版本。只是一个猜测。
FreeSoftwareServers
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.