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
?我认为不是,但也许有可能不尝试访问它这么长时间?只需给我一个空目录或“无法找到/连接到该目录”或类似的内容。当服务器运行时,一切正常。
但是当服务器关闭时,在卸载共享之前,工具(如df
或ll
)挂起(假设是因为他们认为共享仍然存在但服务器将不再响应)。
此外,当服务器关闭并且它们仍然安装了共享时,客户端也不会关闭或重新启动。它们在“杀死剩余的进程”中挂起(看起来是无限的)并且似乎什么也没发生。
我认为这一切都归结为安装和卸载的简洁超时值。并且可能在与服务器的连接丢失时删除所有共享。
所以我的问题是:如何处理这个?作为奖励:是否有一种/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 命令杀死客户端上的挂载。
“硬”是“软”的反义词。不同之处在于“硬”将无休止地尝试,而“软”将在服务器不可用时以指数方式回退其重试。
我使用手册页中的一些选项进行了更多操作。所有bg,hard
, bg,soft
,fg,hard
并fg,soft
给我超过两小步的返回时间。
但是,设置retrans=1,retry=0
(与上述任何一项结合)给了我大约三秒钟的时间。还算体面。尽管我不确定每种组合的含义。将进一步挖掘。
我还遇到了 autofs 选项MOUNT_WAIT
和UMOUNT_WAIT
. 我还没有能够得到一些不同的结果,但我会继续努力。似乎是使用“更安全”(也就是更多重试等)NFS 选项的好方法,但 autofs 的返回时间是否很快?
小智 2
使用任何挂载系统,您都希望避免出现 Nautilus 列出包含可能已挂载或未挂载的挂载的目录的情况。因此,对于 autofs,不要在 /nfs 等位置创建挂载。如果这样做,当您使用 Nautilus 列出“文件系统”时,它将尝试创建 /nfs 中应存在的任何挂载,如果这些挂载尝试失败,则需要几分钟才能放弃。
所以我所做的就是更改 auto.master 以在 /nfs/mnt 中创建安装。
这解决了我的问题。如果我尝试列出 /nfs/mnt 的内容,我只会遇到很长的延迟,这是我可以轻松避免的。