我正在为我们的合租空间运行一台小型服务器。这主要是一个文件服务器以及一些附加服务。客户端是 Linux 机器(主要是 Ubuntu,但也有其他一些发行版)和介于两者之间的一些 Mac(-Book)(但它们对于这个问题并不重要)。服务器正在运行乌班图11.10(Oneiric Ocelot)“服务器版”,我进行设置和测试的系统运行 11.10“桌面版”。我们使用 Samba(我们更熟悉)运行我们的共享相当长一段时间,但随后迁移到网络文件系统(因为我们局域网内没有任何Windows用户,想尝试一下)到目前为止一切正常。
现在我想设置自动安装自动文件系统使事情顺利进行(到目前为止,每个人都在需要时手动安装共享)。自动安装似乎也有效。问题是我们的“服务器”不会24/7运行以节省能源(如果有人需要服务器上的东西,他/她会打开服务器然后关闭它,所以它每天只运行几个小时)。但由于 autofs 设置,当服务器不运行时,客户端经常挂起退出。
即使服务器没有运行,我也可以很好地启动所有客户端。
但是,当我想显示一个目录(在终端或 nautilus 中),该目录包含到
/nfs
服务器未运行时下的共享的符号链接时,它会挂起至少两分钟(因为 autofs 无法连接到服务器,但会保留我想,正在尝试)。- 有办法避免这种情况吗?这样安装就会被延迟,直到目录发生更改或访问该目录的内容为止?不是在“查看”下面的共享链接时吗
/nfs
?我认为不是,但也许这么长时间不尝试访问它是可能的?只需给我一个空目录或“无法找到/连接到该目录”或类似的内容即可。
- 有办法避免这种情况吗?这样安装就会被延迟,直到目录发生更改或访问该目录的内容为止?不是在“查看”下面的共享链接时吗
当服务器运行时,一切正常。
但是当服务器关闭时,前共享被卸载,工具(例如
df
或ll
)挂起(假设因为他们认为共享仍然存在,但服务器不再响应)。- 当连接丢失时,有没有办法自动卸载共享?
此外,当服务器关闭且客户端仍挂载共享时,客户端不会关闭或重新启动。它们悬挂在(看起来是无限的)“杀死剩余进程”并且似乎什么也没有发生。
我认为这一切都归结为安装和卸载的简洁超时值。当与服务器的连接丢失时,也许会删除所有共享。
所以我的问题是:如何处理这个问题?作为奖励:有没有一种好的方法可以在/nfs
不需要挂载真实共享的情况下进行内部链接(autofs 选项或者可能使用伪 FS,/nfs
当挂载发生时会被替换或类似的事情)?
我的设置
这NFS 设置非常基本,但到目前为止为我们提供了很好的服务(使用NFSv4):
/etc/default/nfs-common
NEED_STATD=
STATDOPTS=
NEED_IDMAPD=YES
NEED_GSSD=
/etc/idmapd.conf
[General]
Verbosity = 0
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
Domain = localdomain
[Mapping]
Nobody-User = nobody
Nobody-Group = nogroup
/etc/出口
/srv/ 192.168.0.0/24(rw,no_root_squash,no_subtree_check,crossmnt,fsid=0)
在导出根目录下,/srv
我们有两个目录bind
:
/etc/fstab(服务器)
...
/shared/shared/ /srv/shared/ none bind 0 0
/home/Upload/ /srv/upload/ none bind 0 0
第一个大部分是只读的(但我通过文件属性和所有权而不是 NFS 设置来强制执行),第二个是读写对全部。注意:他们没有额外的条目/etc/出口,但单独安装它们是可行的。
在客户端,它们/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
为了自动文件系统设置我从客户端上删除了条目/etc/fstab
,并将其余部分设置如下:
/etc/auto.master
/nfs /etc/auto.nfs
首先我绑定了提供的可执行文件/etc/auto.net
(你可以看一下这里)但它不会自动为我安装任何东西。然后我/etc/auto.nfs
根据网上找到的一些HowTos写了一个:
/etc/auto.nfs
shared -fstype=nfs4 morton:/shared
upload -fstype=nfs4 morton:/upload
它有点工作......或者如果服务器 24/7 运行的话就会工作。因此,当客户端在服务器未运行的情况下启动时,或者当服务器在共享仍连接的情况下关闭时,我们就会遇到挂断。
答案1
使用挂载选项“bg,intr,hard”在客户端上挂载 NFS 共享。
在您的情况下,最重要的是“bg”作为背景 - 它告诉系统在服务器不可用时不要阻止。
“intr”表示可中断 - 因此您可以使用kill命令杀死客户端上的挂载。
“硬”与“软”相反。不同之处在于,“硬”将继续无休止地尝试,而“软”将在服务器不可用时以指数方式回退重试。
答案2
我又尝试了一些手册页中的一些选项。所有bg,hard
、bg,soft
、fg,hard
以及fg,soft
给我超过两分钟的返回时间。
不过,设置retrans=1,retry=0
(与上述任何一项相结合)给了我大约三秒的时间。相当不错。虽然我不太确定每个组合的含义。将进一步挖掘。
我还遇到了 autofs 选项MOUNT_WAIT
和UMOUNT_WAIT
.我还没能从他们身上得到一些不同的结果,但我会继续努力。似乎是使用“更安全”(又名更多重试等)NFS 选项但 autofs 快速返回时间的好方法,或者不是?
答案3
使用任何挂载系统,您都希望避免出现 Nautilus 列出包含可能已挂载或未挂载的挂载的目录的情况。因此,对于 autofs,不要在 /nfs 等位置创建挂载。如果这样做,当您使用 Nautilus 列出“文件系统”时,它将尝试创建 /nfs 中应存在的任何挂载,如果这些挂载尝试失败,则需要几分钟才能放弃。
所以我所做的就是更改 auto.master 以在 /nfs/mnt 中创建安装。
这解决了我的问题。如果我尝试列出 /nfs/mnt 的内容,我只会遇到很长的延迟,这是我可以轻松避免的。
答案4
要将 NFS 文件系统设置为在每次启动 Red Hat Linux 系统时自动安装,您需要将该 NFS 文件系统的条目添加到 /etc/fstab 文件中。 /etc/fstab 文件包含有关 Red Hat Linux 系统的所有不同类型的已挂载(和可挂载)文件系统的信息。 EX: : nfs 对应于导出文件系统的服务器的主机名、IP 地址或完全限定域名。是导出目录的路径。指定在本地文件系统上挂载导出目录的位置。该挂载点必须在读取 /etc/fstab 之前存在,否则挂载将失败 该区域指定文件系统的挂载选项。例如,如果选项区域指定 rw,suid,则导出的文件系统将以读写方式挂载,并使用服务器设置的用户和组 ID。注意这里不要使用括号