autofs 失败,目录在服务器上交叉挂载,直到 root 访问它们

autofs 失败,目录在服务器上交叉挂载,直到 root 访问它们

当我尝试访问 nfs 服务器上交叉挂载的目录时,结果会出现“操作不允许”错误,除非 root 最近访问过该目录。如果在超时期限内未触碰该目录,则用户无法再次访问它,直到 root 触碰为止。

我有一台 nfs 服务器,用于 AV 媒体、提供网页等。它的名字是 hamlet,运行 debian,并且有 (LVM) 分区用于 /export/web 和其他分区。Xenial 客户端无法遍历导出的目录层次结构,但其他客户端可以。

在服务器上:

Linux hamlet 3.16.0-4-686-pae #1 SMP Debian 3.16.7-ckt25-2 (2016-04-08) i686
nick@hamlet:~$ cat /etc/exports
/export        172.17.0.0/255.255.0.0(rw,sync,crossmnt,no_subtree_check)
/export/web    172.17.0.0/255.255.0.0(rw,sync,nohide,no_subtree_check)

(我知道这nohide应该是不必要的,但删除它并不能修复错误)

在 Xenial 台式机上,我将此服务器安装在目录 /auto 下:

nick@polonius:~$ uname -a
Linux polonius 4.4.0-31-generic #50-Ubuntu SMP Wed Jul 13 00:06:14 UTC 2016 i686 i686 i686 GNU/Linux
nick@polonius:~$ cat /etc/auto.auto 
# Mount exported directories from Hamlet under /auto
hamlet  -sec=sys,nfsvers=3,noacl        172.17.1.5:/export

在 /etc/auto.master 中我有

/auto   /etc/auto.auto

问题是,虽然出现了顶层自动挂载目录,但是普通用户无法更改为服务器上交叉挂载的目录。

我还有一台 Debian 笔记本电脑相同配置。这台笔记本电脑没有这个问题。但在 Ubuntu 机器上:

nick@polonius:~$ ls /auto
nick@polonius:~$ ls /auto/hamlet
archive  children  ebooks  iPlayer  media  photos  web
nick@polonius:~$ ls /auto/hamlet/web
ls: cannot open directory '/auto/hamlet/web': Operation not permitted
nick@polonius:~$ sudo ls /auto/hamlet/web
[sudo] password for nick: 
htdocs  lost+found  mail  mail_secrets.php  Thunderbird_Archives
nick@polonius:~$ ls /auto/hamlet/web
htdocs  lost+found  mail  mail_secrets.php  Thunderbird_Archives

在 Debain 笔记本电脑上:

nick@ariel:~$ uname -a
Linux ariel 4.6.0-1-amd64 #1 SMP Debian 4.6.3-1 (2016-07-04) x86_64 GNU/Linux
nick@ariel:~$ ls /auto
nick@ariel:~$ ls /auto/hamlet
archive  children  ebooks  iPlayer  media  photos  web
nick@ariel:~$ ls /auto/hamlet/web
htdocs  lost+found  mail  mail_secrets.php  Thunderbird_Archives

如果我使用 -f -v 在终端中运行自动挂载程序,它不会报告任何问题。此外,当 root 访问导致其出现的子目录时,它具有正确的权限。

nick@polonius:~$ sudo ls /auto/hamlet/web
htdocs  lost+found  mail  mail_secrets.php  Thunderbird_Archives
nick@polonius:~$ touch /auto/hamlet/web/thing
nick@polonius:~$ ls -l /auto/hamlet/web/thing
-rw-rw-r-- 1 nick nick 0 Jul 24 13:13 /auto/hamlet/web/thing
nick@polonius:~$ rm /auto/hamlet/web/thing
nick@polonius:~$

我敢打赌这是我的错,但我不知道该在 Ubuntu 机器上做哪些更改才能让它正常工作。Ubuntu 客户端大约一周前还在运行,所以这可能是一个倒退。

有什么建议吗?

答案1

恢复到 4.4.0 内核的版本 28 可使问题消失。具体来说,Linux 4.4.0-28-generic #47-Ubuntu SMP Fri Jun 24 10:08:35 UTC 2016 i686

我得出结论,在版本 28 和 31 之间存在回归,这会导致自动挂载程序发生故障,除非有人能看到我在配置文件中做错的事情(即我称之为错误,你可能会认为它是一个功能:))

答案2

我确实有一个类似的设置:Debian 8 文件服务器和几个 Ubuntu/Kubuntu 客户端。文件服务器上的 NFS 设置也类似。该设置已经运行了几个月,但在某个时刻,它开始在所有客户端上失败。我没有意识到更新是原因。我断断续续地努力了几个星期才找到一个客户端再次工作。更新应用于所有客户端。比较设置时,我没有发现任何差异。比较“uname -a”:不工作的客户端:“Linux xxxx-pc 4.4.0-31-generic #50-Ubuntu SMP Wed Jul 13 00:07:12 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux”

工作客户端:“Linux xxxx-desktop 4.4.0-33-generic #52-Ubuntu SMP Fri Jul 22 19:16:44 UTC 2016 x86_64 x86_64 x86_64 GNU/L inux”

事实证明,在正常工作的客户端上,我使用的是“xenial-proposed”更新,该更新会更新内核。在非正常工作的客户端上加载内核 4.4.0-33 可解决此问题。

相关内容