当 NFS 服务器离线时,NFS 客户端的 nautilus 会挂起

当 NFS 服务器离线时,NFS 客户端的 nautilus 会挂起

NFS 服务器:Ubuntu 14.04 服务器

NFS 客户端:Ubuntu 14.04 桌面版 64 位

在客户端上,我安装了 NFS 共享 mount -v -t nfs NFSSERVER_IP:/servernfsfolder ~/clientnfs

挂载成功,我能够通过文件资源管理器看到我的 ~/clientnfs 文件夹中的所有 NFS 共享文件。

问题: 假设 NFS 服务器离线,而我的客户端上安装了 NFS 共享,那么我的客户端的 nautilus 将会挂起,而且我也无法在主目录中执行“ls”。

当我的服务器离线时,如何让我的 NFS 客户端计算机自动卸载 NFS 共享?

答案1

这看起来有点旧,所以我不确定你是否已经找到答案,但我最近解决了一个类似的问题。

该问题因多个问题而变得更加严重:

  1. 新的文件浏览器始终会提取有关可用的各种文件系统的信息 - 这意味着如果您有 5 个已安装的共享,无论它们是 SSH、CIFS 还是 NFS,并且在位置窗格(左侧)的“网络”部分下可见,它们将始终调用 fread()。
  2. 其中一些共享将需要更长时间才能响应 - 即使具有正确的凭据,并且在一段时间不活动后打开它时,或者如果服务器消失,则会显得 nautilus 已挂起。
  3. 许多其他应用程序会导致 nautilus fread() - 我亲眼目睹了这在 nautilus 进程上执行 strace,但这个问题似乎只有在某些东西请求完整列表(如文件打开窗口)时才会出现。
  4. 每次打开 nautilus(只需单击面板上的文件夹图标)时,它都会扫描主目录中的文件夹及其内容。如果您将挂载点设置为 /home/$user/server_mount 之类的位置,则当服务器不可用时,nautilus 就会挂起。

请注意,这也会影响其他应用程序,例如 Evolution。接收日历事件或回复消息会导致 Evolution 在等待时变暗。我猜它正在请求附件按钮的完整文件列表,但我没有进一步调查。

我自己快速想到的解决办法是卸载我连接的网络共享。目前,我只会在需要访问资源时连接,然后在完成后卸载。

你是半永久性地依附的,所以你的解决方案会有点不同,这是我过去做过的事情。

  1. 为了在服务器恢复后处理重新连接,你需要使用自动挂载程序 - 例如 autofs
  2. 为了处理服务器不可用时 nautilus 挂起的问题,请将挂载点重新定位到非 nautilus 默认起点的位置,例如子目录。/home/$user/mounts/server_mount
  3. 当服务器停止运行后,您需要让挂载及时地正常恢复到应用程序。为此,您需要将交换机添加soft,retrans=1,retry=0,intr到挂载中。如果我没记错的话,retrans、retry 值仅适用于 NFS over UDP,这是默认设置。如果您通过 TCP 使用它,则超时值将基于 TCP 堆栈设置。

高血压

相关内容