从 java 访问 NFS 共享
Posted
技术标签:
【中文标题】从 java 访问 NFS 共享【英文标题】:accessing an NFS share from java 【发布时间】:2015-09-22 20:50:19 【问题描述】:我正在尝试从我们的 Java 应用程序中找到一种访问 NFS 共享(理想情况下是所有权限,但我现在只满足于只读)的方法。我花了一天的大部分时间进行研究,最接近的是yanfs project(nee WebNFS),但它似乎没有更新,因为它也没有任何文档。我用它进行了一些低等级的实验,但都没有成功。
由于我们应用程序的性质,我无法预先安装卷(可能有零到多个),并且我想尽可能避免在程序中调用sudo mount
。不幸的是,这种方法是我能想到的唯一半可行的解决方案。欢迎提出任何建议。
另外:没有现代 NFS java 客户端库?真的吗?这不可能是对的。
【问题讨论】:
可能对***.com/a/1864341/3166303有帮助 您要挂载哪些“卷”?内网、外网、B2B、B2C、..? NFS 共享,可能来自 Isilon 设备之类的东西,但也可能是其他类型。我认为我们可以摆脱我们在同一个子网中的要求,但这不是一个可靠的事实。我忘了说要求也是支持 NFS 4.0。 我不希望有很多 NFS 客户端(或库)是用 Java 编写的。操作系统已经处理了它,所以我不希望对重新实现它有太大兴趣。也许看看 [FUSE(en.wikipedia.org/wiki/Filesystem_in_Userspace)。 autofs 也可以提供帮助,或者使用 'user' 选项列出 /etc/fstab 中的挂载点。 FUSE 看起来很有趣,除了 windows 客户端项目 (doken) 似乎已经死了。我必须能够在多个平台上使用它,etc/fstab 可能是一个选项,但它似乎有点混乱:我必须获取用户想要添加的 nfs 共享列表,将其附加到fstab(需要 root 才能这样做),然后重新运行 mount(再次使用 root 权限)。 autofs 的事情似乎很有希望。 Windows 似乎有一个自动挂载系统,我目前正在尝试看看它是否足够相似。 【参考方案1】:你查看过这个库https://github.com/dCache/nfs4j 吗?
它具有 NFSv3、NFSv4 和 NFS4.1 的服务器和客户端纯 Java 实现。
它有点低级,它不提供像 yaNFS 中的 XFile 这样的简单用法。
所以你必须做一些工作来读取和写入文件,但至少它完成了工作,无需挂载即可访问 NFS 导出。
您可以在项目 repo 中找到一些文件访问示例。
【讨论】:
嘿,在您发布此链接后,我们实际上决定使用它。谢谢! @KevinMilner:为回答您问题的人点击 +1 按钮对您来说是多么费力。我看到你已经努力写感谢信了。但是,答案有 0 票。 @bhrt 我通常非常慷慨地放弃投票。如果我对此发表评论(我确实这样做了),我几乎肯定会投赞成票。其他人可能会否决这个答案。但是感谢您在没有任何证据的情况下对我进行攻击。【参考方案2】:由于时间至关重要,我们现在要作弊。所以这是我制定的解决方案,以防以后有人出现。
我像@dsh 建议的那样查看了autofs。使用 Autofs,我将 /etc/auto.master
文件设置为具有以下行:
/mnt/fromNFS /usr/local/etc/auto.fromNFS --timeout=60
然后我触摸了/usr/local/etc/auto.fromNFS
,并将其所有权更改为运行应用程序的用户和组。
现在,我可以按语法修改 auto.fromFNS 文件以包含给定 nfs 共享的行。当我然后去访问那个目录时,它很好地被挂载了,不需要sudo
。
它并不理想,但看起来它现在可以完成工作。
感谢大家的建议。
【讨论】:
我创建了一个 java 库,它可以自动为您完成这项工作。 github.com/Seven10Storage/nfs-mounter以上是关于从 java 访问 NFS 共享的主要内容,如果未能解决你的问题,请参考以下文章