问题标签 [nfs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3572 浏览

apache - 从已安装但不可用的 NFS 安装中恢复 Apache

我在生产中有几个 Web 应用程序,它们利用 NFS 挂载在 Web 头之间共享资源(通常是静态资产文件)。如果 NFS 挂载不可用,Apache 将挂起无法访问的请求文件,内核将记录:

Nov 2 14:21:20 server2 kernel: nfs: server server1 not responding, still trying

我重现了运行 NFS v3 和 Apache 2.2.3 的 RHEL5 中的行为:

  1. 在 Server1 上创建 NFS 挂载(我的 /etc/exports 的内容)

    /srv/test_share server2(rw)

  2. 在 Server2 上挂载 NFS 共享(我的 /etc/fstab 的内容)

    server1:/srv/test_share /mnt/test_share nfs defaults 0 0

  3. 在 Apache 中设置一个虚拟主机,其中包含一个简单的 HTML 文件,该文件引用存储在 NFS 共享上的图像文件

  4. 加载网站,html和图片文件都返回200

  5. 卸载 NFS 共享,加载页面为引用的图像返回 404

  6. 重新挂载 NFS 共享

  7. 通过在 Server1 上关闭 NFS 来模拟 NFS 崩溃 - 重新加载站点会挂起检索引用的文件。

到目前为止,互联网搜索还没有找到一个好的解决方案。基本上,所需的行为是 Web 服务器返回 404,并且在 NFS 挂载恢复之前不会挂起。

干杯,

0 投票
5 回答
11695 浏览

java - NFS 挂载上的 Java I/O

我有一些 Java 代码将 XML 文件输出到 NFS 安装的文件系统。在将文件系统挂载为 Samba 共享的另一台服务器上,有一个进程正在运行,每 30 秒轮询一次新的 XML 文件。如果找到新文件,则会对其进行处理,然后将其重命名为备份文件。99% 的情况下,文件的写入没有问题。但是,备份文件时不时地包含一个部分写入的文件。

在与其他人讨论后,我们猜测外部服务器上运行的进程在读取文件时干扰了 Java 输出流。他们建议首先创建一个 .temp 类型的文件,然后在文件写入完成后将其重命名为 .xml。一种常见的行业惯例。更改后,每次重命名都失败。

一些研究表明,在使用 NFS 挂载的文件系统时,Java 文件 I/O 存在错误。

帮助我Java大师!我该如何解决这个问题?

以下是一些相关信息:

  • 我的进程是在 Solaris 10 上运行的 Java 1.6.0_16
  • 挂载的文件系统是 NAS
  • 具有轮询过程的服务器是 Windows Server 2003 R2 Standard,Service Pack 2

这是我的代码示例:

0 投票
1 回答
1697 浏览

c - 通过 C 中的 NFS v4 进行文件锁定租约

有人知道如何使用 NFS v4 的精美文件锁定功能吗?(在例如关于 NFS 协议(向下滚动)中进行了描述)。据说 NFS v4 支持 45 秒生命周期的文件锁租赁。我愿意相信 linux 内核(我使用的是 gentoo 2.6.30)会愉快地处理这些细节,并且我可以使用fcntl()它,而且一切都会被洗掉。然而,我猜测我必须以某种方式做一些特别的事情来获取、维护和释放锁租约。所有帮助表示赞赏。

0 投票
3 回答
13168 浏览

nfs - Windows 共享上的 NFS 或 SMB

如果我要创建一个 Windows 共享文件夹,在该文件夹中放置一个数据库文件,以便在我们的客户端应用程序的多个用户之间共享,那是 NFS 还是 SMB 共享文件夹?

0 投票
3 回答
12680 浏览

java - 从 Java 程序访问 NFS 共享

我想从我的 Java 程序的 NFS 共享中读取一些数据。我需要程序首先对 NFS 服务器进行身份验证,然后执行 I/O。(要求先前安装 NFS 共享是不可接受的。)

所以,我想要这个库提供的功能:http: //jcifs.samba.org/,除了 NFS 而不是 CIFS。Java已经内置了这样的东西,还是我需要第三方库?

我也对这是否可以在 Perl、Python 或 Ruby 中完成感兴趣。但主要是Java。

0 投票
1 回答
1627 浏览

unix - 文件读写锁定和取消链接

我有以下问题。我想创建一个基于文件系统的会话存储,其中每个会话数据都存储在以会话 ID 命名的简单文件中。

我想要以下 API: write(sid,data,timeout), read(sid,data,timeout),remove(sid) 其中 sid==file name, 另外我想要某种可以删除所有超时会话的 GC。

如果您使用单个进程,则任务非常简单,但在使用多个进程甚至通过 NFS 时绝对不是微不足道的。

我想到的最简单的解决方案是:

文件取消链接适用于文件名和文件锁适用于文件描述符的最大问题。因此,上述情况在以下情况下不起作用:

有人知道如何解决此类问题吗?是否有任何技巧可以结合文件锁定和文件删除或对文件进行原子操作?

笔记:

  • 我不想使用数据库,
  • 我正在寻找 Unix 的解决方案
  • 解决方案应适用于标准 POSIX 调用,如 fcnl、打开、关闭、取消链接

谢谢。

澄清主要问题是对文件的操作(名称 - 取消链接)应该通过文件描述符的操作原子地完成 - 锁定:

  • 打开,取消链接——处理文件
  • fnctl -- 处理描述符
0 投票
3 回答
329 浏览

installation - 运行 shell 脚本时,如何保护它不被覆盖或截断文件?

如果在应用程序运行时它使用的共享库之一被写入或截断,则应用程序将崩溃。移动文件或使用 'rm' 批量删除文件不会导致崩溃,因为操作系统(在这种情况下是 Solaris,但我认为这在 Linux 和其他 *nix 上也是如此)足够聪明,不会删除与该文件,而任何进程打开它。

我有一个执行共享库安装的 shell 脚本。有时,它可用于重新安装已安装的共享库版本,而无需先卸载。因为应用程序可能正在使用已经安装的共享库,所以脚本足够聪明以 rm 文件或将它们移开(例如,当我们知道没有应用程序时 cron 可能会清空的“已删除”文件夹),这一点很重要将运行),然后再安装新的,这样它们就不会被覆盖或截断。

不幸的是,最近一个应用程序在安装后就崩溃了。巧合?很难说。这里真正的解决方案是切换到比旧的巨大 shell 脚本更健壮的安装方法,但是在切换之前有一些额外的保护会很好。有没有办法包装一个 shell 脚本来保护它不被覆盖或截断文件(最好是大声失败),但仍然允许它们被移动或 rm'd?

标准 UNIX 文件权限无法解决问题,因为您无法区分移动/删除和覆盖/截断。别名可以工作,但我不确定需要别名的所有命令。我想像 truss/strace 之类的东西,除了在每个操作之前它检查过滤器是否实际执行它。我不需要一个完美的解决方案,即使是针对故意的恶意脚本也能起作用。

0 投票
2 回答
5165 浏览

client - NFS 客户端库

我正在寻找一些独立的库来访问 NFS 共享。我不是在寻找安装共享,只是浏览和访问文件以供阅读。

最好有一个简单的 API,类似于常规的 POSIX 操作opendirscandir等等read

提前致谢!

0 投票
1 回答
1941 浏览

kill - 谈到 NFS 挂载选项时,什么是“肯定会杀死”?

在以下链接中

http://www.faqs.org/docs/Linux-HOWTO/NFS-HOWTO.html

它说除非通过“肯定杀死”,否则进程是不可杀死的,但是什么是肯定杀死?

硬(NFS 客户端挂载选项)

当服务器崩溃时,访问 NFS 挂载文件系统上的文件的程序将挂起。除非您还指定 intr,否则该进程不能被中断或终止(除非通过“确定终止” )。当 NFS 服务器重新联机时,程序将继续从原来的位置不受干扰。我们建议在所有 NFS 挂载的文件系统上使用 hard,intr。

0 投票
2 回答
1356 浏览

linux - 将多个标准输出重定向到单个文件

我有一个程序在 NFS 的多台机器上运行,我想将它们的所有输出记录到一个文件中。我可以只./my_program >> filename在每台机器上运行,还是我应该注意并发问题?由于我只是追加,我认为不会有问题,但我只是想确保。