automount nfs:不可靠服务器的 autofs 超时设置 - 如何避免挂断?

Bru*_*tus 18 file-server configuration automounting nfs autofs

我正在为我们的平板共享运行一个小型服务器。它主要是带有一些附加服务的文件服务器。客户端是 Linux 机器(主要是 Ubuntu,但也有其他一些发行版)和介于两者之间的一些 Mac(-Book)(但它们对于问题并不重要)。服务器运行的是Ubuntu 11.10 (Oneiric Ocelot)“服务器版”,我从中进行设置和测试的系统运行的是 11.10“桌面版”。我们使用 Samba(我们更熟悉)运行我们的共享很长一段时间,然后迁移到NFS(因为我们在 LAN 中没有任何 Windows 用户并想尝试一下),到目前为止一切正常.

现在我想使用autofs设置自动挂载以平滑一切(到目前为止,每个人都在需要时手动挂载共享)。自动安装似乎也有效。问题是我们的“服务器”不是 24/7 全天候运行以节省能源(如果有人需要服务器上的东西,他/她会打开它然后关闭它,所以它每天只运行几个小时)。但是由于 autofs 设置客户端挂断时服务器没有运行时经常退出。

  • 即使服务器没有运行,我也可以很好地启动所有客户端。

  • 但是,当我想显示一个目录(在终端或 nautilus 中)时,该目录包含指向共享的符号链接,/nfs而服务器未运行时,它会挂起至少两分钟(因为 autofs 无法连接到服务器但保持尝试,我假设)。

    • 有没有办法避免这种情况?这样挂载会延迟到目录更改或访问该目录的内容?不是在“查看”下共享的链接时/nfs?我认为不是,但也许有可能不尝试访问它这么长时间?只需给我一个空目录或“无法找到/连接到该目录”或类似的内容。
  • 当服务器运行时,一切正常。

  • 但是当服务器关闭时,卸载共享之前,工具(如dfll)挂起(假设是因为他们认为共享仍然存在但服务器将不再响应)。

    • 当连接丢失时,有没有办法自动卸载共享?
  • 此外,当服务器关闭并且它们仍然安装了共享时,客户端也不会关闭或重新启动。它们在“杀死剩余的进程”中挂起(看起来是无限的)并且似乎什么也没发生。

我认为这一切都归结为安装和卸载的简洁超时值。并且可能在与服务器的连接丢失时删除所有共享。

所以我的问题是:如何处理这个?作为奖励:是否有一种/nfs无需挂载真实共享即可在内部链接的好方法(autofs 选项或可能使用/nfs在挂载发生或类似情况时被替换的伪 FS )?

我的设置

NFS设置是非常基本的,但我们很好,到目前为止(使用服务的NFSv4):

/etc/default/nfs-common

NEED_STATD=
STATDOPTS=
NEED_IDMAPD=YES
NEED_GSSD=
Run Code Online (Sandbox Code Playgroud)

/etc/idmapd.conf

[General]
Verbosity = 0
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
Domain = localdomain
[Mapping]
Nobody-User = nobody
Nobody-Group = nogroup
Run Code Online (Sandbox Code Playgroud)

/etc/出口

/srv/   192.168.0.0/24(rw,no_root_squash,no_subtree_check,crossmnt,fsid=0)
Run Code Online (Sandbox Code Playgroud)

在导出根/srv目录下,我们有两个目录bind

/etc/fstab(服务器)

...
/shared/shared/      /srv/shared/      none    bind  0 0
/home/Upload/        /srv/upload/      none    bind  0 0
Run Code Online (Sandbox Code Playgroud)

第一个主要是只读的(但我通过文件属性和所有权而不是 NFS 设置来强制执行),第二个是所有人的rw。注意:它们在/etc/exports 中没有额外的条目,但单独安装它们是可行的。

在客户端,他们/etc/fstab根据需要进行设置和手动安装(morton是服务器的名称,它可以很好地解析)。

/etc/fstab(客户端)

morton:/shared  /nfs/shared nfs4    noauto,users,noatime,soft,intr,rsize=8192,wsize=8192    0   0
morton:/upload  /nfs/upload nfs4    noauto,users,noatime,soft,intr,rsize=8192,wsize=8192    0   0
Run Code Online (Sandbox Code Playgroud)

对于autofs 设置,我从/etc/fstab客户端上删除了条目,然后像这样设置其余条目:

/etc/auto.master

/nfs    /etc/auto.nfs
Run Code Online (Sandbox Code Playgroud)

首先,我绑定了提供的可执行文件/etc/auto.net(您可以在此处查看),但它不会自动为我挂载任何内容。然后我/etc/auto.nfs根据我在网上找到的一些 HowTos写了一个:

/etc/auto.nfs

shared  -fstype=nfs4  morton:/shared
upload  -fstype=nfs4  morton:/upload
Run Code Online (Sandbox Code Playgroud)

它有点工作......或者如果服务器可以 24/7 运行也可以工作。因此,当客户端在没有服务器运行的情况下启动时,或者当服务器关闭而共享仍然连接时,我们会挂断。

Nil*_*ils 22

使用挂载选项“bg,intr,hard”在客户端上挂载 NFS 共享。

在您的情况下,最重要的是后台的“bg” - 它告诉系统在服务器不可用时不要阻止。

“intr”表示可中断 - 因此您可以使用 kill 命令杀死客户端上的挂载。

“硬”是“软”的反义词。不同之处在于“硬”将无休止地尝试,而“软”将在服务器不可用时以指数方式回退其重试。

  • Hard 将无休止地重试 - 如果现在无法进行挂载,bg 将不会阻塞。结果将是它在可用时安装,但所有其他操作将继续。INTR 现在似乎是默认值 - 这很棒。一开始,如果您的 NFS 服务器死机,您必须重新启动挂起的客户端...... (2认同)

Bru*_*tus 7

我使用手册页中的一些选项进行了更多操作。所有bg,hard, bg,soft,fg,hardfg,soft给我超过两小步的返回时间。

但是,设置retrans=1,retry=0(与上述任何一项结合)给了我大约三秒钟的时间。还算体面。尽管我不确定每种组合的含义。将进一步挖掘。

我还遇到了 autofs 选项MOUNT_WAITUMOUNT_WAIT. 我还没有能够得到一些不同的结果,但我会继续努力。似乎是使用“更安全”(也就是更多重试等)NFS 选项的好方法,但 autofs 的返回时间是否很快?


小智 2

使用任何挂载系统,您都希望避免出现 Nautilus 列出包含可能已挂载或未挂载的挂载的目录的情况。因此,对于 autofs,不要在 /nfs 等位置创建挂载。如果这样做,当您使用 Nautilus 列出“文件系统”时,它将尝试创建 /nfs 中应存在的任何挂载,如果这些挂载尝试失败,则需要几分钟才能放弃。

所以我所做的就是更改 auto.master 以在 /nfs/mnt 中创建安装。

这解决了我的问题。如果我尝试列出 /nfs/mnt 的内容,我只会遇到很长的延迟,这是我可以轻松避免的。